aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-03-06 23:14:45 +0800
committercrupest <crupest@outlook.com>2019-03-06 23:14:45 +0800
commit83672dcdced6e0d42fa570d69c91417b3ea88b51 (patch)
tree6f35150c47f5c7fa1d2be3177d84e728ce6dcf71 /Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts
parent61844a348b2934321567b1457e6d05f318fc8b7e (diff)
downloadtimeline-83672dcdced6e0d42fa570d69c91417b3ea88b51.tar.gz
timeline-83672dcdced6e0d42fa570d69c91417b3ea88b51.tar.bz2
timeline-83672dcdced6e0d42fa570d69c91417b3ea88b51.zip
Write all unit tests.
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.ts108
1 files changed, 105 insertions, 3 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
index b9221b90..28cfefd7 100644
--- a/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts
+++ b/Timeline/ClientApp/src/app/user/user-service/user.service.spec.ts
@@ -1,12 +1,114 @@
import { TestBed } from '@angular/core/testing';
+import { HttpRequest } from '@angular/common/http';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { UserService } from './user.service';
+import { UserInfo } from '../user-info';
+import {
+ UserService, UserCredentials, CreateTokenResult,
+ UserLoginState, TokenValidationRequest, TokenValidationResult
+} from './user.service';
-xdescribe('UserService', () => {
- beforeEach(() => TestBed.configureTestingModule({}));
+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.
});