import { TestBed } from '@angular/core/testing'; import { LoginService } from './login.service'; import {LocalStorageService} from 'angular-2-local-storage'; import {ApiService} from './api.service'; import {Observable} from 'rxjs'; let loginService: LoginService; let apiServiceSpy: jasmine.SpyObj; let localStorageServiceSpy: jasmine.SpyObj; describe('LoginService', () => { beforeEach(() => { const apiSpy = jasmine.createSpyObj('ApiService', ['get']); const localStorageSpy = jasmine.createSpyObj('LocalStorageService', ['set', 'remove']); TestBed.configureTestingModule({ providers: [ LoginService, {provide: ApiService, useValue: apiSpy}, {provide: LocalStorageService, useValue: localStorageSpy} ] }); loginService = TestBed.inject(LoginService); apiServiceSpy = TestBed.inject(ApiService) as jasmine.SpyObj; localStorageServiceSpy = TestBed.inject(LocalStorageService) as jasmine.SpyObj; }); it('should be created', () => { expect(loginService).toBeTruthy(); }); describe('login', () => { it('should store the basic auth', () => { localStorageServiceSpy.set.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable()); loginService.login('username', 'password'); expect(localStorageServiceSpy.set).toHaveBeenCalledWith('basicAuth', 'dXNlcm5hbWU6cGFzc3dvcmQ='); }); it('should remove the basic auth if login fails', () => { localStorageServiceSpy.set.and.returnValue(true); localStorageServiceSpy.remove.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable(o => o.error())); loginService.login('username', 'password'); expect(localStorageServiceSpy.remove.calls.count()).toBe(1); expect(localStorageServiceSpy.remove).toHaveBeenCalledWith('basicAuth'); }); it('should resolve true when login succeeds', async () => { localStorageServiceSpy.set.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable(o => o.next({status: 'Authorization successful', method: 'basic'}))); expect(await loginService.login('username', 'password')).toBeTruthy(); }); it('should resolve false when a wrong result comes in', async () => { localStorageServiceSpy.set.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable(o => o.next({status: 'xxx', method: 'basic'}))); expect(await loginService.login('username', 'password')).toBeFalsy(); }); it('should resolve false on an error', async () => { localStorageServiceSpy.set.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable(o => o.error())); expect(await loginService.login('username', 'password')).toBeFalsy(); }); }); describe('canActivate', () => { it('should return false at first', () => { expect(loginService.canActivate(null, null)).toBeFalsy(); }); it('returns true if login was successful', async () => { localStorageServiceSpy.set.and.returnValue(true); apiServiceSpy.get.and.returnValue(new Observable(o => o.next({status: 'Authorization successful', method: 'basic'}))); await loginService.login('username', 'password'); expect(loginService.canActivate(null, null)).toBeTruthy(); }); }); });