diff options
author | 杨宇千 <crupest@outlook.com> | 2019-04-11 20:02:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-11 20:02:33 +0800 |
commit | 5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95 (patch) | |
tree | 695f7fc0bd2f6d940f64739a1f1f500c36806cef /Timeline/ClientApp/src/app/user/auth.guard.spec.ts | |
parent | 1c9edc5914869a3bbde20742c483182636ee4d43 (diff) | |
parent | c28941c6d86f8ea33521bba49d811bf3ff60b3d1 (diff) | |
download | timeline-5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95.tar.gz timeline-5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95.tar.bz2 timeline-5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95.zip |
Merge pull request #17 from crupest/15-user
Remember me and log out feature.
Diffstat (limited to 'Timeline/ClientApp/src/app/user/auth.guard.spec.ts')
-rw-r--r-- | Timeline/ClientApp/src/app/user/auth.guard.spec.ts | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/Timeline/ClientApp/src/app/user/auth.guard.spec.ts b/Timeline/ClientApp/src/app/user/auth.guard.spec.ts index 42e35bf7..6a36fea6 100644 --- a/Timeline/ClientApp/src/app/user/auth.guard.spec.ts +++ b/Timeline/ClientApp/src/app/user/auth.guard.spec.ts @@ -1,3 +1,5 @@ +import { Observable, of } from 'rxjs'; + import { AuthGuard, AuthStrategy } from './auth.guard'; import { UserInfo } from './entities'; @@ -8,10 +10,9 @@ describe('AuthGuard', () => { } authStrategy: AuthStrategy = 'all'; - onAuthFailed: () => void = () => { }; } - let mockUserService: { currentUserInfo: UserInfo | null }; + let mockUserService: { userInfo$: Observable<UserInfo | null> }; let guard: ConfiurableAuthGuard; let onAuthFialedSpy: jasmine.Spy; @@ -28,19 +29,27 @@ describe('AuthGuard', () => { return () => { guard.authStrategy = authStrategy; - mockUserService.currentUserInfo = null; - expect(guard.canActivate(<any>null, <any>null)).toBe(result.nologin); + function testWith(userInfo: UserInfo | null, r: boolean) { + mockUserService.userInfo$ = of(userInfo); - mockUserService.currentUserInfo = { username: 'user', roles: [] }; - expect(guard.canActivate(<any>null, <any>null)).toBe(result.loginWithNoRole); + const rawResult = guard.canActivate(<any>null, <any>null); + if (typeof rawResult === 'boolean') { + expect(rawResult).toBe(r); + } else if (rawResult instanceof Observable) { + rawResult.subscribe(next => expect(next).toBe(r)); + } else { + throw new Error('Unsupported return type.'); + } + } - mockUserService.currentUserInfo = { username: 'user', roles: mockRoles }; - expect(guard.canActivate(<any>null, <any>null)).toBe(result.loginWithMockRoles); + testWith(null, result.nologin); + testWith({ username: 'user', roles: [] }, result.loginWithNoRole); + testWith({ username: 'user', roles: mockRoles }, result.loginWithMockRoles); }; } beforeEach(() => { - mockUserService = { currentUserInfo: null }; + mockUserService = { userInfo$: of(null) }; guard = new ConfiurableAuthGuard(mockUserService); onAuthFialedSpy = spyOn(guard, 'onAuthFailed'); }); @@ -54,8 +63,7 @@ describe('AuthGuard', () => { it('auth failed callback should be called', () => { guard.authStrategy = 'requirelogin'; - mockUserService.currentUserInfo = null; - guard.canActivate(<any>null, <any>null); + (<Observable<boolean>>guard.canActivate(<any>null, <any>null)).subscribe(); expect(onAuthFialedSpy).toHaveBeenCalled(); }); }); |