From a21a82474afa393d142ed27a410e759608704979 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 11 Apr 2019 19:18:37 +0800 Subject: Add remember me. --- .../app/user/user-login/user-login.component.html | 7 ++++--- .../user/user-login/user-login.component.spec.ts | 21 +++++++++++++-------- .../src/app/user/user-login/user-login.component.ts | 3 ++- 3 files changed, 19 insertions(+), 12 deletions(-) (limited to 'Timeline/ClientApp/src/app/user/user-login') diff --git a/Timeline/ClientApp/src/app/user/user-login/user-login.component.html b/Timeline/ClientApp/src/app/user/user-login/user-login.component.html index b1dd289d..7398ece7 100644 --- a/Timeline/ClientApp/src/app/user/user-login/user-login.component.html +++ b/Timeline/ClientApp/src/app/user/user-login/user-login.component.html @@ -1,8 +1,8 @@
- - -

{{ message }}

+ + +

{{ message }}

Username @@ -13,6 +13,7 @@ Password + Remember me!
diff --git a/Timeline/ClientApp/src/app/user/user-login/user-login.component.spec.ts b/Timeline/ClientApp/src/app/user/user-login/user-login.component.spec.ts index 693d5b6e..f010e4b7 100644 --- a/Timeline/ClientApp/src/app/user/user-login/user-login.component.spec.ts +++ b/Timeline/ClientApp/src/app/user/user-login/user-login.component.spec.ts @@ -2,7 +2,6 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; -import { ActivatedRoute } from '@angular/router'; import { of, throwError } from 'rxjs'; @@ -10,6 +9,7 @@ import { createMockInternalUserService } from '../internal-user-service/internal import { UserLoginComponent } from './user-login.component'; import { InternalUserService } from '../internal-user-service/internal-user.service'; import { UserInfo } from '../entities'; +import { MatCheckboxModule } from '@angular/material'; describe('UserLoginComponent', () => { let component: UserLoginComponent; @@ -27,7 +27,7 @@ describe('UserLoginComponent', () => { providers: [ { provide: InternalUserService, useValue: mockInternalUserService } ], - imports: [ReactiveFormsModule], + imports: [ReactiveFormsModule, MatCheckboxModule], schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); @@ -48,17 +48,20 @@ describe('UserLoginComponent', () => { const usernameInput = fixture.debugElement.query(By.css('input[type=text]')).nativeElement as HTMLInputElement; const passwordInput = fixture.debugElement.query(By.css('input[type=password]')).nativeElement as HTMLInputElement; + const rememberMeCheckbox = fixture.debugElement.query(By.css('input[type=checkbox]')).nativeElement as HTMLInputElement; usernameInput.value = 'user'; usernameInput.dispatchEvent(new Event('input')); passwordInput.value = 'user'; passwordInput.dispatchEvent(new Event('input')); + rememberMeCheckbox.dispatchEvent(new MouseEvent('click')); fixture.detectChanges(); expect(component.form.value).toEqual({ username: 'user', - password: 'user' + password: 'user', + rememberMe: true }); }); @@ -67,7 +70,8 @@ describe('UserLoginComponent', () => { const mockValue = { username: 'user', - password: 'user' + password: 'user', + rememberMe: true }; mockInternalUserService.tryLogin.withArgs(mockValue).and.returnValue(of({ username: 'user', roles: ['user'] })); @@ -84,7 +88,7 @@ describe('UserLoginComponent', () => { fixture.detectChanges(); component.message = 'nologin'; fixture.detectChanges(); - expect((fixture.debugElement.query(By.css('p.mat-body')).nativeElement as + expect((fixture.debugElement.query(By.css('p')).nativeElement as HTMLParagraphElement).textContent).toBe('You haven\'t login.'); }); @@ -92,7 +96,7 @@ describe('UserLoginComponent', () => { fixture.detectChanges(); component.message = 'invalidlogin'; fixture.detectChanges(); - expect((fixture.debugElement.query(By.css('p.mat-body')).nativeElement as + expect((fixture.debugElement.query(By.css('p')).nativeElement as HTMLParagraphElement).textContent).toBe('Your login is no longer valid.'); }); @@ -103,7 +107,8 @@ describe('UserLoginComponent', () => { const mockValue = { username: 'user', - password: 'user' + password: 'user', + rememberMe: false }; mockInternalUserService.tryLogin.withArgs(mockValue).and.returnValue(throwError(new Error(customMessage))); component.form.setValue(mockValue); @@ -111,7 +116,7 @@ describe('UserLoginComponent', () => { fixture.detectChanges(); expect(component.message).toBe(customMessage); - expect((fixture.debugElement.query(By.css('p.mat-body')).nativeElement as + expect((fixture.debugElement.query(By.css('p')).nativeElement as HTMLParagraphElement).textContent).toBe(customMessage); }); }); diff --git a/Timeline/ClientApp/src/app/user/user-login/user-login.component.ts b/Timeline/ClientApp/src/app/user/user-login/user-login.component.ts index 836202de..4395c5cf 100644 --- a/Timeline/ClientApp/src/app/user/user-login/user-login.component.ts +++ b/Timeline/ClientApp/src/app/user/user-login/user-login.component.ts @@ -19,7 +19,8 @@ export class UserLoginComponent implements OnInit { form = new FormGroup({ username: new FormControl(''), - password: new FormControl('') + password: new FormControl(''), + rememberMe: new FormControl(false) }); ngOnInit() { -- cgit v1.2.3