From a5262894edb56cccd0346d0c1a5c7f710cb259ae Mon Sep 17 00:00:00 2001 From: janic Date: Mon, 7 Nov 2022 21:36:06 +0100 Subject: [PATCH] Login Validation --- ui/src/app/pages/login/login.module.ts | 5 +- .../app/pages/login/login.page.form.spec.ts | 44 +++++++++++++++ ui/src/app/pages/login/login.page.form.ts | 14 +++++ ui/src/app/pages/login/login.page.html | 54 ++++++++++--------- ui/src/app/pages/login/login.page.spec.ts | 14 +++-- ui/src/app/pages/login/login.page.ts | 8 ++- 6 files changed, 107 insertions(+), 32 deletions(-) create mode 100644 ui/src/app/pages/login/login.page.form.spec.ts create mode 100644 ui/src/app/pages/login/login.page.form.ts diff --git a/ui/src/app/pages/login/login.module.ts b/ui/src/app/pages/login/login.module.ts index 5eda226..46d8d6d 100644 --- a/ui/src/app/pages/login/login.module.ts +++ b/ui/src/app/pages/login/login.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { IonicModule } from '@ionic/angular'; @@ -13,7 +13,8 @@ import { LoginPage } from './login.page'; CommonModule, FormsModule, IonicModule, - LoginPageRoutingModule + LoginPageRoutingModule, + ReactiveFormsModule ], declarations: [LoginPage] }) diff --git a/ui/src/app/pages/login/login.page.form.spec.ts b/ui/src/app/pages/login/login.page.form.spec.ts new file mode 100644 index 0000000..61a0d2e --- /dev/null +++ b/ui/src/app/pages/login/login.page.form.spec.ts @@ -0,0 +1,44 @@ +import { FormBuilder, FormGroup } from "@angular/forms"; +import { LoginPageForm } from "./login.page.form"; + +describe(`LoginPageForm`, () => { + + let loginPageForm : LoginPageForm; + let form: FormGroup + + beforeEach(() =>{ + loginPageForm = new LoginPageForm(new FormBuilder()); + form = loginPageForm.createForm(); + }) + + it('should create login form empty', () => { + const loginPageForm = new LoginPageForm(new FormBuilder()); + const form = loginPageForm.createForm(); + expect(form).not.toBeNull(); + expect(form.get('email')).not.toBeNull(); + expect(form.get('email').value).toEqual(""); + expect(form.get('email').valid).toBeFalsy(); + expect(form.get('password')).not.toBeNull(); + expect(form.get('password').value).toEqual(""); + expect(form.get('password').valid).toBeFalsy(); + }) + + it('should have email invalid if email is not valid', () => { + form.get('email').setValue('invalid email'); + + expect(form.get('email').valid).toBeFalsy(); + }) + + it('should have email valid if email is valid', () => { + form.get('email').setValue('valid@email.test'); + + expect(form.get('email').valid).toBeTruthy(); + }) + + it('should have a valid from', () => { + form.get('email').setValue('valid@email.test'); + form.get('password').setValue('12345678'); + + expect(form.valid).toBeTruthy(); + }) +}) \ No newline at end of file diff --git a/ui/src/app/pages/login/login.page.form.ts b/ui/src/app/pages/login/login.page.form.ts new file mode 100644 index 0000000..b80efca --- /dev/null +++ b/ui/src/app/pages/login/login.page.form.ts @@ -0,0 +1,14 @@ +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; + +export class LoginPageForm { + private formBuilder: FormBuilder + constructor(formBuilder: FormBuilder){ + this.formBuilder = formBuilder; + } + createForm() : FormGroup { + return this.formBuilder.group({ + email: ['', [Validators.required, Validators.email]], + password: ['', [Validators.required]] + }); + } +} \ No newline at end of file diff --git a/ui/src/app/pages/login/login.page.html b/ui/src/app/pages/login/login.page.html index 8783dcb..d75f3e3 100644 --- a/ui/src/app/pages/login/login.page.html +++ b/ui/src/app/pages/login/login.page.html @@ -1,35 +1,37 @@
- - - Login - Please sign in with your credentials - - - - Email - - Enter a valid email - Invalid email - Valid email - - - Password - - Choose a secure password - - - Forgot Email/Password - - - Login - - - +
+ + + Login + Please sign in with your credentials + + + + Email + + Enter a valid email + Invalid email + Valid email + + + Password + + Choose a secure password + + + Forgot Password + + + Login + + + Register +
diff --git a/ui/src/app/pages/login/login.page.spec.ts b/ui/src/app/pages/login/login.page.spec.ts index e6f9aac..479b003 100644 --- a/ui/src/app/pages/login/login.page.spec.ts +++ b/ui/src/app/pages/login/login.page.spec.ts @@ -1,5 +1,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; import { IonicModule } from '@ionic/angular'; +import { AppRoutingModule } from 'src/app/app-routing.module'; import { LoginPage } from './login.page'; @@ -10,7 +12,11 @@ describe('LoginPage', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ LoginPage ], - imports: [IonicModule.forRoot()] + imports: [ + IonicModule.forRoot(), + AppRoutingModule, + ReactiveFormsModule + ] }).compileComponents(); fixture = TestBed.createComponent(LoginPage); @@ -18,7 +24,9 @@ describe('LoginPage', () => { fixture.detectChanges(); })); - it('should create', () => { - expect(component).toBeTruthy(); + it('should create form on init', () => { + component.ngOnInit(); + + expect(component.form).not.toBeUndefined(); }); }); diff --git a/ui/src/app/pages/login/login.page.ts b/ui/src/app/pages/login/login.page.ts index 141f59e..8b58d7d 100644 --- a/ui/src/app/pages/login/login.page.ts +++ b/ui/src/app/pages/login/login.page.ts @@ -1,4 +1,7 @@ import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { Router } from '@angular/router'; +import { LoginPageForm } from './login.page.form'; @Component({ selector: 'app-login', @@ -7,9 +10,12 @@ import { Component, OnInit } from '@angular/core'; }) export class LoginPage implements OnInit { - constructor() { } + form: FormGroup; + + constructor(private router: Router, private formBuilder: FormBuilder) { } ngOnInit() { + this.form = new LoginPageForm(this.formBuilder).createForm(); } }