-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSearchControls.test.tsx
More file actions
130 lines (105 loc) · 4.72 KB
/
SearchControls.test.tsx
File metadata and controls
130 lines (105 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import { fireEvent, render, screen } from '@testing-library/react';
import { useSearchParams } from 'react-router-dom';
import { getMockedImportedConstant } from '@src/test/__mocks__/common/constants/constants.mock';
import { setInitialGlobalState } from '@src/test/__mocks__/store';
import * as FeatureConstants from '@common/constants/feature.constants';
import { SearchControls } from '@components/SearchControls';
import { SearchContext } from '@src/contexts';
import { useInputsStore, useSearchStore, useUIStore } from '@src/store';
const setSearchParams = jest.fn();
const mockSearchFiltersComponent = <div data-testid="search-filters" />;
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
useSearchParams: jest.fn(),
}));
jest.mock('@components/SearchFilters', () => ({
SearchFilters: () => mockSearchFiltersComponent,
}));
describe('SearchControls', () => {
const mockedSearchFiltersEnabled = getMockedImportedConstant(FeatureConstants, 'SEARCH_FILTERS_ENABLED');
describe('SearchFilters component', () => {
beforeEach(() => {
(useSearchParams as jest.Mock).mockReturnValue([{ get: jest.fn() }, setSearchParams]);
});
test('renders SearchFilters component', () => {
mockedSearchFiltersEnabled(true);
const { getByTestId } = render(
<SearchContext.Provider value={{ isVisibleFilters: true } as unknown as SearchParams}>
<SearchControls submitSearch={jest.fn} clearValues={jest.fn} changeSegment={jest.fn} />
</SearchContext.Provider>,
);
expect(getByTestId('search-filters')).toBeInTheDocument();
});
test('does not render SearchFilters component', () => {
mockedSearchFiltersEnabled(false);
const { queryByTestId } = render(
<SearchControls submitSearch={jest.fn} clearValues={jest.fn} changeSegment={jest.fn} />,
);
expect(queryByTestId('search-filters')).not.toBeInTheDocument();
});
});
describe('Reset button', () => {
const defaultSearchBy = 'testSearchBy';
const mockClearValues = jest.fn();
const mockResetFacets = jest.fn();
const mockSetSearchBy = jest.fn();
const mockResetPreviewContent = jest.fn();
const mockResetFullDisplayComponentType = jest.fn();
const mockResetSelectedInstances = jest.fn();
function renderSearchControls(searchParams: URLSearchParams, queryState: string) {
(useSearchParams as jest.Mock).mockReturnValue([searchParams, setSearchParams]);
setInitialGlobalState([
{
store: useSearchStore,
state: {
query: queryState,
resetFacets: mockResetFacets,
setSearchBy: mockSetSearchBy,
resetSelectedInstances: mockResetSelectedInstances,
},
},
{
store: useUIStore,
state: {
resetFullDisplayComponentType: mockResetFullDisplayComponentType,
},
},
{
store: useInputsStore,
state: { resetPreviewContent: mockResetPreviewContent },
},
]);
render(
<SearchContext.Provider value={{ defaultSearchBy } as unknown as SearchParams}>
<SearchControls submitSearch={jest.fn} clearValues={mockClearValues} changeSegment={jest.fn} />
</SearchContext.Provider>,
);
}
test('renders button enabled if "query" search param and "query" state have values', () => {
renderSearchControls(new URLSearchParams({ query: 'test query' }), 'test state');
expect(screen.queryByTestId('id-search-reset-button')).not.toBeDisabled();
});
test('renders button enabled if "query" search param is empty', () => {
renderSearchControls(new URLSearchParams(), 'test state');
expect(screen.queryByTestId('id-search-reset-button')).not.toBeDisabled();
});
test('renders button enabled if "query" state is empty', () => {
renderSearchControls(new URLSearchParams({ query: 'test query' }), '');
expect(screen.queryByTestId('id-search-reset-button')).not.toBeDisabled();
});
test('renders button disabled', () => {
renderSearchControls(new URLSearchParams(), '');
expect(screen.queryByTestId('id-search-reset-button')).toBeDisabled();
});
test('resets state', () => {
renderSearchControls(new URLSearchParams({ query: 'test query' }), 'test state');
fireEvent.click(screen.getByTestId('id-search-reset-button'));
expect(mockClearValues).toHaveBeenCalled();
expect(mockResetFacets).toHaveBeenCalled();
expect(mockSetSearchBy).toHaveBeenCalledWith(defaultSearchBy);
expect(mockResetPreviewContent).toHaveBeenCalled();
expect(mockResetFullDisplayComponentType).toHaveBeenCalled();
expect(mockResetSelectedInstances).toHaveBeenCalled();
});
});
});