diff options
author | crupest <crupest@outlook.com> | 2019-04-11 19:18:37 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-04-11 19:18:37 +0800 |
commit | 842995aaed29cba1ac17e9a671e4b0782ad65c99 (patch) | |
tree | 6f0ae118627b6fef2610a36b3cdaa7ef2f8fae7a /Timeline/ClientApp/src/app/user/internal-user-service | |
parent | d7bfb99d41ac74763f1a1b96a850633994e1efff (diff) | |
download | timeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.tar.gz timeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.tar.bz2 timeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.zip |
Add remember me.
Diffstat (limited to 'Timeline/ClientApp/src/app/user/internal-user-service')
-rw-r--r-- | Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts | 39 | ||||
-rw-r--r-- | Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts | 10 |
2 files changed, 30 insertions, 19 deletions
diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts index be6631eb..8d081402 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts @@ -82,33 +82,40 @@ describe('InternalUserService', () => { }))); }); - it('login should work well', () => { + describe('login should work well', () => { const mockUserCredentials: UserCredentials = { username: 'user', password: 'user' }; - const service: InternalUserService = TestBed.get(InternalUserService); + function createTest(rememberMe: boolean) { + return () => { + const service: InternalUserService = TestBed.get(InternalUserService); - service.tryLogin(mockUserCredentials).subscribe(result => { - expect(result).toEqual(mockUserInfo); - }); + service.tryLogin({ ...mockUserCredentials, rememberMe: rememberMe }).subscribe(result => { + expect(result).toEqual(mockUserInfo); + }); - const httpController = TestBed.get(HttpTestingController) as HttpTestingController; + const httpController = TestBed.get(HttpTestingController) as HttpTestingController; - httpController.expectOne((request: HttpRequest<CreateTokenRequest>) => - request.url === createTokenUrl && request.body !== null && - request.body.username === mockUserCredentials.username && - request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{ - token: mockToken, - userInfo: mockUserInfo - }); + httpController.expectOne((request: HttpRequest<CreateTokenRequest>) => + request.url === createTokenUrl && request.body !== null && + request.body.username === mockUserCredentials.username && + request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{ + token: mockToken, + userInfo: mockUserInfo + }); - expect(service.currentUserInfo).toEqual(mockUserInfo); + expect(service.currentUserInfo).toEqual(mockUserInfo); - httpController.verify(); + httpController.verify(); + + expect(mockLocalStorage.getItem(TOKEN_STORAGE_KEY)).toBe(rememberMe ? mockToken : null); + } + } - expect(mockLocalStorage.getItem(TOKEN_STORAGE_KEY)).toBe(mockToken); + it('remember me should work well', createTest(true)); + it('not remember me should work well', createTest(false)); }); // TODO: test on error situations. diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts index 3f6147af..6de355f2 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts @@ -26,6 +26,10 @@ export type SnackBarTextKey = Exclude<keyof typeof snackBarText, 'ok'>; export const TOKEN_STORAGE_KEY = 'token'; +export interface LoginInfo extends UserCredentials { + rememberMe: boolean; +} + /** * This service is only used internal in user module. */ @@ -103,12 +107,12 @@ export class InternalUserService { }]); } - tryLogin(credentials: UserCredentials, options: { remember: boolean } = { remember: true }): Observable<UserInfo> { + tryLogin(info: LoginInfo): Observable<UserInfo> { if (this.token) { return throwError(new AlreadyLoginError()); } - return this.httpClient.post<CreateTokenResponse>(createTokenUrl, <CreateTokenRequest>credentials).pipe( + return this.httpClient.post<CreateTokenResponse>(createTokenUrl, <CreateTokenRequest>info).pipe( catchError((error: HttpErrorResponse) => { if (error.error instanceof ErrorEvent) { console.error('An error occurred when login: ' + error.error.message); @@ -123,7 +127,7 @@ export class InternalUserService { }), map(result => { this.token = result.token; - if (options.remember) { + if (info.rememberMe) { this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token); } this.userInfoSubject.next(result.userInfo); |