aboutsummaryrefslogtreecommitdiff
path: root/Timeline
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-03-14 16:34:26 +0800
committercrupest <crupest@outlook.com>2019-03-14 16:34:26 +0800
commit58278112bcf4b35bdc2011771dc53646910fc995 (patch)
tree6c9d58562f715a50dfd0831e1ac53e282c9c4b80 /Timeline
parent7c6b4f45f9e228e461836ee0bf17e41b467ab521 (diff)
downloadtimeline-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.ts64
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();
+ });
});