aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/user/user-login
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-11 19:18:37 +0800
committercrupest <crupest@outlook.com>2019-04-11 19:18:37 +0800
commita21a82474afa393d142ed27a410e759608704979 (patch)
tree4b54d0a07311a910bb14fcaf949a126ab52a452b /Timeline/ClientApp/src/app/user/user-login
parente436cf9ebb4776e3c837f1b0935f3ea2bf254d79 (diff)
downloadtimeline-a21a82474afa393d142ed27a410e759608704979.tar.gz
timeline-a21a82474afa393d142ed27a410e759608704979.tar.bz2
timeline-a21a82474afa393d142ed27a410e759608704979.zip
Add remember me.
Diffstat (limited to 'Timeline/ClientApp/src/app/user/user-login')
-rw-r--r--Timeline/ClientApp/src/app/user/user-login/user-login.component.html7
-rw-r--r--Timeline/ClientApp/src/app/user/user-login/user-login.component.spec.ts21
-rw-r--r--Timeline/ClientApp/src/app/user/user-login/user-login.component.ts3
3 files changed, 19 insertions, 12 deletions
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 @@
<form [formGroup]="form">
<ng-container *ngIf="message" [ngSwitch]="message">
- <p *ngSwitchCase="'nologin'" class="mat-body no-login-message">You haven't login.</p>
- <p *ngSwitchCase="'invalidlogin'" class="mat-body invalid-login-message">Your login is no longer valid.</p>
- <p *ngSwitchDefault class="mat-body error-message">{{ message }}</p>
+ <p *ngSwitchCase="'nologin'" class="mat-h3 no-login-message">You haven't login.</p>
+ <p *ngSwitchCase="'invalidlogin'" class="mat-h3 invalid-login-message">Your login is no longer valid.</p>
+ <p *ngSwitchDefault class="mat-h3 error-message">{{ message }}</p>
</ng-container>
<mat-form-field>
<mat-label>Username</mat-label>
@@ -13,6 +13,7 @@
<mat-label>Password</mat-label>
<input formControlName="password" matInput type="password" />
</mat-form-field>
+ <mat-checkbox formControlName="rememberMe">Remember me!</mat-checkbox>
<div class="w-100"></div>
<button mat-flat-button class="login-button" (appDebounceClick)="onLoginButtonClick()">Login</button>
</form>
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(<UserInfo>{ 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() {