From 67db1a6043d92cfcbbd6230fbf52ed8f281a3333 Mon Sep 17 00:00:00 2001 From: Miles Malerba Date: Tue, 13 Dec 2022 21:22:41 +0000 Subject: [PATCH] fix(material/form-field): allow getting harness by validity (#26232) * fix(material/form-field): allow getting harness by validity * fixup! fix(material/form-field): allow getting harness by validity (cherry picked from commit 46a4db2d4fb6b23278901e6dcbd7d94a4b8b7374) --- .../form-field/testing/form-field-harness-filters.ts | 2 ++ src/material/form-field/testing/form-field-harness.ts | 5 +++++ src/material/form-field/testing/shared.spec.ts | 11 +++++++++++ .../legacy-form-field/testing/form-field-harness.ts | 5 +++++ tools/public_api_guard/material/form-field-testing.md | 1 + 5 files changed, 24 insertions(+) diff --git a/src/material/form-field/testing/form-field-harness-filters.ts b/src/material/form-field/testing/form-field-harness-filters.ts index 64809f875db5..ead796b38adf 100644 --- a/src/material/form-field/testing/form-field-harness-filters.ts +++ b/src/material/form-field/testing/form-field-harness-filters.ts @@ -14,4 +14,6 @@ export interface FormFieldHarnessFilters extends BaseHarnessFilters { floatingLabelText?: string | RegExp; /** Filters based on whether the form field has error messages. */ hasErrors?: boolean; + /** Filters based on whether the form field value is valid. */ + isValid?: boolean; } diff --git a/src/material/form-field/testing/form-field-harness.ts b/src/material/form-field/testing/form-field-harness.ts index cd523d483061..3793c5f4a4ba 100644 --- a/src/material/form-field/testing/form-field-harness.ts +++ b/src/material/form-field/testing/form-field-harness.ts @@ -248,6 +248,11 @@ export class MatFormFieldHarness extends _MatFormFieldHarnessBase< 'hasErrors', options.hasErrors, async (harness, hasErrors) => (await harness.hasErrors()) === hasErrors, + ) + .addOption( + 'isValid', + options.isValid, + async (harness, isValid) => (await harness.isControlValid()) === isValid, ); } diff --git a/src/material/form-field/testing/shared.spec.ts b/src/material/form-field/testing/shared.spec.ts index a0379870a745..b4e5e0a786f9 100644 --- a/src/material/form-field/testing/shared.spec.ts +++ b/src/material/form-field/testing/shared.spec.ts @@ -197,6 +197,17 @@ export function runHarnessTests( ); }); + it('should be able to get form-field by validity', async () => { + let invalid = await loader.getAllHarnesses(formFieldHarness.with({isValid: false})); + expect(invalid.length).toBe(0); + + fixture.componentInstance.requiredControl.setValue(''); + dispatchFakeEvent(fixture.nativeElement.querySelector('#with-errors input'), 'blur'); + + invalid = await loader.getAllHarnesses(formFieldHarness.with({isValid: false})); + expect(invalid.length).toBe(1); + }); + it('should be able to get error harnesses from the form-field harness', async () => { const formFields = await loader.getAllHarnesses(formFieldHarness); expect(await formFields[1].getErrors()).toEqual([]); diff --git a/src/material/legacy-form-field/testing/form-field-harness.ts b/src/material/legacy-form-field/testing/form-field-harness.ts index a38344ddc094..535763a5cdc7 100644 --- a/src/material/legacy-form-field/testing/form-field-harness.ts +++ b/src/material/legacy-form-field/testing/form-field-harness.ts @@ -57,6 +57,11 @@ export class MatLegacyFormFieldHarness extends _MatFormFieldHarnessBase< 'hasErrors', options.hasErrors, async (harness, hasErrors) => (await harness.hasErrors()) === hasErrors, + ) + .addOption( + 'isValid', + options.isValid, + async (harness, isValid) => (await harness.isControlValid()) === isValid, ); } diff --git a/tools/public_api_guard/material/form-field-testing.md b/tools/public_api_guard/material/form-field-testing.md index 2e92006fbc4c..63bc03460e3c 100644 --- a/tools/public_api_guard/material/form-field-testing.md +++ b/tools/public_api_guard/material/form-field-testing.md @@ -28,6 +28,7 @@ export type FormFieldControlHarness = MatInputHarness | MatSelectHarness | MatDa export interface FormFieldHarnessFilters extends BaseHarnessFilters { floatingLabelText?: string | RegExp; hasErrors?: boolean; + isValid?: boolean; } // @public