Skip to content

Commit 9856a71

Browse files
committed
fix unit tests
1 parent 4a1306b commit 9856a71

File tree

10 files changed

+78
-57
lines changed

10 files changed

+78
-57
lines changed

redisinsight/ui/src/components/cli/CliWrapper.spec.tsx

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import { cloneDeep } from 'lodash'
22
import React from 'react'
3-
import { processCliClient, setCliEnteringCommand } from 'uiSrc/slices/cli/cli-settings'
4-
import { cleanup, mockedStore, render } from 'uiSrc/utils/test-utils'
3+
import { InitOutputText } from 'uiSrc/constants/cliOutput'
4+
import { concatToOutput } from 'uiSrc/slices/cli/cli-output'
5+
import { setCliEnteringCommand } from 'uiSrc/slices/cli/cli-settings'
6+
import { cleanup, clearStoreActions, mockedStore, render } from 'uiSrc/utils/test-utils'
57
import CliWrapper from './CliWrapper'
68

7-
jest.mock('uiSrc/slices/cli/cli-output', () => ({
8-
...jest.requireActual('uiSrc/slices/cli/cli-output'),
9-
concatToOutput: () => jest.fn(),
10-
}))
11-
129
const redisCommandsPath = 'uiSrc/slices/app/redis-commands'
1310

