Skip to content

Commit deb99d9

Browse files
authored
fix: Change the error message ID to include the error icon (#562)
1 parent 0d5d310 commit deb99d9

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

src/form-field/__tests__/form-field-context.test.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import {
88
useFormFieldContext,
99
FormFieldValidationControlProps,
1010
} from '../../../lib/components/internal/context/form-field-context';
11+
import styles from '../../../lib/components/form-field/styles.css.js';
12+
13+
const errorSelector = `:scope > .${styles.hints} .${styles.error}`;
1114

1215
const TestControl = () => {
1316
const contextValues = useFormFieldContext({});
@@ -253,11 +256,11 @@ describe('nested form fields', () => {
253256
</FormField>
254257
);
255258

256-
const outerErrorId = outerFormFieldWrapper.findError()?.getElement().id;
259+
const outerErrorId = outerFormFieldWrapper.find(errorSelector)?.getElement().id;
257260
const outerDescriptionId = outerFormFieldWrapper.findDescription()?.getElement().id;
258261
const outerConstraintId = outerFormFieldWrapper.findConstraint()?.getElement().id;
259262

260-
const innerErrorId = innerFormFieldWrapper.findError()?.getElement().id;
263+
const innerErrorId = innerFormFieldWrapper.find(errorSelector)?.getElement().id;
261264
const innerDescriptionId = innerFormFieldWrapper.findDescription()?.getElement().id;
262265
const innerConstraintId = innerFormFieldWrapper.findConstraint()?.getElement().id;
263266

src/form-field/__tests__/form-field-control-id.test.tsx

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import { render } from '@testing-library/react';
55
import FormField, { FormFieldProps } from '../../../lib/components/form-field';
66
import Input from '../../../lib/components/input';
77
import createWrapper from '../../../lib/components/test-utils/dom';
8+
import styles from '../../../lib/components/form-field/styles.css.js';
89

910
const testInput = <Input value="follow me on tiktok" onChange={() => {}} />;
1011

12+
const errorSelector = `:scope > .${styles.hints} .${styles.error}`;
13+
1114
function renderFormField(props: FormFieldProps = {}) {
1215
const renderResult = render(<FormField {...props} />);
1316
return createWrapper(renderResult.container).findFormField()!;
@@ -33,7 +36,7 @@ describe('controlId', () => {
3336

3437
test('renders id for errorText based on controlId', () => {
3538
const wrapper = renderFormField({ controlId: formFieldControlId, errorText: 'Test error' });
36-
expect(wrapper.findError()?.getElement().id).toBe(`${formFieldControlId}-error`);
39+
expect(wrapper.find(errorSelector)?.getElement().id).toBe(`${formFieldControlId}-error`);
3740
});
3841

3942
test('renders id for constraintText based on controlId', () => {
@@ -52,7 +55,7 @@ describe('controlId', () => {
5255

5356
expect(wrapper.findLabel()?.getElement()).toHaveAttribute('for', formFieldControlId);
5457
expect(wrapper.findDescription()?.getElement().id).toBe(`${formFieldControlId}-description`);
55-
expect(wrapper.findError()?.getElement().id).toBe(`${formFieldControlId}-error`);
58+
expect(wrapper.find(errorSelector)?.getElement().id).toBe(`${formFieldControlId}-error`);
5659
expect(wrapper.findConstraint()?.getElement().id).toBe(`${formFieldControlId}-constraint`);
5760
});
5861

@@ -109,7 +112,7 @@ describe('controlId', () => {
109112

110113
test('generates own id and uses it for errorText', () => {
111114
const wrapper = renderFormField({ errorText: 'Test error' });
112-
expect(wrapper.findError()?.getElement()).toHaveAttribute('id');
115+
expect(wrapper.find(errorSelector)?.getElement()).toHaveAttribute('id');
113116
});
114117

115118
test('generates own id and uses it for constraintText', () => {
@@ -129,7 +132,7 @@ describe('controlId', () => {
129132

130133
expect(labelId).not.toBeUndefined();
131134
expect(wrapper.findDescription()?.getElement().id).toBe(labelId?.replace('label', 'description'));
132-
expect(wrapper.findError()?.getElement().id).toBe(labelId?.replace('label', 'error'));
135+
expect(wrapper.find(errorSelector)?.getElement().id).toBe(labelId?.replace('label', 'error'));
133136
expect(wrapper.findConstraint()?.getElement().id).toBe(labelId?.replace('label', 'constraint'));
134137
});
135138

src/form-field/internal.tsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,13 @@ interface FormFieldErrorProps {
2323
}
2424

2525
export const FormFieldError = ({ id, children, errorIconAriaLabel }: FormFieldErrorProps) => (
26-
<div className={styles.error}>
26+
<div id={id} className={styles.error}>
2727
<div className={styles['error-icon-shake-wrapper']}>
2828
<div role="img" aria-label={errorIconAriaLabel} className={styles['error-icon-scale-wrapper']}>
2929
<InternalIcon name="status-warning" size="small" />
3030
</div>
3131
</div>
32-
<span id={id} className={styles.error__message}>
33-
{children}
34-
</span>
32+
<span className={styles.error__message}>{children}</span>
3533
</div>
3634
);
3735

src/test-utils/dom/form-field/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default class FormFieldWrapper extends ComponentWrapper<HTMLElement> {
2323
}
2424

2525
findError(): ElementWrapper | null {
26-
return this.find(`:scope > .${styles.hints} .${styles.error__message}`);
26+
return this.find(`:scope > .${styles.hints} .${styles.error} .${styles.error__message}`);
2727
}
2828

2929
findDescription(): ElementWrapper | null {

0 commit comments

Comments
 (0)