mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-06-04 11:25:52 +08:00
FIX: Pipelines edit filter return empty filter (#8055)
* fix: fix pipeline add and edit form flow * test: update test cases --------- Co-authored-by: Aditya Singh <adityasingh@Adityas-MacBook-Pro.local> Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
This commit is contained in:
parent
1d77780c70
commit
c08d1bccaf
@ -1,6 +1,6 @@
|
|||||||
import { Button, Divider, Form, Modal } from 'antd';
|
import { Button, Divider, Form, FormInstance, Modal } from 'antd';
|
||||||
import { useAppContext } from 'providers/App/App';
|
import { useAppContext } from 'providers/App/App';
|
||||||
import React, { useCallback, useEffect, useMemo } from 'react';
|
import React, { useCallback, useMemo } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ActionMode, ActionType, PipelineData } from 'types/api/pipeline/def';
|
import { ActionMode, ActionType, PipelineData } from 'types/api/pipeline/def';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
@ -10,6 +10,7 @@ import { getEditedDataSource, getRecordIndex } from '../utils';
|
|||||||
import { renderPipelineForm } from './utils';
|
import { renderPipelineForm } from './utils';
|
||||||
|
|
||||||
function AddNewPipeline({
|
function AddNewPipeline({
|
||||||
|
form,
|
||||||
isActionType,
|
isActionType,
|
||||||
setActionType,
|
setActionType,
|
||||||
selectedPipelineData,
|
selectedPipelineData,
|
||||||
@ -17,22 +18,12 @@ function AddNewPipeline({
|
|||||||
setCurrPipelineData,
|
setCurrPipelineData,
|
||||||
currPipelineData,
|
currPipelineData,
|
||||||
}: AddNewPipelineProps): JSX.Element {
|
}: AddNewPipelineProps): JSX.Element {
|
||||||
const [form] = Form.useForm();
|
|
||||||
const { t } = useTranslation('pipeline');
|
const { t } = useTranslation('pipeline');
|
||||||
const { user } = useAppContext();
|
const { user } = useAppContext();
|
||||||
|
|
||||||
const isEdit = isActionType === 'edit-pipeline';
|
const isEdit = isActionType === 'edit-pipeline';
|
||||||
const isAdd = isActionType === 'add-pipeline';
|
const isAdd = isActionType === 'add-pipeline';
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (isEdit) {
|
|
||||||
form.setFieldsValue(selectedPipelineData);
|
|
||||||
}
|
|
||||||
if (isAdd) {
|
|
||||||
form.resetFields();
|
|
||||||
}
|
|
||||||
}, [form, isEdit, isAdd, selectedPipelineData]);
|
|
||||||
|
|
||||||
const onFinish = (values: PipelineData): void => {
|
const onFinish = (values: PipelineData): void => {
|
||||||
const newPipeLineData: PipelineData = {
|
const newPipeLineData: PipelineData = {
|
||||||
id: v4(),
|
id: v4(),
|
||||||
@ -135,6 +126,7 @@ function AddNewPipeline({
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface AddNewPipelineProps {
|
interface AddNewPipelineProps {
|
||||||
|
form: FormInstance<PipelineData>;
|
||||||
isActionType: string;
|
isActionType: string;
|
||||||
setActionType: (actionType?: ActionType) => void;
|
setActionType: (actionType?: ActionType) => void;
|
||||||
selectedPipelineData: PipelineData | undefined;
|
selectedPipelineData: PipelineData | undefined;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import './styles.scss';
|
import './styles.scss';
|
||||||
|
|
||||||
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';
|
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';
|
||||||
import { Card, Modal, Table, Typography } from 'antd';
|
import { Card, Form, Modal, Table, Typography } from 'antd';
|
||||||
import { ExpandableConfig } from 'antd/es/table/interface';
|
import { ExpandableConfig } from 'antd/es/table/interface';
|
||||||
import logEvent from 'api/common/logEvent';
|
import logEvent from 'api/common/logEvent';
|
||||||
import savePipeline from 'api/pipeline/post';
|
import savePipeline from 'api/pipeline/post';
|
||||||
@ -95,6 +95,7 @@ function PipelineListsView({
|
|||||||
pipelineData,
|
pipelineData,
|
||||||
refetchPipelineLists,
|
refetchPipelineLists,
|
||||||
}: PipelineListsViewProps): JSX.Element {
|
}: PipelineListsViewProps): JSX.Element {
|
||||||
|
const [pipelineForm] = Form.useForm<PipelineData>();
|
||||||
const { t } = useTranslation(['pipeline', 'common']);
|
const { t } = useTranslation(['pipeline', 'common']);
|
||||||
const [modal, contextHolder] = Modal.useModal();
|
const [modal, contextHolder] = Modal.useModal();
|
||||||
const { notifications } = useNotifications();
|
const { notifications } = useNotifications();
|
||||||
@ -179,8 +180,9 @@ function PipelineListsView({
|
|||||||
(record: PipelineData) => (): void => {
|
(record: PipelineData) => (): void => {
|
||||||
setActionType(ActionType.EditPipeline);
|
setActionType(ActionType.EditPipeline);
|
||||||
setSelectedPipelineData(record);
|
setSelectedPipelineData(record);
|
||||||
|
pipelineForm.setFieldsValue(record);
|
||||||
},
|
},
|
||||||
[setActionType],
|
[setActionType, pipelineForm],
|
||||||
);
|
);
|
||||||
|
|
||||||
const pipelineDeleteHandler = useCallback(
|
const pipelineDeleteHandler = useCallback(
|
||||||
@ -382,12 +384,13 @@ function PipelineListsView({
|
|||||||
|
|
||||||
const addNewPipelineHandler = useCallback((): void => {
|
const addNewPipelineHandler = useCallback((): void => {
|
||||||
setActionType(ActionType.AddPipeline);
|
setActionType(ActionType.AddPipeline);
|
||||||
|
pipelineForm.resetFields();
|
||||||
|
|
||||||
logEvent('Logs: Pipelines: Clicked Add New Pipeline', {
|
logEvent('Logs: Pipelines: Clicked Add New Pipeline', {
|
||||||
source: 'signoz-ui',
|
source: 'signoz-ui',
|
||||||
});
|
});
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [setActionType]);
|
}, [setActionType, pipelineForm]);
|
||||||
|
|
||||||
const footer = useCallback((): JSX.Element | undefined => {
|
const footer = useCallback((): JSX.Element | undefined => {
|
||||||
if (isEditingActionMode) {
|
if (isEditingActionMode) {
|
||||||
@ -495,6 +498,7 @@ function PipelineListsView({
|
|||||||
<>
|
<>
|
||||||
{contextHolder}
|
{contextHolder}
|
||||||
<AddNewPipeline
|
<AddNewPipeline
|
||||||
|
form={pipelineForm}
|
||||||
isActionType={isActionType}
|
isActionType={isActionType}
|
||||||
setActionType={setActionType}
|
setActionType={setActionType}
|
||||||
selectedPipelineData={selectedPipelineData}
|
selectedPipelineData={selectedPipelineData}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
import { Form } from 'antd';
|
||||||
import { render } from 'tests/test-utils';
|
import { render } from 'tests/test-utils';
|
||||||
|
import { PipelineData } from 'types/api/pipeline/def';
|
||||||
|
|
||||||
import { pipelineMockData } from '../mocks/pipeline';
|
import { pipelineMockData } from '../mocks/pipeline';
|
||||||
import AddNewPipeline from '../PipelineListsView/AddNewPipeline';
|
import AddNewPipeline from '../PipelineListsView/AddNewPipeline';
|
||||||
@ -36,22 +38,28 @@ beforeAll(() => {
|
|||||||
matchMedia();
|
matchMedia();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function AddNewPipelineWrapper(): JSX.Element {
|
||||||
|
const setActionType = jest.fn();
|
||||||
|
const selectedPipelineData = pipelineMockData[0];
|
||||||
|
const isActionType = 'add-pipeline';
|
||||||
|
const [pipelineForm] = Form.useForm<PipelineData>();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AddNewPipeline
|
||||||
|
isActionType={isActionType}
|
||||||
|
setActionType={setActionType}
|
||||||
|
selectedPipelineData={selectedPipelineData}
|
||||||
|
setShowSaveButton={jest.fn()}
|
||||||
|
setCurrPipelineData={jest.fn()}
|
||||||
|
currPipelineData={pipelineMockData}
|
||||||
|
form={pipelineForm}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
describe('PipelinePage container test', () => {
|
describe('PipelinePage container test', () => {
|
||||||
it('should render AddNewPipeline section', () => {
|
it('should render AddNewPipeline section', () => {
|
||||||
const setActionType = jest.fn();
|
const { asFragment } = render(<AddNewPipelineWrapper />);
|
||||||
const selectedPipelineData = pipelineMockData[0];
|
|
||||||
const isActionType = 'add-pipeline';
|
|
||||||
|
|
||||||
const { asFragment } = render(
|
|
||||||
<AddNewPipeline
|
|
||||||
isActionType={isActionType}
|
|
||||||
setActionType={setActionType}
|
|
||||||
selectedPipelineData={selectedPipelineData}
|
|
||||||
setShowSaveButton={jest.fn()}
|
|
||||||
setCurrPipelineData={jest.fn()}
|
|
||||||
currPipelineData={pipelineMockData}
|
|
||||||
/>,
|
|
||||||
);
|
|
||||||
expect(asFragment()).toMatchSnapshot();
|
expect(asFragment()).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/* eslint-disable sonarjs/no-duplicate-string */
|
/* eslint-disable sonarjs/no-duplicate-string */
|
||||||
|
import { screen } from '@testing-library/react';
|
||||||
import { findByText, fireEvent, render, waitFor } from 'tests/test-utils';
|
import { findByText, fireEvent, render, waitFor } from 'tests/test-utils';
|
||||||
|
|
||||||
import { pipelineApiResponseMockData } from '../mocks/pipeline';
|
import { pipelineApiResponseMockData } from '../mocks/pipeline';
|
||||||
@ -243,4 +244,34 @@ describe('PipelinePage container test', () => {
|
|||||||
expect(saveBtn).toBeInTheDocument();
|
expect(saveBtn).toBeInTheDocument();
|
||||||
await fireEvent.click(saveBtn);
|
await fireEvent.click(saveBtn);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should have populated form fields when edit pipeline is clicked', async () => {
|
||||||
|
render(
|
||||||
|
<PipelineListsView
|
||||||
|
setActionType={jest.fn()}
|
||||||
|
isActionMode="editing-mode"
|
||||||
|
setActionMode={jest.fn()}
|
||||||
|
pipelineData={pipelineApiResponseMockData}
|
||||||
|
isActionType="edit-pipeline"
|
||||||
|
refetchPipelineLists={jest.fn()}
|
||||||
|
/>,
|
||||||
|
);
|
||||||
|
|
||||||
|
// content assertion
|
||||||
|
expect(document.querySelectorAll('[data-icon="edit"]').length).toBe(2);
|
||||||
|
|
||||||
|
// expand action
|
||||||
|
const expandIcon = document.querySelectorAll(
|
||||||
|
'.ant-table-row-expand-icon-cell > span[class*="anticon-right"]',
|
||||||
|
);
|
||||||
|
expect(expandIcon.length).toBe(2);
|
||||||
|
await fireEvent.click(expandIcon[0]);
|
||||||
|
|
||||||
|
const editBtn = document.querySelectorAll('[data-icon="edit"]');
|
||||||
|
// click on edit btn
|
||||||
|
await fireEvent.click(editBtn[0] as HTMLElement);
|
||||||
|
|
||||||
|
// to have length 2
|
||||||
|
expect(screen.queryAllByText('source = nginx').length).toBe(2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user