Skip to content

Commit 35d588f

Browse files
authored
TextField - create new driver and refactor tests to it (#2890)
* TextField - create new driver and refactor tests to it * Remove another async * Change to sub-components * getText to getValue * Simplify names after renaming to getValue * Small changes
1 parent f9a0398 commit 35d588f

File tree

5 files changed

+285
-202
lines changed

5 files changed

+285
-202
lines changed

src/components/text/Text.driver.new.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {usePressableDriver} from '../../testkit/new/usePressable.driver';
55
export const TextDriver = (props: ComponentProps) => {
66
const driver = usePressableDriver<TextProps>(useComponentDriver(props));
77

8-
const getText = () => {
8+
const getText = (): React.ReactNode | string | undefined => {
99
return driver.getProps().children;
1010
};
1111

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import _ from 'lodash';
2+
import {fireEvent} from '@testing-library/react-native';
3+
import {TextFieldProps} from './types';
4+
import {useComponentDriver, ComponentProps} from '../../testkit/new/Component.driver';
5+
import {TextDriver} from '../text/Text.driver.new';
6+
7+
export const TextFieldDriver = (props: ComponentProps) => {
8+
const driver = useComponentDriver<TextFieldProps>(props);
9+
10+
const floatingPlaceholderDriver = TextDriver({
11+
renderTree: props.renderTree,
12+
testID: `${props.testID}.floatingPlaceholder`
13+
});
14+
const labelDriver = TextDriver({
15+
renderTree: props.renderTree,
16+
testID: `${props.testID}.label`
17+
});
18+
const validationMsgDriver = TextDriver({
19+
renderTree: props.renderTree,
20+
testID: `${props.testID}.validationMessage`
21+
});
22+
const charCounterDriver = TextDriver({
23+
renderTree: props.renderTree,
24+
testID: `${props.testID}.charCounter`
25+
});
26+
27+
const getValue = (): string | undefined => {
28+
return driver.getProps().value ?? driver.getProps().defaultValue;
29+
};
30+
31+
const changeText = (text: string): void => {
32+
fireEvent.changeText(driver.getElement(), text);
33+
};
34+
35+
const focus = (): void => {
36+
fireEvent(driver.getElement(), 'focus');
37+
};
38+
39+
const blur = (): void => {
40+
fireEvent(driver.getElement(), 'blur');
41+
};
42+
43+
const isEnabled = (): boolean => {
44+
return !driver.getProps().accessibilityState?.disabled;
45+
};
46+
47+
const getPlaceholder = () => {
48+
const exists = (): boolean => {
49+
const hasPlaceholder = !!driver.getProps().placeholder;
50+
const hasText = !!getValue();
51+
return hasPlaceholder && (!hasText || (hasText && floatingPlaceholderDriver.exists()));
52+
};
53+
const getText = (): string | undefined => {
54+
if (exists()) {
55+
return driver.getProps().placeholder;
56+
}
57+
};
58+
59+
return {...floatingPlaceholderDriver, exists, getText};
60+
};
61+
62+
const getLabel = () => {
63+
const exists = (): boolean => {
64+
return labelDriver.exists() && !floatingPlaceholderDriver.exists();
65+
};
66+
67+
return {...labelDriver, exists};
68+
};
69+
70+
const getValidationMessage = () => {
71+
const exists = (): boolean => {
72+
return validationMsgDriver.exists() && !_.isEmpty(validationMsgDriver.getText());
73+
};
74+
75+
return {...validationMsgDriver, exists};
76+
};
77+
78+
const getCharCounter = () => {
79+
return charCounterDriver;
80+
};
81+
82+
return {
83+
...driver,
84+
getValue,
85+
changeText,
86+
focus,
87+
blur,
88+
isEnabled,
89+
getPlaceholder,
90+
getLabel,
91+
getValidationMessage,
92+
getCharCounter
93+
};
94+
};

0 commit comments

Comments
 (0)