auth_service.spec.ts 2.57 KB


import {AuthService, AUTH_EVENTS} from "./";
import {User, Credentials} from "./../../models/interfaces";

describe("Services", () => {


    describe("Auth Service", () => {

        let $httpBackend: ng.IHttpBackendService;
        let authService: AuthService;
        let credentials: Credentials;
        let $rootScope: ng.IRootScopeService;
        let user: User;

        beforeEach(angular.mock.module("noosferoApp"));

        beforeEach(inject((_$httpBackend_: ng.IHttpBackendService, _$rootScope_: ng.IRootScopeService, _AuthService_: AuthService) => {
            $httpBackend = _$httpBackend_;
            authService = _AuthService_;
            $rootScope = _$rootScope_;

            user = <User>{
                id: 1,
                login: "user"
            };
        }));


        describe("Succesffull login", () => {

            beforeEach(() => {
                credentials = { username: "user", password: "password" };

                $httpBackend.expectPOST("/api/v1/login", "login=user&password=password").respond(200, { user: user });
            });

            it("should return loggedUser", (done) => {
                authService.login(credentials).then((loggedUser) => {
                    expect(loggedUser).toBeDefined();
                    done();
                });
                $httpBackend.flush();
                expect($httpBackend.verifyNoOutstandingRequest());
            });


            it("should emit event loggin successful with user logged data", () => {

                authService.login(credentials);

                let eventEmmited: boolean = false;
                $rootScope.$on(AUTH_EVENTS.loginSuccess, (event: ng.IAngularEvent, userThroughEvent: User) => {
                    eventEmmited = true;
                    expect(userThroughEvent).toEqual(user)
                });

                $httpBackend.flush();

                expect(eventEmmited).toBeTruthy(AUTH_EVENTS.loginSuccess + " was not emmited!");
            });

            it("should return the current logged in user", () => {
                authService.login(credentials);
                $httpBackend.flush();
                let actual: User = authService.currentUser();
                expect(actual).toEqual(user, "The returned user must be present");
            });

            it("should not return the current user after logout", () => {
                authService.logout();
                let actual: any = authService.currentUser();
                expect(actual).toEqual(undefined, "The returned user must not be defined");
            });
        });


    });
});