Skip to content

Commit 74cec4e

Browse files
authored
Add ChipDriver and associated basic tests for Chip component (#3717)
* Add ChipDriver and associated basic tests for Chip component * Add ChipDriver export * Enhance ChipDriver to include getStyle method for dismiss and icon drivers * fixed sanity test * Chip test check to ddefault icon, dismiss icon and label styles * removed the todo comments
1 parent e014ada commit 74cec4e

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import React from 'react';
2+
import {render} from '@testing-library/react-native';
3+
import {ChipDriver} from '../chip.driver';
4+
import Chip, {ChipProps} from '../index';
5+
import Assets from '../../../assets';
6+
import {Colors} from '../../../style';
7+
8+
const testID = 'test-chip';
9+
10+
const getDriver = (props?: ChipProps) => {
11+
const renderTree = render(<Chip testID={testID} {...props}/>);
12+
return ChipDriver({renderTree, testID});
13+
};
14+
15+
describe('Chip', () => {
16+
describe('sanity', () => {
17+
it('should render Chip', () => {
18+
const driver = getDriver();
19+
expect(driver.exists()).toBeTruthy();
20+
expect(driver.getIcon().exists()).toBeFalsy();
21+
expect(driver.getLabel().exists()).toBeFalsy();
22+
expect(driver.getDismissIcon().exists()).toBeFalsy();
23+
});
24+
});
25+
26+
describe('Label', () => {
27+
it('should render label', () => {
28+
const driver = getDriver({label: 'test'});
29+
expect(driver.getLabel().exists()).toBeTruthy();
30+
expect(driver.getLabel().getText()).toEqual('test');
31+
expect(driver.getLabel().getStyle().color).toEqual(Colors.$textDefault);
32+
});
33+
});
34+
35+
describe('Dismiss Icon', () => {
36+
it('should render dismiss icon', () => {
37+
const driver = getDriver({onDismiss: () => {}});
38+
expect(driver.getDismissIcon().exists()).toBeTruthy();
39+
expect(driver.getDismissIcon().getStyle().tintColor).toEqual(Colors.$iconDefault);
40+
});
41+
});
42+
43+
describe('Icon', () => {
44+
it('should render icon', () => {
45+
const driver = getDriver({iconSource: Assets.internal.icons.check});
46+
expect(driver.getIcon().exists()).toBeTruthy();
47+
expect(driver.getIcon().getStyle().tintColor).toEqual(Colors.$iconDefault);
48+
});
49+
});
50+
51+
it('should render with label, icon and dismiss icon', () => {
52+
const driver = getDriver({label: 'test', iconSource: Assets.internal.icons.check, onDismiss: () => {}});
53+
expect(driver.getLabel().exists()).toBeTruthy();
54+
expect(driver.getIcon().exists()).toBeTruthy();
55+
expect(driver.getDismissIcon().exists()).toBeTruthy();
56+
});
57+
});

src/components/chip/chip.driver.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {StyleSheet} from 'react-native';
2+
import {useComponentDriver, ComponentProps} from '../../testkit/new/Component.driver';
3+
import {TextDriver} from '../text/Text.driver.new';
4+
import {ImageDriver} from '../image/Image.driver.new';
5+
6+
export const ChipDriver = (props: ComponentProps) => {
7+
const driver = useComponentDriver(props);
8+
9+
const labelDriver = TextDriver({
10+
renderTree: props.renderTree,
11+
testID: `${props.testID}.label`
12+
});
13+
14+
const dismissIconDriver = ImageDriver({
15+
renderTree: props.renderTree,
16+
testID: `${props.testID}.dismissIcon`
17+
});
18+
19+
const iconDriver = ImageDriver({
20+
renderTree: props.renderTree,
21+
testID: `${props.testID}.icon`
22+
});
23+
24+
const getLabel = () => {
25+
return {...labelDriver};
26+
};
27+
28+
const getDismissIcon = () => {
29+
const exists = (): boolean => {
30+
return dismissIconDriver.exists();
31+
};
32+
const getStyle = () => {
33+
return StyleSheet.flatten(dismissIconDriver.getElement().props.style);
34+
};
35+
return {...dismissIconDriver, exists, getStyle};
36+
};
37+
38+
const getIcon = () => {
39+
const exists = (): boolean => {
40+
return iconDriver.exists();
41+
};
42+
const getStyle = () => {
43+
return StyleSheet.flatten(iconDriver.getElement().props.style);
44+
};
45+
return {...iconDriver, exists, getStyle};
46+
};
47+
48+
return {
49+
...driver,
50+
getLabel,
51+
getDismissIcon,
52+
getIcon
53+
};
54+
};

src/testkit/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ export {PickerDriver} from '../components/picker/Picker.driver.new';
2121
export {ExpandableOverlayDriver} from '../incubator/expandableOverlay/ExpandableOverlay.driver';
2222
export {ToastDriver} from '../incubator/toast/Toast.driver.new';
2323
export {DateTimePickerDriver} from '../components/dateTimePicker/DateTimePicker.driver';
24+
export {ChipDriver} from '../components/chip/chip.driver';

0 commit comments

Comments
 (0)