11+
let mathRandom: jest.SpyInstance<number>
12+
const random = 0.91911
1413
let store: typeof mockedStore
1514
beforeEach(() => {
1615
cleanup()
@@ -32,6 +31,14 @@ jest.mock(redisCommandsPath, () => {
3231
})
3332

3433
describe('CliWrapper', () => {
34+
beforeAll(() => {
35+
mathRandom = jest.spyOn(Math, 'random').mockImplementation(() => random)
36+
})
37+
38+
afterAll(() => {
39+
mathRandom.mockRestore()
40+
})
41+
3542
it('should render', () => {
3643
expect(render(<CliWrapper />)).toBeTruthy()
3744
})
@@ -40,7 +47,12 @@ describe('CliWrapper', () => {
4047

4148
unmount()
4249

43-
const expectedActions = [processCliClient(), setCliEnteringCommand()]
44-
expect(store.getActions().slice(-2)).toEqual(expectedActions)
50+
const handleWorkbenchClick = () => {}
51+
52+
const expectedActions = [
53+
concatToOutput(InitOutputText('', 0, 0, true, handleWorkbenchClick)),
54+
setCliEnteringCommand(),
55+
]
56+
expect(clearStoreActions(store.getActions().slice(-2))).toEqual(clearStoreActions(expectedActions))
4557
})
4658
})

redisinsight/ui/src/components/cli/components/cli-body/CliBodyWrapper.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const CliBodyWrapper = () => {
5353
const { db: currentDbIndex } = useSelector(outputSelector)
5454

5555
useEffect(() => {
56-
!cliClientUuid && dispatch(createCliClientAction(handleWorkbenchClick))
56+
!cliClientUuid && dispatch(createCliClientAction(instanceId, handleWorkbenchClick))
5757
}, [])
5858

5959
useEffect(() => {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { DefaultBodyType, MockedRequest, RestHandler } from 'msw'
2+
3+
import info from './infoHandlers'
4+
5+
const handlers: RestHandler<MockedRequest<DefaultBodyType>>[] = [].concat(info)
6+
export default handlers
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { DatabaseInstanceResponse } from 'apiSrc/modules/instances/dto/database-instance.dto'
2+
import { rest, RestHandler } from 'msw'
3+
import { ApiEndpoints } from 'uiSrc/constants'
4+
import { getMswURL } from 'uiSrc/utils/test-utils'
5+
6+
export const APP_INFO_DATA_MOCK = {
7+
id: 'id1',
8+
createDateTime: '2000-01-01T00:00:00.000Z',
9+
appVersion: '2.0.0',
10+
osPlatform: 'win32',
11+
buildType: 'ELECTRON'
12+
}
13+
14+
const handlers: RestHandler[] = [
15+
// fetchServerInfo
16+
rest.get<DatabaseInstanceResponse[]>(getMswURL(ApiEndpoints.INFO), async (req, res, ctx) => res(
17+
ctx.status(200),
18+
ctx.json(APP_INFO_DATA_MOCK),
19+
))
20+
]
21+
22+
export default handlers
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { MockedRequest, RestHandler } from 'msw'
22
import instances from './instances'
33
import content from './content'
4+
import app from './app'
45

5-
export const handlers: RestHandler<MockedRequest>[] = [].concat(instances, content)
6+
export const handlers: RestHandler<MockedRequest>[] = [].concat(instances, content, app)

redisinsight/ui/src/mocks/handlers/instances/instancesHandlers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { ApiEndpoints } from 'uiSrc/constants'
44
import { ConnectionType } from 'uiSrc/slices/interfaces'
55
import { getMswURL } from 'uiSrc/utils/test-utils'
66

7+
export const INSTANCE_ID_MOCK = 'instanceId'
8+
79
const handlers: RestHandler[] = [
810
// fetchInstancesAction
911
rest.get<DatabaseInstanceResponse[]>(getMswURL(ApiEndpoints.INSTANCE), async (req, res, ctx) => res(

redisinsight/ui/src/slices/cli/cli-settings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ export default cliSettingsSlice.reducer
182182

183183
// Asynchronous thunk action
184184
export function createCliClientAction(
185+
instanceId: string,
185186
onWorkbenchClick: () => void,
186187
onSuccessAction?: () => void,
187188
onFailAction?: (message: string) => void
@@ -195,7 +196,7 @@ export function createCliClientAction(
195196

196197
try {
197198
const { data, status } = await apiService.post<CreateCliClientResponse>(
198-
getUrl(state.connections.instances.connectedInstance?.id ?? '', ApiEndpoints.CLI)
199+
getUrl(instanceId ?? '', ApiEndpoints.CLI)
199200
)
200201

201202
if (isStatusSuccessful(status)) {

redisinsight/ui/src/slices/tests/cli/cli-output.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { apiService } from 'uiSrc/services'
88
import { cliTexts } from 'uiSrc/constants/cliOutput'
99
import { cliParseTextResponseWithOffset, cliParseTextResponseWithRedirect } from 'uiSrc/utils/cliHelper'
1010
import ApiErrors from 'uiSrc/constants/apiErrors'
11-
import { updateCliClientAction } from 'uiSrc/slices/cli/cli-settings'
11+
import { processCliClient, updateCliClientAction } from 'uiSrc/slices/cli/cli-settings'
1212
import reducer, {
1313
concatToOutput,
1414
initialState,
@@ -354,10 +354,8 @@ describe('cliOutput slice', () => {
354354
sendCliCommand(),
355355
sendCliCommandFailure(responsePayload.response.data.message),
356356
concatToOutput(cliParseTextResponseWithOffset(errorMessage, command, CommandExecutionStatus.Fail)),
357-
concatToOutput(['\n']),
358-
concatToOutput(['\n'])
357+
processCliClient(),
359358
]
360-
expect(updateCliClientAction).toHaveBeenCalled()
361359
expect(clearStoreActions(tempStore.getActions())).toEqual(clearStoreActions(expectedActions))
362360
})
363361
})
@@ -484,10 +482,8 @@ describe('cliOutput slice', () => {
484482
sendCliCommand(),
485483
sendCliCommandFailure(responsePayload.response.data.message),
486484
concatToOutput(cliParseTextResponseWithOffset(errorMessage, command, CommandExecutionStatus.Fail)),
487-
concatToOutput(['\n']),
488-
concatToOutput(['\n'])
485+
processCliClient(),
489486
]
490-
expect(updateCliClientAction).toHaveBeenCalled()
491487
expect(clearStoreActions(tempStore.getActions())).toEqual(clearStoreActions(expectedActions))
492488
})
493489
})

redisinsight/ui/src/slices/tests/cli/cli-settings.spec.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
ConnectionSuccessOutputText,
88
InitOutputText,
99
} from 'uiSrc/constants/cliOutput'
10+
import { INSTANCE_ID_MOCK } from 'uiSrc/mocks/handlers/instances/instancesHandlers'
1011
import reducer, {
1112
initialState,
1213
toggleCli,
@@ -32,11 +33,8 @@ import reducer, {
3233
resetCliHelperSettings, goBackFromCommand,
3334
} from '../../cli/cli-settings'
3435

35-
jest.mock('uiSrc/constants/cliOutput', () => ({
36-
...jest.requireActual('uiSrc/constants/cliOutput'),
37-
InitOutputText: jest.fn().mockReturnValue([]),
38-
}))
39-
36+
let mathRandom: jest.SpyInstance<number>
37+
const random = 0.91911
4038
let store: typeof mockedStore
4139
beforeEach(() => {
4240
cleanup()
@@ -53,6 +51,14 @@ jest.mock('uiSrc/services', () => ({
5351
}))
5452

5553
describe('cliSettings slice', () => {
54+
beforeAll(() => {
55+
mathRandom = jest.spyOn(Math, 'random').mockImplementation(() => random)
56+
})
57+
58+
afterAll(() => {
59+
mathRandom.mockRestore()
60+
})
61+
5662
describe('toggleCliHelper', () => {
5763
it('default state.isShowHelper should be falsy', () => {
5864
// Arrange
@@ -479,17 +485,17 @@ describe('cliSettings slice', () => {
479485
apiService.post = jest.fn().mockResolvedValue(responsePayload)
480486

481487
// Act
482-
await store.dispatch<any>(createCliClientAction())
488+
await store.dispatch<any>(createCliClientAction(INSTANCE_ID_MOCK, () => {}))
483489

484490
// Assert
485491
const expectedActions = [
486492
processCliClient(),
487-
concatToOutput(InitOutputText()),
493+
concatToOutput(InitOutputText('', 0, 0, true, () => {})),
488494
processCliClientSuccess(responsePayload.data?.uuid),
489495
concatToOutput(ConnectionSuccessOutputText),
490496
setCliDbIndex(0)
491497
]
492-
expect(store.getActions()).toEqual(expectedActions)
498+
expect(clearStoreActions(store.getActions())).toEqual(clearStoreActions(expectedActions))
493499
})
494500

495501
it('call both createCliClientAction and processCliClientFailure when fetch is fail', async () => {
@@ -505,12 +511,12 @@ describe('cliSettings slice', () => {
505511
apiService.post = jest.fn().mockRejectedValueOnce(responsePayload)
506512

507513
// Act
508-
await store.dispatch<any>(createCliClientAction())
514+
await store.dispatch<any>(createCliClientAction(INSTANCE_ID_MOCK, () => {}))
509515

510516
// Assert
511517
const expectedActions = [
512518
processCliClient(),
513-
concatToOutput(InitOutputText()),
519+
concatToOutput(InitOutputText('', 0, 0, true, () => {})),
514520
processCliClientFailure(responsePayload.response.data.message),
515521
concatToOutput(cliTexts.CLI_ERROR_MESSAGE(errorMessage))
516522
]

yarn.lock

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13676,14 +13676,7 @@ [email protected], rxjs@^6.5.2, rxjs@^6.6.0, rxjs@^6.6.3:
1367613676
dependencies:
1367713677
tslib "^1.9.0"
1367813678

13679-
rxjs@^7.5.2:
13680-
version "7.5.5"
13681-
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f"
13682-
integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==
13683-
dependencies:
13684-
tslib "^2.1.0"
13685-
13686-
rxjs@^7.5.5:
13679+
rxjs@^7.5.2, rxjs@^7.5.5:
1368713680
version "7.5.6"
1368813681
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc"
1368913682
integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==
@@ -15285,12 +15278,7 @@ type-fest@^0.8.1:
1528515278
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
1528615279
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
1528715280

15288-
type-fest@^1.0.2:
15289-
version "1.2.2"
15290-
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.2.2.tgz#1930bc36b2064f7ab4aa307a6d1b65965199c698"
15291-
integrity sha512-pfkPYCcuV0TJoo/jlsUeWNV8rk7uMU6ocnYNvca1Vu+pyKi8Rl8Zo2scPt9O72gCsXIm+dMxOOWuA3VFDSdzWA==
15292-
15293-
type-fest@^1.2.2:
15281+
type-fest@^1.0.2, type-fest@^1.2.2:
1529415282
version "1.4.0"
1529515283
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
1529615284
integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
@@ -16455,20 +16443,7 @@ yargs@^16.2.0:
1645516443
y18n "^5.0.5"
1645616444
yargs-parser "^20.2.2"
1645716445

16458-
yargs@^17.0.1:
16459-
version "17.2.1"
16460-
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea"
16461-
integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==
16462-
dependencies:
16463-
cliui "^7.0.2"
16464-
escalade "^3.1.1"
16465-
get-caller-file "^2.0.5"
16466-
require-directory "^2.1.1"
16467-
string-width "^4.2.0"
16468-
y18n "^5.0.5"
16469-
yargs-parser "^20.2.2"
16470-
16471-
yargs@^17.3.1:
16446+
yargs@^17.0.1, yargs@^17.3.1:
1647216447
version "17.5.1"
1647316448
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
1647416449
integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==

0 commit comments

Comments
 (0)