From 25b88478a1a694bf7b27d89224de4f4d89620b88 Mon Sep 17 00:00:00 2001 From: Manu MA Date: Sun, 20 Jan 2019 16:45:13 +0100 Subject: [PATCH] test(angular): form tests (#17179) --- .../test/test-app/e2e/src/form.e2e-spec.ts | 117 ++++++++++++++++++ .../test-app/src/app/form/form.component.html | 11 +- .../test-app/src/app/form/form.component.ts | 11 +- 3 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 angular/test/test-app/e2e/src/form.e2e-spec.ts diff --git a/angular/test/test-app/e2e/src/form.e2e-spec.ts b/angular/test/test-app/e2e/src/form.e2e-spec.ts new file mode 100644 index 0000000000..7e73900972 --- /dev/null +++ b/angular/test/test-app/e2e/src/form.e2e-spec.ts @@ -0,0 +1,117 @@ +import { browser, element, by } from 'protractor'; +import { handleErrorMessages, setProperty, getText, waitTime } from './utils'; + +describe('form', () => { + + afterEach(() => { + handleErrorMessages(); + }); + + describe('change', () => { + beforeEach(async () => { + await browser.get('/form'); + }); + + it('should have default values', async () => { + await testStatus('INVALID'); + expect(await getText('#submit')).toEqual('false'); + await testData({ + 'datetime': '2010-08-20', + 'select': null, + 'toggle': false, + 'input': '', + 'input2': 'Default Value', + 'checkbox': false, + 'range': 5 + }); + }); + + it('should become valid', async () => { + await setProperty('ion-input.required', 'value', 'Some value'); + await testStatus('INVALID'); + await setProperty('ion-select', 'value', 'nes'); + await testStatus('INVALID'); + await setProperty('ion-range', 'value', 40); + await testStatus('VALID'); + await testData({ + 'datetime': '2010-08-20', + 'select': 'nes', + 'toggle': false, + 'input': 'Some value', + 'input2': 'Default Value', + 'checkbox': false, + 'range': 40 + }); + }); + + it('ion-toggle should change', async () => { + await element(by.css('ion-toggle')).click(); + await testData({ + 'datetime': '2010-08-20', + 'select': null, + 'toggle': true, + 'input': '', + 'input2': 'Default Value', + 'checkbox': false, + 'range': 5 + }); + }); + + it('ion-checkbox should change', async () => { + await element(by.css('ion-checkbox')).click(); + await testData({ + 'datetime': '2010-08-20', + 'select': null, + 'toggle': false, + 'input': '', + 'input2': 'Default Value', + 'checkbox': true, + 'range': 5 + }); + }); + + it('should submit', async () => { + await element(by.css('#set-values')).click(); + await waitTime(100); + await element(by.css('#submit-button')).click(); + expect(await getText('#submit')).toEqual('true'); + }); + }); + + describe('blur', () => { + beforeEach(async () => { + await browser.get('/form#blur'); + }); + + it('ion-toggle should change only after blur', async () => { + await element(by.css('ion-toggle')).click(); + await testData({ + 'datetime': '2010-08-20', + 'select': null, + 'toggle': false, + 'input': '', + 'input2': 'Default Value', + 'checkbox': false, + 'range': 5 + }); + await element(by.css('ion-checkbox')).click(); + await testData({ + 'datetime': '2010-08-20', + 'select': null, + 'toggle': true, + 'input': '', + 'input2': 'Default Value', + 'checkbox': false, + 'range': 5 + }); + }); + }); +}); + +async function testStatus(status: string) { + expect(await element(by.css('#status')).getText()).toEqual(status); +} + +async function testData(data: any) { + expect(JSON.parse(await element(by.css('#data')).getText())).toEqual(data); +} diff --git a/angular/test/test-app/src/app/form/form.component.html b/angular/test/test-app/src/app/form/form.component.html index fdc8c8765c..09b1bd234b 100644 --- a/angular/test/test-app/src/app/form/form.component.html +++ b/angular/test/test-app/src/app/form/form.component.html @@ -7,7 +7,7 @@ -
+ @@ -35,7 +35,7 @@ Input (required) - + @@ -60,7 +60,10 @@

Form Status: {{ profileForm.value | json }}

- Submit +

+ Form Submit: {{submitted}} +

+ Submit @@ -71,6 +74,6 @@

- Set values + Set values

diff --git a/angular/test/test-app/src/app/form/form.component.ts b/angular/test/test-app/src/app/form/form.component.ts index 75f54f461b..67b3e5b9f3 100644 --- a/angular/test/test-app/src/app/form/form.component.ts +++ b/angular/test/test-app/src/app/form/form.component.ts @@ -7,6 +7,7 @@ import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms' }) export class FormComponent { + submitted = 'false'; profileForm: FormGroup; outsideToggle = new FormControl(true); @@ -18,14 +19,18 @@ export class FormComponent { input: ['', Validators.required], input2: ['Default Value'], checkbox: [false], - range: [20, Validators.min(10)], - }, {updateOn: 'blur'}); + range: [5, Validators.min(10)], + }, {updateOn: window.location.hash === '#blur' ? 'blur' : 'change'}); + } + + onSubmit(_ev) { + this.submitted = 'true'; } setValues() { this.profileForm.patchValue({ datetime: '2010-08-20', - setValue: 'nes', + select: 'nes', toggle: true, input: 'Some value', input2: 'Another values',