Skip to content

Commit aaefb5f

Browse files
RI-7187 show deployed pipeline by default (#4752)
1 parent 4de8180 commit aaefb5f

File tree

7 files changed

+100
-6
lines changed

7 files changed

+100
-6
lines changed

redisinsight/ui/src/pages/rdi/pipeline-management/PipelineManagementPage.spec.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
} from 'uiSrc/slices/app/context'
1313
import { PageNames, Pages } from 'uiSrc/constants'
1414
import { MOCK_RDI_PIPELINE_DATA } from 'uiSrc/mocks/data/rdi'
15+
import { getPipeline } from 'uiSrc/slices/rdi/pipeline'
1516
import PipelineManagementPage, { Props } from './PipelineManagementPage'
1617

1718
const mockedProps = mock<Props>()
@@ -99,6 +100,7 @@ describe('PipelineManagementPage', () => {
99100

100101
unmount()
101102
const expectedActions = [
103+
getPipeline(),
102104
setLastPageContext(PageNames.rdiPipelineManagement),
103105
setLastPipelineManagementPage(Pages.rdiPipelineConfig('rdiInstanceId')),
104106
]

redisinsight/ui/src/pages/rdi/pipeline-management/PipelineManagementPage.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useDispatch, useSelector } from 'react-redux'
55
import { IRoute, PageNames, Pages } from 'uiSrc/constants'
66
import { connectedInstanceSelector } from 'uiSrc/slices/rdi/instances'
77
import {
8+
fetchRdiPipeline,
89
fetchRdiPipelineJobFunctions,
910
fetchRdiPipelineSchema,
1011
} from 'uiSrc/slices/rdi/pipeline'
@@ -43,6 +44,7 @@ const PipelineManagementPage = ({ routes = [] }: Props) => {
4344
setTitle(`${rdiInstanceName} - Pipeline Management`)
4445

4546
useEffect(() => {
47+
dispatch(fetchRdiPipeline(rdiInstanceId))
4648
dispatch(fetchRdiPipelineSchema(rdiInstanceId))
4749
dispatch(fetchRdiPipelineJobFunctions(rdiInstanceId))
4850
}, [])

redisinsight/ui/src/pages/rdi/pipeline-management/components/navigation/Navigation.spec.tsx

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import React from 'react'
22
import reactRouterDom from 'react-router-dom'
3-
import { render, screen, fireEvent } from 'uiSrc/utils/test-utils'
3+
import { cloneDeep } from 'lodash'
4+
import {
5+
render,
6+
screen,
7+
fireEvent,
8+
mockedStore,
9+
cleanup,
10+
initialStateDefault,
11+
} from 'uiSrc/utils/test-utils'
412

13+
import { rdiPipelineSelector } from 'uiSrc/slices/rdi/pipeline'
14+
import { RdiPipelineTabs } from 'uiSrc/slices/interfaces'
515
import Navigation from './Navigation'
616

717
jest.mock('uiSrc/telemetry', () => ({
@@ -29,12 +39,53 @@ jest.mock('formik', () => ({
2939
}),
3040
}))
3141

42+
jest.mock('uiSrc/slices/rdi/pipeline', () => ({
43+
...jest.requireActual('uiSrc/slices/rdi/pipeline'),
44+
rdiPipelineSelector: jest.fn(),
45+
}))
46+
47+
let store: typeof mockedStore
48+
beforeEach(() => {
49+
cleanup()
50+
store = cloneDeep(mockedStore)
51+
store.clearActions()
52+
;(rdiPipelineSelector as jest.Mock).mockReturnValue(
53+
initialStateDefault.rdi.pipeline,
54+
)
55+
})
56+
3257
describe('Navigation', () => {
3358
it('should render', () => {
3459
expect(render(<Navigation />)).toBeTruthy()
3560
})
3661

62+
it('should not show nav when pipeline is loading', () => {
63+
render(<Navigation />)
64+
65+
expect(
66+
screen.queryByTestId(`rdi-nav-btn-${RdiPipelineTabs.Config}`),
67+
).not.toBeInTheDocument()
68+
})
69+
70+
it('should show nav when pipeline is not loading', () => {
71+
;(rdiPipelineSelector as jest.Mock).mockReturnValue({
72+
...initialStateDefault.rdi.pipeline,
73+
loading: false,
74+
})
75+
76+
render(<Navigation />)
77+
78+
expect(
79+
screen.queryByTestId(`rdi-nav-btn-${RdiPipelineTabs.Config}`),
80+
).toBeInTheDocument()
81+
})
82+
3783
it('should call proper history push after click on tabs', () => {
84+
;(rdiPipelineSelector as jest.Mock).mockReturnValue({
85+
...initialStateDefault.rdi.pipeline,
86+
loading: false,
87+
})
88+
3889
const pushMock = jest.fn()
3990
reactRouterDom.useHistory = jest.fn().mockReturnValue({ push: pushMock })
4091

redisinsight/ui/src/pages/rdi/pipeline-management/components/navigation/Navigation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ const Navigation = () => {
109109
<EuiTextColor component="div">Pipeline Management</EuiTextColor>
110110
</div>
111111
<div className={styles.tabs} data-testid="rdi-pipeline-tabs">
112-
{renderTabs()}
112+
{!loading && renderTabs()}
113113
</div>
114114
</div>
115115
)

redisinsight/ui/src/pages/rdi/pipeline-management/components/source-pipeline-dialog/SourcePipelineModal.spec.tsx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import {
66
render,
77
fireEvent,
88
screen,
9+
initialStateDefault,
910
} from 'uiSrc/utils/test-utils'
1011
import {
1112
getPipeline,
13+
rdiPipelineSelector,
1214
setChangedFile,
1315
setPipeline,
1416
} from 'uiSrc/slices/rdi/pipeline'
@@ -35,11 +37,21 @@ jest.mock('uiSrc/telemetry', () => ({
3537
sendEventTelemetry: jest.fn(),
3638
}))
3739

40+
jest.mock('uiSrc/slices/rdi/pipeline', () => ({
41+
...jest.requireActual('uiSrc/slices/rdi/pipeline'),
42+
rdiPipelineSelector: jest.fn(),
43+
}))
44+
3845
let store: typeof mockedStore
3946
beforeEach(() => {
4047
cleanup()
4148
store = cloneDeep(mockedStore)
4249
store.clearActions()
50+
;(rdiPipelineSelector as jest.Mock).mockReturnValue({
51+
...initialStateDefault.rdi.pipeline,
52+
loading: false,
53+
config: '',
54+
})
4355
})
4456

4557
describe('SourcePipelineDialog', () => {
@@ -94,7 +106,7 @@ describe('SourcePipelineDialog', () => {
94106
})
95107
})
96108

97-
it('should call proper telemetry event after select empty pipeline option', () => {
109+
it('should call proper telemetry event after select empty pipeline option', () => {
98110
const sendEventTelemetryMock = jest.fn()
99111
;(sendEventTelemetry as jest.Mock).mockImplementation(
100112
() => sendEventTelemetryMock,
@@ -111,4 +123,20 @@ describe('SourcePipelineDialog', () => {
111123
},
112124
})
113125
})
126+
127+
it('should not show dialog when there is deployed pipeline on a server', () => {
128+
const sendEventTelemetryMock = jest.fn()
129+
;(sendEventTelemetry as jest.Mock).mockImplementation(
130+
() => sendEventTelemetryMock,
131+
)
132+
;(rdiPipelineSelector as jest.Mock).mockReturnValue({
133+
...initialStateDefault.rdi.pipeline,
134+
loading: false,
135+
config: 'deployed config',
136+
})
137+
138+
render(<SourcePipelineDialog />)
139+
140+
expect(screen.queryByTestId('file-source-pipeline-dialog')).not.toBeInTheDocument()
141+
})
114142
})

redisinsight/ui/src/pages/rdi/pipeline-management/components/source-pipeline-dialog/SourcePipelineModal.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react'
1+
import React, { useEffect, useState } from 'react'
22
import {
33
EuiIcon,
44
EuiModal,
@@ -13,6 +13,7 @@ import { useParams } from 'react-router-dom'
1313
import { TelemetryEvent, sendEventTelemetry } from 'uiSrc/telemetry'
1414
import {
1515
fetchRdiPipeline,
16+
rdiPipelineSelector,
1617
setChangedFile,
1718
setPipeline,
1819
} from 'uiSrc/slices/rdi/pipeline'
@@ -39,10 +40,20 @@ export enum PipelineSourceOptions {
3940

4041
const SourcePipelineDialog = () => {
4142
const [isShowDownloadDialog, setIsShowDownloadDialog] = useState(false)
43+
const [hasRdiPipelineDeployed, setHasRdiPipelineDeployed] =
44+
useState(false)
45+
4246
const { rdiInstanceId } = useParams<{ rdiInstanceId: string }>()
4347

4448
const { isOpenDialog } = useSelector(appContextPipelineManagement)
4549

50+
const { loading: pipelineLoading, config: pipelineConfig } =
51+
useSelector(rdiPipelineSelector)
52+
53+
useEffect(() => {
54+
setHasRdiPipelineDeployed(!pipelineLoading && pipelineConfig?.length > 0)
55+
}, [pipelineConfig, pipelineLoading])
56+
4657
const dispatch = useDispatch()
4758

4859
const onSelect = (option: PipelineSourceOptions) => {
@@ -95,7 +106,7 @@ const SourcePipelineDialog = () => {
95106
)
96107
}
97108

98-
if (!isOpenDialog) {
109+
if (!isOpenDialog || hasRdiPipelineDeployed) {
99110
return null
100111
}
101112

redisinsight/ui/src/slices/rdi/pipeline.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import successMessages from 'uiSrc/components/notifications/success-messages'
3434
import { AppDispatch, RootState } from '../store'
3535

3636
export const initialState: IStateRdiPipeline = {
37-
loading: false,
37+
loading: true,
3838
error: '',
3939
data: null,
4040
config: '',

0 commit comments

Comments
 (0)