diff options
author | crupest <crupest@outlook.com> | 2019-03-14 16:34:26 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-03-14 16:34:26 +0800 |
commit | 58278112bcf4b35bdc2011771dc53646910fc995 (patch) | |
tree | 6c9d58562f715a50dfd0831e1ac53e282c9c4b80 /Timeline | |
parent | 7c6b4f45f9e228e461836ee0bf17e41b467ab521 (diff) | |
download | timeline-58278112bcf4b35bdc2011771dc53646910fc995.tar.gz timeline-58278112bcf4b35bdc2011771dc53646910fc995.tar.bz2 timeline-58278112bcf4b35bdc2011771dc53646910fc995.zip |
Add auth guard unit test.
Diffstat (limited to 'Timeline')
-rw-r--r-- | Timeline/ClientApp/src/app/user/auth.guard.spec.ts | 64 |
1 files changed, 55 insertions, 9 deletions
diff --git a/Timeline/ClientApp/src/app/user/auth.guard.spec.ts b/Timeline/ClientApp/src/app/user/auth.guard.spec.ts index 7ed05ee8..42e35bf7 100644 --- a/Timeline/ClientApp/src/app/user/auth.guard.spec.ts +++ b/Timeline/ClientApp/src/app/user/auth.guard.spec.ts @@ -1,15 +1,61 @@ -import { TestBed, async, inject } from '@angular/core/testing'; - -import { AuthGuard } from './auth.guard'; +import { AuthGuard, AuthStrategy } from './auth.guard'; +import { UserInfo } from './entities'; describe('AuthGuard', () => { + class ConfiurableAuthGuard extends AuthGuard { + constructor(mockInternalUserService: any) { + super(mockInternalUserService); + } + + authStrategy: AuthStrategy = 'all'; + onAuthFailed: () => void = () => { }; + } + + let mockUserService: { currentUserInfo: UserInfo | null }; + let guard: ConfiurableAuthGuard; + let onAuthFialedSpy: jasmine.Spy; + + const mockRoles = ['role1', 'role2']; + + interface ActivateResultMap { + nologin: boolean; + loginWithNoRole: boolean; + loginWithMockRoles: boolean; + } + + + function createTest(authStrategy: AuthStrategy, result: ActivateResultMap): () => void { + return () => { + guard.authStrategy = authStrategy; + + mockUserService.currentUserInfo = null; + expect(guard.canActivate(<any>null, <any>null)).toBe(result.nologin); + + mockUserService.currentUserInfo = { username: 'user', roles: [] }; + expect(guard.canActivate(<any>null, <any>null)).toBe(result.loginWithNoRole); + + mockUserService.currentUserInfo = { username: 'user', roles: mockRoles }; + expect(guard.canActivate(<any>null, <any>null)).toBe(result.loginWithMockRoles); + }; + } + beforeEach(() => { - TestBed.configureTestingModule({ - providers: [AuthGuard] - }); + mockUserService = { currentUserInfo: null }; + guard = new ConfiurableAuthGuard(mockUserService); + onAuthFialedSpy = spyOn(guard, 'onAuthFailed'); }); - it('should ...', inject([AuthGuard], (guard: AuthGuard) => { - expect(guard).toBeTruthy(); - })); + + it('all should work', createTest('all', { nologin: true, loginWithNoRole: true, loginWithMockRoles: true })); + it('require login should work', createTest('requirelogin', { nologin: false, loginWithNoRole: true, loginWithMockRoles: true })); + it('require no login should work', createTest('requirenologin', { nologin: true, loginWithNoRole: false, loginWithMockRoles: false })); + it('good roles should work', createTest(mockRoles, { nologin: false, loginWithNoRole: false, loginWithMockRoles: true })); + it('bad roles should work', createTest(['role3'], { nologin: false, loginWithNoRole: false, loginWithMockRoles: false })); + + it('auth failed callback should be called', () => { + guard.authStrategy = 'requirelogin'; + mockUserService.currentUserInfo = null; + guard.canActivate(<any>null, <any>null); + expect(onAuthFialedSpy).toHaveBeenCalled(); + }); }); |