-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Expand file tree
/
Copy pathuseUpdateUserLayoutPreferences.test.tsx
More file actions
118 lines (98 loc) · 3.99 KB
/
Copy pathuseUpdateUserLayoutPreferences.test.tsx
File metadata and controls
118 lines (98 loc) · 3.99 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
/*
* Copyright (C) 2020 Graylog, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Server Side Public License, version 1,
* as published by MongoDB, Inc.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Server Side Public License for more details.
*
* You should have received a copy of the Server Side Public License
* along with this program. If not, see
* <http://www.mongodb.com/licensing/server-side-public-license>.
*/
import React from 'react';
import { renderHook, waitFor } from 'wrappedTestingLibrary/hooks';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
import { layoutPreferences, layoutPreferencesJSON } from 'fixtures/entityListLayoutPreferences';
import fetch from 'logic/rest/FetchProvider';
import useUpdateUserLayoutPreferences from 'components/common/EntityDataTable/hooks/useUpdateUserLayoutPreferences';
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: false,
},
},
});
const wrapper = ({ children }) => <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
jest.mock('logic/rest/FetchProvider', () => jest.fn(() => Promise.resolve()));
jest.mock('util/UserNotification', () => ({ error: jest.fn() }));
jest.mock('./useUserLayoutPreferences');
describe('useUserSearchFilterQuery hook', () => {
afterEach(() => {
jest.clearAllMocks();
});
it('should update user layout preferences', async () => {
const { result } = renderHook(() => useUpdateUserLayoutPreferences('streams'), { wrapper });
result.current.mutateAsync(layoutPreferences);
await waitFor(() =>
expect(fetch).toHaveBeenCalledWith(
'POST',
expect.stringContaining('/entitylists/preferences/streams'),
layoutPreferencesJSON,
),
);
});
it('should update slicing preferences', async () => {
const { result } = renderHook(() => useUpdateUserLayoutPreferences('streams'), { wrapper });
result.current.mutateAsync({
...layoutPreferences,
slicing: { sliceColumn: 'status', sortBy: 'risk_score', order: 'desc' },
});
await waitFor(() =>
expect(fetch).toHaveBeenCalledWith('POST', expect.stringContaining('/entitylists/preferences/streams'), {
...layoutPreferencesJSON,
slicing: { slice_column: 'status', sort_by: 'risk_score', order: 'desc' },
}),
);
});
it('should update null slicing preferences', async () => {
const { result } = renderHook(() => useUpdateUserLayoutPreferences('streams'), { wrapper });
result.current.mutateAsync({
...layoutPreferences,
slicing: null,
});
await waitFor(() =>
expect(fetch).toHaveBeenCalledWith('POST', expect.stringContaining('/entitylists/preferences/streams'), {
...layoutPreferencesJSON,
slicing: null,
}),
);
});
it('should update user layout preferences for a layout variant', async () => {
const { result } = renderHook(() => useUpdateUserLayoutPreferences('streams', 'security-events'), { wrapper });
result.current.mutateAsync(layoutPreferences);
await waitFor(() =>
expect(fetch).toHaveBeenCalledWith(
'POST',
expect.stringContaining('/entitylists/preferences/streams?layout_variant=security-events'),
layoutPreferencesJSON,
),
);
});
it('should allow partial update of user layout preferences', async () => {
const { result } = renderHook(() => useUpdateUserLayoutPreferences('streams'), { wrapper });
result.current.mutateAsync({ perPage: 100 });
await waitFor(() =>
expect(fetch).toHaveBeenCalledWith('POST', expect.stringContaining('/entitylists/preferences/streams'), {
attributes: layoutPreferencesJSON.attributes,
sort: layoutPreferencesJSON.sort,
custom_preferences: undefined,
per_page: 100,
}),
);
});
});