Skip to content

Commit d7fd3f3

Browse files
authored
fix: recalc state if caseInsensitiveSearch changes (#29)
1 parent d2739ec commit d7fd3f3

11 files changed

+114
-10
lines changed
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

src/ReactUnipika/__stories__/ReactUnipika.stories.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {Meta, StoryObj} from '@storybook/react';
55
import {ReactUnipika, ReactUnipikaProps} from '../../index';
66

77
import data from './data.json';
8+
import {Button} from '@gravity-ui/uikit';
89

910
const meta: Meta<ReactUnipikaProps> = {
1011
title: 'ReactUnipika',
@@ -25,10 +26,27 @@ export const Yson: StoryObj<ReactUnipikaProps> = {
2526
},
2627
};
2728

29+
function WithCaseInsensitiveSearchComponent() {
30+
const [caseInsensitiveSearch, setCaseInsensitiveSearch] = React.useState(true);
31+
return (
32+
<>
33+
<Button
34+
selected={!caseInsensitiveSearch}
35+
onClick={() => {
36+
setCaseInsensitiveSearch((prev) => !prev);
37+
}}
38+
qa="qa:case-sensitive-button"
39+
>
40+
{caseInsensitiveSearch ? 'Case insensitive' : 'Case sensitive'}
41+
</Button>
42+
<ReactUnipika value={data} caseInsensitiveSearch={caseInsensitiveSearch} />
43+
</>
44+
);
45+
}
46+
2847
export const WithCaseInsensitiveSearch: StoryObj<ReactUnipikaProps> = {
29-
args: {
30-
value: data,
31-
caseInsensitiveSearch: true,
48+
render() {
49+
return <WithCaseInsensitiveSearchComponent />;
3250
},
3351
};
3452

src/ReactUnipika/__tests__/ReactUnipika.visual.test.tsx

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,3 +177,78 @@ test('ReactUnipika: with error', async ({mount, expectScreenshot, page}) => {
177177

178178
await expectScreenshot({component: page});
179179
});
180+
181+
test('ReactUnipika: with case insensitive search with matches', async ({
182+
mount,
183+
expectScreenshot,
184+
page,
185+
}) => {
186+
await mount(<Stories.WithCaseInsensitiveSearch />, {width: 1280});
187+
188+
await page.getByTestId('qa:structuredyson:search').locator('input').fill('Attr');
189+
190+
await expectScreenshot({component: page});
191+
});
192+
193+
test('ReactUnipika: with case insensitive search with matches 2', async ({
194+
mount,
195+
expectScreenshot,
196+
page,
197+
}) => {
198+
await mount(<Stories.WithCaseInsensitiveSearch />, {width: 1280});
199+
200+
await page.getByTestId('qa:structuredyson:search').locator('input').fill('attr');
201+
202+
await expectScreenshot({component: page});
203+
});
204+
205+
test('ReactUnipika: with case insensitive search toggle', async ({mount, page}) => {
206+
await mount(<Stories.WithCaseInsensitiveSearch />, {width: 1280});
207+
208+
await page.getByTestId('qa:structuredyson:search').locator('input').fill('Type_1');
209+
210+
const visibleHighlightedElements = await page
211+
.locator('.g-ru-cell__filtered_highlighted:has-text("type_1")')
212+
.filter({hasText: 'Type_1'})
213+
.count();
214+
if (visibleHighlightedElements !== 1) {
215+
throw new Error(
216+
`Expected 1 visible highlighted elements with "Type_1", but found ${visibleHighlightedElements}`,
217+
);
218+
}
219+
220+
await page.getByTestId('qa:case-sensitive-button').click();
221+
const newVisibleHighlightedElements = await page
222+
.locator('.g-ru-cell__filtered_highlighted:has-text("type_1")')
223+
.filter({hasText: 'Type_1'})
224+
.count();
225+
if (newVisibleHighlightedElements !== 0) {
226+
throw new Error(
227+
`Expected 0 visible highlighted elements with "Type_1", but found ${visibleHighlightedElements}`,
228+
);
229+
}
230+
});
231+
232+
test('ReactUnipika: with case sensitive search no matches', async ({
233+
mount,
234+
expectScreenshot,
235+
page,
236+
}) => {
237+
await mount(<Stories.Json />, {width: 1280});
238+
239+
await page.getByTestId('qa:structuredyson:search').locator('input').fill('Attr');
240+
241+
await expectScreenshot({component: page});
242+
});
243+
244+
test('ReactUnipika: with case sensitive search with matches', async ({
245+
mount,
246+
expectScreenshot,
247+
page,
248+
}) => {
249+
await mount(<Stories.Json />, {width: 1280});
250+
251+
await page.getByTestId('qa:structuredyson:search').locator('input').fill('attr');
252+
253+
await expectScreenshot({component: page});
254+
});

0 commit comments

Comments
 (0)