diff options
author | 杨宇千 <crupest@outlook.com> | 2019-03-06 23:29:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-06 23:29:12 +0800 |
commit | d4410036b62a65cedbe977efdcea023440a3198e (patch) | |
tree | fdc6e957aed9cd0f1433f2c42e1e4ed89d13b4ee /Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts | |
parent | 8033d6523885486c24af2bdd57a24b0fd62d0b00 (diff) | |
parent | 7107d431fe7019ccc20e90e5aecb5feb64fc53b3 (diff) | |
download | timeline-d4410036b62a65cedbe977efdcea023440a3198e.tar.gz timeline-d4410036b62a65cedbe977efdcea023440a3198e.tar.bz2 timeline-d4410036b62a65cedbe977efdcea023440a3198e.zip |
Merge pull request #3 from crupest/user
Develop user dialog.
Diffstat (limited to 'Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts')
-rw-r--r-- | Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts b/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts new file mode 100644 index 00000000..0095f031 --- /dev/null +++ b/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts @@ -0,0 +1,114 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpRequest } from '@angular/common/http'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +import { UserInfo } from '../user-info'; +import { + UserService, UserCredentials, CreateTokenResult, + UserLoginState, TokenValidationRequest, TokenValidationResult +} from './user.service'; + +describe('UserService', () => { + const tokenCreateUrl = '/api/User/CreateToken'; + + beforeEach(() => TestBed.configureTestingModule({ + imports: [HttpClientTestingModule] + })); + + it('should be created', () => { + const service: UserService = TestBed.get(UserService); + expect(service).toBeTruthy(); + }); + + it('should be nologin at first', () => { + const service: UserService = TestBed.get(UserService); + service.validateUserLoginState().subscribe(result => { + expect(result.state).toBe('nologin'); + }); + }); + + it('login should work well', () => { + const service: UserService = TestBed.get(UserService); + + const mockUserInfo: UserInfo = { + username: 'user', + roles: ['user', 'other'] + }; + + service.tryLogin('user', 'user').subscribe(result => { + expect(result).toEqual(mockUserInfo); + }); + + const httpController = TestBed.get(HttpTestingController) as HttpTestingController; + + httpController.expectOne((request: HttpRequest<UserCredentials>) => + request.url === tokenCreateUrl && + request.body.username === 'user' && + request.body.password === 'user').flush(<CreateTokenResult>{ + token: 'test-token', + userInfo: mockUserInfo + }); + + httpController.verify(); + }); + + describe('validateUserLoginState', () => { + let service: UserService; + let httpController: HttpTestingController; + + const mockUserInfo: UserInfo = { + username: 'user', + roles: ['user', 'other'] + }; + + const mockToken = 'mock-token'; + + const tokenValidateRequestMatcher = (req: HttpRequest<TokenValidationRequest>) => { + return req.url === '/api/User/ValidateToken' && req.body.token === mockToken; + }; + + beforeEach(() => { + service = TestBed.get(UserService); + httpController = TestBed.get(HttpTestingController); + + service.tryLogin('user', 'user').subscribe(); // subscribe to activate login + + httpController.expectOne(tokenCreateUrl).flush(<CreateTokenResult>{ + token: mockToken, + userInfo: mockUserInfo + }); + }); + + it('success should work well', () => { + service.validateUserLoginState().subscribe((result: UserLoginState) => { + expect(result).toEqual(<UserLoginState>{ + state: 'success', + userInfo: mockUserInfo + }); + }); + + httpController.expectOne(tokenValidateRequestMatcher).flush(<TokenValidationResult>{ + isValid: true, + userInfo: mockUserInfo + }); + + httpController.verify(); + }); + + it('invalid should work well', () => { + service.validateUserLoginState().subscribe((result: UserLoginState) => { + expect(result).toEqual(<UserLoginState>{ + state: 'invalidlogin' + }); + }); + + httpController.expectOne(tokenValidateRequestMatcher).flush(<TokenValidationResult>{ + isValid: false + }); + + httpController.verify(); + }); + }); + + // TODO: test on error situations. +}); |