Skip to content

Commit dab802b

Browse files
fix test runner (#5069)
* update ts and msw, fix tests Co-authored-by: Artsiom Kharuzhenka <[email protected]>
1 parent 8fc9907 commit dab802b

File tree

71 files changed

+900
-746
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+900
-746
lines changed

jest.config.cjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ require('dotenv').config({ path: './redisinsight/ui/.env.test' });
44
module.exports = {
55
testEnvironmentOptions: {
66
url: 'http://localhost/',
7+
customExportConditions: [''],
78
},
89
moduleNameMapper: {
910
'\\.(jpg|jpeg|png|ico|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
@@ -40,9 +41,9 @@ module.exports = {
4041
setupFilesAfterEnv: ['<rootDir>/redisinsight/ui/src/setup-tests.ts'],
4142
moduleDirectories: ['node_modules', 'redisinsight/node_modules'],
4243
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
43-
testEnvironment: 'jest-environment-jsdom',
44+
testEnvironment: 'jest-fixed-jsdom',
4445
transformIgnorePatterns: [
45-
'node_modules/(?!(monaco-editor|react-monaco-editor|brotli-dec-wasm)/)',
46+
'node_modules/(?!(monaco-editor|react-monaco-editor|brotli-dec-wasm|until-async)/)',
4647
],
4748
// TODO: add tests for plugins
4849
modulePathIgnorePatterns: [

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,14 +200,15 @@
200200
"ioredis-mock": "^5.5.4",
201201
"jest": "^29.7.0",
202202
"jest-environment-jsdom": "^29.7.0",
203+
"jest-fixed-jsdom": "^0.0.10",
203204
"jest-html-reporters": "^3.1.7",
204205
"jest-runner-groups": "^2.2.0",
205206
"jest-when": "^3.2.1",
206207
"license-checker": "^25.0.1",
207208
"lint-staged": "^10.2.11",
208209
"mini-css-extract-plugin": "2.7.2",
209210
"moment": "^2.29.3",
210-
"msw": "^1.3.4",
211+
"msw": "^2.11.5",
211212
"patch-package": "^8.0.0",
212213
"postinstall-postinstall": "^2.1.0",
213214
"prettier": "3.5.2",

redisinsight/ui/src/components/auto-refresh/AutoRefresh.spec.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('AutoRefresh', () => {
6363
render(<AutoRefresh {...instance(mockedProps)} onRefresh={onRefresh} />)
6464

6565
fireEvent.click(screen.getByTestId('refresh-btn'))
66-
expect(onRefresh).toBeCalled()
66+
expect(onRefresh).toHaveBeenCalled()
6767
})
6868

6969
it('refresh text should contain "Last refresh" time with disabled auto-refresh', async () => {
@@ -170,22 +170,23 @@ describe('AutoRefresh', () => {
170170
})
171171
expect(screen.getByTestId(INLINE_ITEM_EDITOR)).toHaveValue('1')
172172

173-
screen.getByTestId(/apply-btn/).click()
173+
await userEvent.click(screen.getByTestId(/apply-btn/))
174+
// screen.getByTestId(/apply-btn/).click()
174175

175176
await act(async () => {
176177
await new Promise((r) => setTimeout(r, 1300))
177178
})
178-
expect(onRefresh).toBeCalledTimes(1)
179+
expect(onRefresh).toHaveBeenCalledTimes(1)
179180

180181
await act(async () => {
181182
await new Promise((r) => setTimeout(r, 1300))
182183
})
183-
expect(onRefresh).toBeCalledTimes(2)
184+
expect(onRefresh).toHaveBeenCalledTimes(2)
184185

185186
await act(async () => {
186187
await new Promise((r) => setTimeout(r, 1300))
187188
})
188-
expect(onRefresh).toBeCalledTimes(3)
189+
expect(onRefresh).toHaveBeenCalledTimes(3)
189190
})
190191

191192
it('should respect minimumRefreshRate when setting refresh rate', async () => {
@@ -279,7 +280,7 @@ describe('AutoRefresh', () => {
279280

280281
screen.getByTestId(/apply-btn/).click()
281282

282-
await act(() => {
283+
await act(async () => {
283284
rerender(
284285
<AutoRefresh
285286
{...instance(mockedProps)}
@@ -292,14 +293,14 @@ describe('AutoRefresh', () => {
292293
await act(async () => {
293294
await new Promise((r) => setTimeout(r, 1300))
294295
})
295-
expect(onRefresh).toBeCalledTimes(0)
296+
expect(onRefresh).toHaveBeenCalledTimes(0)
296297

297298
await act(async () => {
298299
await new Promise((r) => setTimeout(r, 1300))
299300
})
300-
expect(onRefresh).toBeCalledTimes(0)
301+
expect(onRefresh).toHaveBeenCalledTimes(0)
301302

302-
await act(() => {
303+
await act(async () => {
303304
rerender(
304305
<AutoRefresh
305306
{...instance(mockedProps)}
@@ -312,7 +313,7 @@ describe('AutoRefresh', () => {
312313
await act(async () => {
313314
await new Promise((r) => setTimeout(r, 1300))
314315
})
315-
expect(onRefresh).toBeCalledTimes(1)
316+
expect(onRefresh).toHaveBeenCalledTimes(1)
316317
})
317318

318319
it('refresh tooltip text should contain disabled refresh button reason message when button disabled', async () => {

redisinsight/ui/src/components/base/forms/FormField.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

redisinsight/ui/src/components/global-url-handler/GlobalUrlHandler.spec.tsx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import React from 'react'
2-
import { cloneDeep } from 'lodash'
32
import reactRouterDom from 'react-router-dom'
4-
import { act, cleanup, mockedStore, render } from 'uiSrc/utils/test-utils'
3+
import {
4+
act,
5+
cleanup,
6+
createMockedStore,
7+
mockedStore,
8+
render,
9+
} from 'uiSrc/utils/test-utils'
510

611
import {
712
appRedirectionSelector,
@@ -45,13 +50,15 @@ jest.mock('uiSrc/utils/routing', () => ({
4550
let store: typeof mockedStore
4651
beforeEach(() => {
4752
cleanup()
48-
store = cloneDeep(mockedStore)
53+
store = createMockedStore()
4954
store.clearActions()
5055
})
5156

5257
const fromUrl =
5358
'redisinsight://databases/connect?redisUrl=redis://default:password@localhost:6379&databaseAlias=My Name&redirect=workbench?guidePath=/quick-guides/document/introduction.md&cloudBdbId=1232&subscriptionType=fixed&planMemoryLimit=30&memoryLimitMeasurementUnit=mb&free=true&target=_blank'
5459

60+
const renderGlobalUrlHandler = () => render(<GlobalUrlHandler />, { store })
61+
5562
describe('GlobalUrlHandler', () => {
5663
beforeEach(() => {
5764
reactRouterDom.useLocation = jest
@@ -60,11 +67,11 @@ describe('GlobalUrlHandler', () => {
6067
})
6168

6269
it('should render', () => {
63-
expect(render(<GlobalUrlHandler />)).toBeTruthy()
70+
expect(renderGlobalUrlHandler()).toBeTruthy()
6471
})
6572

6673
it('should not call any actions by default', () => {
67-
render(<GlobalUrlHandler />)
74+
renderGlobalUrlHandler()
6875
expect(store.getActions()).toEqual([])
6976
})
7077

@@ -77,7 +84,7 @@ describe('GlobalUrlHandler', () => {
7784
.mockReturnValueOnce({ replace: replaceMock })
7885
reactRouterDom.useLocation = jest.fn().mockReturnValueOnce({ search })
7986

80-
render(<GlobalUrlHandler />)
87+
renderGlobalUrlHandler()
8188
expect(store.getActions()).toEqual([
8289
setFromUrl(decodeURIComponent(fromUrl)),
8390
])
@@ -99,7 +106,7 @@ describe('GlobalUrlHandler', () => {
99106
;(appRedirectionSelector as jest.Mock).mockReturnValueOnce({ fromUrl })
100107

101108
await act(async () => {
102-
render(<GlobalUrlHandler />)
109+
renderGlobalUrlHandler()
103110
})
104111

105112
const actionUrl = new URL(fromUrl)
@@ -130,7 +137,7 @@ describe('GlobalUrlHandler', () => {
130137
;(appRedirectionSelector as jest.Mock).mockReturnValueOnce({ fromUrl })
131138

132139
await act(async () => {
133-
render(<GlobalUrlHandler />)
140+
renderGlobalUrlHandler()
134141
})
135142

136143
const actionUrl = new URL(fromUrl)
@@ -158,9 +165,7 @@ describe('GlobalUrlHandler', () => {
158165
fromUrl,
159166
})
160167

161-
await act(() => {
162-
render(<GlobalUrlHandler />)
163-
})
168+
renderGlobalUrlHandler()
164169

165170
const actionUrl = new URL(fromUrl)
166171
const fromParams = new URLSearchParams(actionUrl.search)
@@ -194,7 +199,7 @@ describe('GlobalUrlHandler', () => {
194199
})
195200

196201
await act(() => {
197-
render(<GlobalUrlHandler />)
202+
renderGlobalUrlHandler()
198203
})
199204

200205
const actionUrl = new URL(url)
@@ -246,7 +251,7 @@ describe('GlobalUrlHandler', () => {
246251
})
247252

248253
await act(() => {
249-
render(<GlobalUrlHandler />)
254+
renderGlobalUrlHandler()
250255
})
251256

252257
const actionUrl = new URL(url)
@@ -296,7 +301,7 @@ describe('GlobalUrlHandler', () => {
296301
})
297302

298303
await act(() => {
299-
render(<GlobalUrlHandler />)
304+
renderGlobalUrlHandler()
300305
})
301306

302307
const actionUrl = new URL(url)
@@ -347,7 +352,7 @@ describe('GlobalUrlHandler', () => {
347352
})
348353

349354
await act(() => {
350-
render(<GlobalUrlHandler />)
355+
renderGlobalUrlHandler()
351356
})
352357

353358
const actionUrl = new URL(url)
@@ -398,7 +403,7 @@ describe('GlobalUrlHandler', () => {
398403
})
399404

400405
await act(() => {
401-
render(<GlobalUrlHandler />)
406+
renderGlobalUrlHandler()
402407
})
403408

404409
const actionUrl = new URL(url)

redisinsight/ui/src/components/notifications/components/infinite-messages/InfiniteMessages.spec.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react'
2-
import { fireEvent, render, screen } from 'uiSrc/utils/test-utils'
2+
import { fireEvent, render, screen, act } from 'uiSrc/utils/test-utils'
33

44
import { OAuthProvider } from 'uiSrc/components/oauth/oauth-select-plan/constants'
55
import notificationsReducer, {
@@ -19,24 +19,22 @@ const createTestStore = () =>
1919
getDefaultMiddleware({ serializableCheck: false }),
2020
})
2121

22-
const renderToast = (notification: InfiniteMessage) => {
22+
const renderToast = async (notification: InfiniteMessage) => {
2323
const store = createTestStore()
2424

2525
render(
2626
<>
27-
{/* <RiToaster /> */}
2827
<Notifications />
2928
</>,
3029
{ store },
3130
)
32-
33-
store.dispatch(addInfiniteNotification(notification))
31+
await act(async () => store.dispatch(addInfiniteNotification(notification)))
3432
}
3533

3634
describe('INFINITE_MESSAGES', () => {
3735
describe('AUTHENTICATING', () => {
3836
it('should render message', async () => {
39-
renderToast(INFINITE_MESSAGES.AUTHENTICATING())
37+
await renderToast(INFINITE_MESSAGES.AUTHENTICATING())
4038

4139
// Wait for the notification to appear
4240
const title = await screen.findByText('Authenticating…')

redisinsight/ui/src/components/oauth/oauth-connect-free-db/OAuthConnectFreeDb.spec.tsx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
import React from 'react'
22
import { cloneDeep } from 'lodash'
3-
import {
4-
act,
5-
cleanup,
6-
fireEvent,
7-
mockedStore,
8-
render,
9-
} from 'uiSrc/utils/test-utils'
3+
import { cleanup, mockedStore, render, userEvent } from 'uiSrc/utils/test-utils'
104
import {
115
getRedisModulesSummary,
126
sendEventTelemetry,
@@ -15,6 +9,7 @@ import {
159
import {
1610
freeInstancesSelector,
1711
setDefaultInstance,
12+
setDefaultInstanceSuccess,
1813
} from 'uiSrc/slices/instances/instances'
1914
import { OAuthSocialSource } from 'uiSrc/slices/interfaces'
2015
import { setCapability } from 'uiSrc/slices/app/context'
@@ -63,10 +58,8 @@ describe('OAuthConnectFreeDb', () => {
6358

6459
const { queryByTestId } = render(<OAuthConnectFreeDb id="providedId" />)
6560

66-
await act(() =>
67-
fireEvent.click(
68-
queryByTestId('connect-free-db-btn') as HTMLButtonElement,
69-
),
61+
await userEvent.click(
62+
queryByTestId('connect-free-db-btn') as HTMLButtonElement,
7063
)
7164

7265
expect(sendEventTelemetry).toHaveBeenCalledWith({
@@ -86,6 +79,7 @@ describe('OAuthConnectFreeDb', () => {
8679
tutorialPopoverShown: false,
8780
}),
8881
setDefaultInstance(),
82+
setDefaultInstanceSuccess(),
8983
]
9084
expect(store.getActions()).toEqual(expectedActions)
9185
})

redisinsight/ui/src/components/oauth/oauth-sso/oauth-create-db/OAuthCreateDb.spec.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { cloneDeep } from 'lodash'
33
import {
44
act,
55
cleanup,
6+
expectActionsToContain,
67
fireEvent,
78
mockedStore,
89
render,
@@ -86,7 +87,7 @@ describe('OAuthCreateDb', () => {
8687

8788
expect(screen.getByTestId('sso-email')).toBeInTheDocument()
8889

89-
expect(sendEventTelemetry).toBeCalledWith({
90+
expect(sendEventTelemetry).toHaveBeenCalledWith({
9091
event: TelemetryEvent.CLOUD_SIGN_IN_SOCIAL_ACCOUNT_SELECTED,
9192
eventData: {
9293
accountOption: OAuthStrategy.SSO,
@@ -107,7 +108,7 @@ describe('OAuthCreateDb', () => {
107108
fireEvent.click(screen.getByTestId('btn-submit'))
108109
})
109110

110-
expect(sendEventTelemetry).toBeCalledWith({
111+
expect(sendEventTelemetry).toHaveBeenCalledWith({
111112
event: TelemetryEvent.CLOUD_SIGN_IN_SSO_OPTION_PROCEEDED,
112113
eventData: {
113114
action: OAuthSocialAction.Create,
@@ -124,7 +125,7 @@ describe('OAuthCreateDb', () => {
124125

125126
fireEvent.click(screen.getByTestId('google-oauth'))
126127

127-
expect(sendEventTelemetry).toBeCalledWith({
128+
expect(sendEventTelemetry).toHaveBeenCalledWith({
128129
event: TelemetryEvent.CLOUD_SIGN_IN_SOCIAL_ACCOUNT_SELECTED,
129130
eventData: {
130131
accountOption: OAuthStrategy.Google,
@@ -174,7 +175,7 @@ describe('OAuthCreateDb', () => {
174175
expect(store.getActions()).toEqual(expectedActions)
175176
})
176177

177-
it('should call proper actions after click create without recommened settings', async () => {
178+
it('should call proper actions after click create without recommended settings', async () => {
178179
;(oauthCloudUserSelector as jest.Mock).mockReturnValue({ data: {} })
179180
render(<OAuthCreateDb />)
180181

@@ -193,6 +194,6 @@ describe('OAuthCreateDb', () => {
193194
setSocialDialogState(null),
194195
getPlans(),
195196
]
196-
expect(store.getActions()).toEqual(expectedActions)
197+
expectActionsToContain(store.getActions(), expectedActions)
197198
})
198199
})

0 commit comments

Comments
 (0)