Skip to content

Commit

Permalink
chore(demo): add new e2e test for field error
Browse files Browse the repository at this point in the history
  • Loading branch information
splincode committed Jan 29, 2024
1 parent 6132683 commit 990992b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 21 deletions.
30 changes: 20 additions & 10 deletions projects/demo-playwright/tests/kit/field-error/field-error.spec.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,33 @@
import {tuiGoto} from '@demo-playwright/utils';
import {TuiDocumentationPagePO, tuiGoto} from '@demo-playwright/utils';
import {expect, test} from '@playwright/test';

test.describe('TuiFieldError', () => {
test.describe('FieldError', () => {
test('Errors of invalid control are shown correctly', async ({page}) => {
const example = new TuiDocumentationPagePO(page).getExample('#base');

await tuiGoto(page, '/pipes/field-error');

const errorPipeInput = page
.locator('tui-field-error-pipe-example-1 input')
.first();
const input = example.locator('input').first();

await errorPipeInput.focus();
await input.focus();
await input.blur();

await page.waitForTimeout(50);
await page.waitForTimeout(500);

await errorPipeInput.blur();
await expect(example).toHaveScreenshot('01-field-error.png', {
animations: 'allow',
});
});

test('Submit invalid form', async ({page}) => {
const example = new TuiDocumentationPagePO(page).getExample('#patterns');

await tuiGoto(page, '/pipes/field-error');
await example.locator('button').click();

Check failure on line 26 in projects/demo-playwright/tests/kit/field-error/field-error.spec.ts

View workflow job for this annotation

GitHub Actions / playwright / (6 of 8)

[chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form

1) [chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form TimeoutError: locator.click: Timeout 10000ms exceeded. Call log: - waiting for locator('#patterns [automation-id="tui-doc-example"]').locator('button') 24 | 25 | await tuiGoto(page, '/pipes/field-error'); > 26 | await example.locator('button').click(); | ^ 27 | 28 | await page.waitForTimeout(500); 29 | at /home/runner/work/taiga-ui/taiga-ui/projects/demo-playwright/tests/kit/field-error/field-error.spec.ts:26:41

Check failure on line 26 in projects/demo-playwright/tests/kit/field-error/field-error.spec.ts

View workflow job for this annotation

GitHub Actions / playwright / (6 of 8)

[chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form

1) [chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.click: Timeout 10000ms exceeded. Call log: - waiting for locator('#patterns [automation-id="tui-doc-example"]').locator('button') 24 | 25 | await tuiGoto(page, '/pipes/field-error'); > 26 | await example.locator('button').click(); | ^ 27 | 28 | await page.waitForTimeout(500); 29 | at /home/runner/work/taiga-ui/taiga-ui/projects/demo-playwright/tests/kit/field-error/field-error.spec.ts:26:41

Check failure on line 26 in projects/demo-playwright/tests/kit/field-error/field-error.spec.ts

View workflow job for this annotation

GitHub Actions / playwright / (6 of 8)

[chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form

1) [chromium] › tests/kit/field-error/field-error.spec.ts:22:9 › FieldError › Submit invalid form Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── TimeoutError: locator.click: Timeout 10000ms exceeded. Call log: - waiting for locator('#patterns [automation-id="tui-doc-example"]').locator('button') 24 | 25 | await tuiGoto(page, '/pipes/field-error'); > 26 | await example.locator('button').click(); | ^ 27 | 28 | await page.waitForTimeout(500); 29 | at /home/runner/work/taiga-ui/taiga-ui/projects/demo-playwright/tests/kit/field-error/field-error.spec.ts:26:41

const example = page.getByTestId('tui-doc-example').first();
await page.waitForTimeout(500);

await expect(example).toHaveScreenshot('shows-error-under-field.png', {
await expect(example).toHaveScreenshot('02-field-error.png', {
animations: 'allow',
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<form
class="b-form"
[formGroup]="testForm"
(submit)="onSubmit()"
>
<label tuiLabel="Secret number">
<tui-input
Expand All @@ -23,7 +24,7 @@

<label
tuiLabel="Enter company name"
class="tui-space_top-4"
class="tui-space_top-4 tui-space_bottom-4"
>
<tui-input
formControlName="testValue2"
Expand All @@ -47,4 +48,22 @@
[error]="[] | tuiFieldError | async"
></tui-error>
</label>

<label>
<tui-checkbox-labeled formControlName="testValue3">I agree on the conditions</tui-checkbox-labeled>

<tui-error
formControlName="testValue3"
[error]="[] | tuiFieldError | async"
></tui-error>
</label>

<button
size="m"
tuiButton
type="submit"
class="tui-space_top-4"
>
Submit
</button>
</form>
16 changes: 6 additions & 10 deletions projects/demo/src/modules/pipes/field-error/examples/3/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,12 @@ import {
} from '@angular/forms';
import {changeDetection} from '@demo/emulate/change-detection';
import {encapsulation} from '@demo/emulate/encapsulation';
import {TuiValidationError} from '@taiga-ui/cdk';
import {tuiMarkControlAsTouchedAndValidate, TuiValidationError} from '@taiga-ui/cdk';
import {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';

const secretRegexTen = /^\d{10}$/;
const secretRegexTwelve = /^\d{12}$/;

export function innValidator(field: AbstractControl): unknown {
return field.value &&
(secretRegexTen.test(field.value) || secretRegexTwelve.test(field.value))
? null
: {
inn: new TuiValidationError('Secret number contains 10 or 12 digits'),
};
}

@Component({
selector: 'tui-field-error-pipe-example-3',
templateUrl: './index.html',
Expand All @@ -41,12 +32,17 @@ export class TuiFieldErrorPipeExample3 implements OnInit {
readonly testForm = new FormGroup({
testValue1: new FormControl('', [Validators.required, this.getSecretValidator()]),
testValue2: this.testValue2,
testValue3: new FormControl(false, [Validators.requiredTrue]),
});

ngOnInit(): void {
this.testValue2.setValidators([Validators.required, this.companyValidator]);
}

onSubmit(): void {
tuiMarkControlAsTouchedAndValidate(this.testForm);
}

private readonly companyValidator = (
field: AbstractControl,
): ValidationErrors | null =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
TuiTextfieldControllerModule,
} from '@taiga-ui/core';
import {
TuiCheckboxLabeledModule,
TuiFieldErrorPipeModule,
TuiInputModule,
TuiInputNumberModule,
Expand Down Expand Up @@ -50,6 +51,7 @@ import {ExampleTuiFieldErrorPipeComponent} from './field-error.component';
TuiCurrencyPipeModule,
PolymorpheusModule,
RouterModule.forChild(tuiGenerateRoutes(ExampleTuiFieldErrorPipeComponent)),
TuiCheckboxLabeledModule,
],
declarations: [
ExampleTuiFieldErrorPipeComponent,
Expand Down

0 comments on commit 990992b

Please sign in to comment.