From f999e2613a2cf5e6baca8392e990fe25cf7913d5 Mon Sep 17 00:00:00 2001 From: xinbinyan <404928130@qq.com> Date: Wed, 10 Jan 2024 16:02:04 +0800 Subject: [PATCH 01/23] case order list --- .../List/__snapshots__/index.ce.test.tsx.snap | 2755 +++++++++++++ .../List/__snapshots__/index.test.tsx.snap | 3612 +++++++++++++++++ .../src/page/Order/List/index.ce.test.tsx | 391 ++ .../sqle/src/page/Order/List/index.test.tsx | 418 ++ 4 files changed, 7176 insertions(+) create mode 100644 packages/sqle/src/page/Order/List/__snapshots__/index.ce.test.tsx.snap create mode 100644 packages/sqle/src/page/Order/List/__snapshots__/index.test.tsx.snap create mode 100644 packages/sqle/src/page/Order/List/index.ce.test.tsx create mode 100644 packages/sqle/src/page/Order/List/index.test.tsx diff --git a/packages/sqle/src/page/Order/List/__snapshots__/index.ce.test.tsx.snap b/packages/sqle/src/page/Order/List/__snapshots__/index.ce.test.tsx.snap new file mode 100644 index 000000000..a10ff5e78 --- /dev/null +++ b/packages/sqle/src/page/Order/List/__snapshots__/index.ce.test.tsx.snap @@ -0,0 +1,2755 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sqle/Order/List render click batch cancel btn when has not closed 1`] = ` + +
+
+
+
+ 工单列表 +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ 工单号 + + 工单名称 + + 工单描述 + + 创建时间 + + 创建人 + + 工单状态 + + 待操作人 +
+ + +
+ + + + + + + 1 + +
+
+
+ name1 +
+
+
+ desc demo +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + 待上线 + +
+
+
+ + +
+ + + + + + + 2 + +
+
+
+ name2 +
+
+
+ desc demo2 +
+ + + +
+ + +
+
+ - + + admin + test + +
+ + + + + + + 待审核 + +
+
+
+ + +
+ + + + + + + 3 + +
+
+
+ name3 +
+
+
+ desc demo3 +
+ + + +
+ + +
+
+ - + + test + +
+ + + + + + + + 已驳回 + +
+
+
+ + +
+ + + + + + + 4 + +
+
+
+ name4 +
+
+
+ desc demo4 +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + + 已关闭 + +
+
+
+
+
+
+
    +
  • + + 共 4 条数据 + +
  • +
  • + +
  • +
  • + + 1 + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + 您所选的工单包含不可关闭的工单!(只有工单状态为“处理中”和“已驳回”的工单可以关闭。) + +
+
+
+
+ +`; + +exports[`sqle/Order/List render click batch cancel when action success 1`] = ` + +
+
+
+
+ 工单列表 +
+ +
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ 工单号 + + 工单名称 + + 工单描述 + + 创建时间 + + 创建人 + + 工单状态 + + 待操作人 +
+ + +
+ + + + + + + 1 + +
+
+
+ name1 +
+
+
+ desc demo +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + 待上线 + +
+
+
+
+
+
+
    +
  • + + 共 1 条数据 + +
  • +
  • + +
  • +
  • + + 1 + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +`; + +exports[`sqle/Order/List render click create btn 1`] = ` + +`; diff --git a/packages/sqle/src/page/Order/List/__snapshots__/index.test.tsx.snap b/packages/sqle/src/page/Order/List/__snapshots__/index.test.tsx.snap new file mode 100644 index 000000000..1d95235fb --- /dev/null +++ b/packages/sqle/src/page/Order/List/__snapshots__/index.test.tsx.snap @@ -0,0 +1,3612 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sqle/Order/List render click batch cancel btn when has not closed 1`] = ` + +
+
+
+
+ 工单列表 +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ 工单号 + + 工单名称 + + 工单描述 + + 创建时间 + + 创建人 + + 工单状态 + + 待操作人 +
+ + +
+ + + + + + + 1 + +
+
+
+ name1 +
+
+
+ desc demo +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + 待上线 + +
+
+
+ + +
+ + + + + + + 2 + +
+
+
+ name2 +
+
+
+ desc demo2 +
+ + + +
+ + +
+
+ - + + admin + test + +
+ + + + + + + 待审核 + +
+
+
+ + +
+ + + + + + + 3 + +
+
+
+ name3 +
+
+
+ desc demo3 +
+ + + +
+ + +
+
+ - + + test + +
+ + + + + + + + 已驳回 + +
+
+
+ + +
+ + + + + + + 4 + +
+
+
+ name4 +
+
+
+ desc demo4 +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + + 已关闭 + +
+
+
+
+
+
+
    +
  • + + 共 4 条数据 + +
  • +
  • + +
  • +
  • + + 1 + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + 您所选的工单包含不可关闭的工单!(只有工单状态为“处理中”和“已驳回”的工单可以关闭。) + +
+
+
+
+ +`; + +exports[`sqle/Order/List render click batch cancel when action success 1`] = ` + +
+
+
+
+ 工单列表 +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ 工单号 + + 工单名称 + + 工单描述 + + 创建时间 + + 创建人 + + 工单状态 + + 待操作人 +
+ + +
+ + + + + + + 1 + +
+
+
+ name1 +
+
+
+ desc demo +
+ + + +
+ + +
+
+ - + + admin + +
+ + + + + + + + 待上线 + +
+
+
+
+
+
+
    +
  • + + 共 1 条数据 + +
  • +
  • + +
  • +
  • + + 1 + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +`; + +exports[`sqle/Order/List render click create btn 1`] = ` +
+
+
+ +
+ +
+
+`; + +exports[`sqle/Order/List render click export btn 1`] = ` + +
+
+
+
+ 工单列表 +
+
+
+
+ +
+ +
+
+
+
+
+
+ + + + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ + + + + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ 工单号 + + 工单名称 + + 工单描述 + + 创建时间 + + 创建人 + + 工单状态 + + 待操作人 +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + 正在导出历史工单 + +
+
+
+
+ +`; diff --git a/packages/sqle/src/page/Order/List/index.ce.test.tsx b/packages/sqle/src/page/Order/List/index.ce.test.tsx new file mode 100644 index 000000000..81d4d0a26 --- /dev/null +++ b/packages/sqle/src/page/Order/List/index.ce.test.tsx @@ -0,0 +1,391 @@ +/** + * @test_version ce + */ + +import { screen, cleanup, act, fireEvent } from '@testing-library/react'; +import { useNavigate } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { mockUseCurrentProject } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentProject'; +import { mockUseCurrentUser } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentUser'; +import { mockProjectInfo } from '@actiontech/shared/lib/testUtil/mockHook/data'; +import { superRender } from '../../../testUtils/customRender'; + +import order from '../../../testUtils/mockApi/order'; +import user from '../../../testUtils/mockApi/user'; +import instance from '../../../testUtils/mockApi/instance'; +import { driverMeta } from '../../../hooks/useDatabaseType/index.test.data'; + +import OrderList from '.'; +import { + createSpyFailResponse, + createSpySuccessResponse +} from '@actiontech/shared/lib/testUtil/mockApi'; +import { + getAllBySelector, + getBySelector +} from '@actiontech/shared/lib/testUtil/customQuery'; + +jest.mock('react-router-dom', () => { + return { + ...jest.requireActual('react-router-dom'), + useNavigate: jest.fn() + }; +}); + +jest.mock('react-redux', () => { + return { + ...jest.requireActual('react-redux'), + useSelector: jest.fn() + }; +}); + +describe('sqle/Order/List', () => { + const projectName = mockProjectInfo.projectName; + const projectID = mockProjectInfo.projectID; + const navigateSpy = jest.fn(); + let RequestUserTipList: jest.SpyInstance; + let RequestInstanceTipList: jest.SpyInstance; + let RequestOrderList: jest.SpyInstance; + let RequestBatchCancel: jest.SpyInstance; + + const customRender = () => { + return superRender(); + }; + + beforeEach(() => { + (useNavigate as jest.Mock).mockImplementation(() => navigateSpy); + jest.useFakeTimers(); + (useSelector as jest.Mock).mockImplementation((selector) => { + return selector({ + database: { driverMeta: driverMeta } + }); + }); + RequestUserTipList = user.getUserTipList(); + RequestInstanceTipList = instance.getInstanceTipList(); + RequestOrderList = order.getWorkflows(); + RequestBatchCancel = order.batchCancelWorkflows(); + mockUseCurrentProject(); + mockUseCurrentUser(); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.clearAllTimers(); + cleanup(); + }); + + it('render snap when list page init', async () => { + const { baseElement } = customRender(); + + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestUserTipList).toBeCalledWith({ filter_project: projectName }); + + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestInstanceTipList).toBeCalledWith({ + project_name: projectName + }); + + await act(async () => jest.advanceTimersByTime(300)); + expect(baseElement).toMatchSnapshot; + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when projectArchive is false', async () => { + mockUseCurrentProject({ + projectArchive: false + }); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(baseElement).toMatchSnapshot; + }); + + it('render btn batchCancel when is not Admin', async () => { + mockUseCurrentUser({ + isAdmin: false + }); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when list is empty', async () => { + RequestOrderList.mockImplementation(() => createSpySuccessResponse({})); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when list api return error', async () => { + RequestOrderList.mockImplementation(() => createSpyFailResponse({})); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + }); + + it('render list column diff data', async () => { + const workflowName = 'demo-workflow_name'; + const workflowId = '1234'; + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: workflowName, + workflow_id: workflowId, + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + } + ], + total_nums: 1 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + + fireEvent.click(screen.getByText(workflowName)); + await act(async () => jest.advanceTimersByTime(300)); + expect(navigateSpy).toBeCalled(); + expect(navigateSpy).toBeCalledWith( + `/sqle/project/${projectID}/order/${workflowId}` + ); + }); + + it('render filter when cate val change', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + + const OrderStatusSegmented = getAllBySelector( + '.ant-segmented-item-label', + baseElement + ); + expect(OrderStatusSegmented.length).toBe(8); + expect(OrderStatusSegmented[1]).toHaveAttribute('title', '待审核'); + fireEvent.click(OrderStatusSegmented[1]); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: 'wait_for_audit', + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + }); + + it('render fuzzy input when input fuzzy val', async () => { + const fuzzyVal = 'fuzzy value'; + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const inputFuzzyEle = getBySelector( + 'input#actiontech-table-search-input', + baseElement + ); + fireEvent.change(inputFuzzyEle, { + target: { value: fuzzyVal } + }); + + await act(async () => { + fireEvent.keyDown(inputFuzzyEle, { + key: 'Enter', + code: 'Enter', + keyCode: 13 + }); + await jest.advanceTimersByTime(300); + }); + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestOrderList).nthCalledWith(2, { + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: fuzzyVal, + page_index: 1, + page_size: 20 + }); + }); + + it('render refresh btn when click refresh', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const refreshIcon = getBySelector('.custom-icon-refresh', baseElement); + fireEvent.click(refreshIcon); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalled(); + }); + + it('render click create btn', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(300)); + + expect(screen.getByText('创建工单')).toBeInTheDocument(); + const extraEle = getBySelector('div.extra', baseElement); + expect(extraEle).toMatchSnapshot(); + const createBtn = getBySelector('a', extraEle); + expect(createBtn).toHaveAttribute( + 'href', + `/sqle/project/${projectID}/order/create` + ); + }); + + it('render click batch cancel btn when has not closed ', async () => { + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: 'name1', + workflow_id: '1', + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + }, + { + project_name: '700300', + workflow_name: 'name2', + workflow_id: '2', + desc: 'desc demo2', + create_user_name: ['admin', 'test'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_audit' + }, + { + project_name: '700300', + workflow_name: 'name3', + workflow_id: '3', + desc: 'desc demo3', + create_user_name: ['test'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'rejected' + }, + { + project_name: '700300', + workflow_name: 'name4', + workflow_id: '4', + desc: 'desc demo4', + create_user_name: ['admin'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'canceled' + } + ], + total_nums: 4 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const checkboxEle = getAllBySelector( + '.ant-checkbox-wrapper .ant-checkbox-input', + baseElement + ); + expect(checkboxEle.length).toBe(5); + fireEvent.click(checkboxEle[0]); + await act(async () => jest.advanceTimersByTime(1000)); + expect( + getAllBySelector( + '.ant-checkbox-wrapper-checked .ant-checkbox-input', + baseElement + ) + ); + expect(checkboxEle.length).toBe(5); + + fireEvent.click(screen.getByText('批量关闭')); + await act(async () => jest.advanceTimersByTime(500)); + expect(screen.getByText('您确认关闭所选工单吗?')).toBeInTheDocument(); + fireEvent.click(screen.getByText('确 认')); + await act(async () => jest.advanceTimersByTime(300)); + expect( + screen.getByText( + '您所选的工单包含不可关闭的工单!(只有工单状态为“处理中”和“已驳回”的工单可以关闭。)' + ) + ).toBeInTheDocument(); + expect(baseElement).toMatchSnapshot(); + }); + + it('render click batch cancel when action success', async () => { + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: 'name1', + workflow_id: '1', + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + } + ], + total_nums: 1 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const checkboxEle = getAllBySelector( + '.ant-checkbox-wrapper .ant-checkbox-input', + baseElement + ); + expect(checkboxEle.length).toBe(2); + fireEvent.click(checkboxEle[0]); + await act(async () => jest.advanceTimersByTime(1000)); + expect( + getAllBySelector( + '.ant-checkbox-wrapper-checked .ant-checkbox-input', + baseElement + ) + ); + expect(checkboxEle.length).toBe(2); + + fireEvent.click(screen.getByText('批量关闭')); + await act(async () => jest.advanceTimersByTime(500)); + expect(screen.getByText('您确认关闭所选工单吗?')).toBeInTheDocument(); + fireEvent.click(screen.getByText('确 认')); + await act(async () => jest.advanceTimersByTime(300)); + expect(baseElement).toMatchSnapshot(); + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestBatchCancel).toBeCalled(); + expect(RequestBatchCancel).toBeCalledWith({ + project_name: projectName, + workflow_id_list: ['1'] + }); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalled(); + }); +}); diff --git a/packages/sqle/src/page/Order/List/index.test.tsx b/packages/sqle/src/page/Order/List/index.test.tsx new file mode 100644 index 000000000..6136ed132 --- /dev/null +++ b/packages/sqle/src/page/Order/List/index.test.tsx @@ -0,0 +1,418 @@ +import { screen, cleanup, act, fireEvent } from '@testing-library/react'; +import { useNavigate } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { mockUseCurrentProject } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentProject'; +import { mockUseCurrentUser } from '@actiontech/shared/lib/testUtil/mockHook/mockUseCurrentUser'; +import { mockProjectInfo } from '@actiontech/shared/lib/testUtil/mockHook/data'; +import { superRender } from '../../../testUtils/customRender'; + +import order from '../../../testUtils/mockApi/order'; +import user from '../../../testUtils/mockApi/user'; +import instance from '../../../testUtils/mockApi/instance'; +import { driverMeta } from '../../../hooks/useDatabaseType/index.test.data'; + +import OrderList from '.'; +import { + createSpyFailResponse, + createSpySuccessResponse +} from '@actiontech/shared/lib/testUtil/mockApi'; +import { + getAllBySelector, + getBySelector +} from '@actiontech/shared/lib/testUtil/customQuery'; + +jest.mock('react-router-dom', () => { + return { + ...jest.requireActual('react-router-dom'), + useNavigate: jest.fn() + }; +}); + +jest.mock('react-redux', () => { + return { + ...jest.requireActual('react-redux'), + useSelector: jest.fn() + }; +}); + +describe('sqle/Order/List', () => { + const projectName = mockProjectInfo.projectName; + const projectID = mockProjectInfo.projectID; + const navigateSpy = jest.fn(); + let RequestUserTipList: jest.SpyInstance; + let RequestInstanceTipList: jest.SpyInstance; + let RequestOrderList: jest.SpyInstance; + let RequestExportOrderList: jest.SpyInstance; + let RequestBatchCancel: jest.SpyInstance; + + const customRender = () => { + return superRender(); + }; + + beforeEach(() => { + (useNavigate as jest.Mock).mockImplementation(() => navigateSpy); + jest.useFakeTimers(); + (useSelector as jest.Mock).mockImplementation((selector) => { + return selector({ + database: { driverMeta: driverMeta } + }); + }); + RequestUserTipList = user.getUserTipList(); + RequestInstanceTipList = instance.getInstanceTipList(); + RequestOrderList = order.getWorkflows(); + RequestExportOrderList = order.exportWorkflow(); + RequestBatchCancel = order.batchCancelWorkflows(); + mockUseCurrentProject(); + mockUseCurrentUser(); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.clearAllTimers(); + cleanup(); + }); + + it('render snap when list page init', async () => { + const { baseElement } = customRender(); + + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestUserTipList).toBeCalledWith({ filter_project: projectName }); + + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestInstanceTipList).toBeCalledWith({ + project_name: projectName + }); + + await act(async () => jest.advanceTimersByTime(300)); + expect(baseElement).toMatchSnapshot; + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when projectArchive is false', async () => { + mockUseCurrentProject({ + projectArchive: false + }); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(baseElement).toMatchSnapshot; + }); + + it('render btn batchCancel when is not Admin', async () => { + mockUseCurrentUser({ + isAdmin: false + }); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when list is empty', async () => { + RequestOrderList.mockImplementation(() => createSpySuccessResponse({})); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + }); + + it('render snap when list api return error', async () => { + RequestOrderList.mockImplementation(() => createSpyFailResponse({})); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + }); + + it('render list column diff data', async () => { + const workflowName = 'demo-workflow_name'; + const workflowId = '1234'; + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: workflowName, + workflow_id: workflowId, + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + } + ], + total_nums: 1 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + expect(baseElement).toMatchSnapshot; + + fireEvent.click(screen.getByText(workflowName)); + await act(async () => jest.advanceTimersByTime(300)); + expect(navigateSpy).toBeCalled(); + expect(navigateSpy).toBeCalledWith( + `/sqle/project/${projectID}/order/${workflowId}` + ); + }); + + it('render filter when cate val change', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + + const OrderStatusSegmented = getAllBySelector( + '.ant-segmented-item-label', + baseElement + ); + expect(OrderStatusSegmented.length).toBe(8); + expect(OrderStatusSegmented[1]).toHaveAttribute('title', '待审核'); + fireEvent.click(OrderStatusSegmented[1]); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalledWith({ + project_name: projectName, + filter_status: 'wait_for_audit', + fuzzy_keyword: '', + page_index: 1, + page_size: 20 + }); + }); + + it('render fuzzy input when input fuzzy val', async () => { + const fuzzyVal = 'fuzzy value'; + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const inputFuzzyEle = getBySelector( + 'input#actiontech-table-search-input', + baseElement + ); + fireEvent.change(inputFuzzyEle, { + target: { value: fuzzyVal } + }); + + await act(async () => { + fireEvent.keyDown(inputFuzzyEle, { + key: 'Enter', + code: 'Enter', + keyCode: 13 + }); + await jest.advanceTimersByTime(300); + }); + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestOrderList).nthCalledWith(2, { + project_name: projectName, + filter_status: undefined, + fuzzy_keyword: fuzzyVal, + page_index: 1, + page_size: 20 + }); + }); + + it('render refresh btn when click refresh', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const refreshIcon = getBySelector('.custom-icon-refresh', baseElement); + fireEvent.click(refreshIcon); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalled(); + }); + + it('render click create btn', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(300)); + + expect(screen.getByText('创建工单')).toBeInTheDocument(); + const extraEle = getBySelector('div.extra', baseElement); + expect(extraEle).toMatchSnapshot(); + const createBtn = getBySelector('a', extraEle); + expect(createBtn).toHaveAttribute( + 'href', + `/sqle/project/${projectID}/order/create` + ); + }); + + it('render click export btn', async () => { + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(300)); + + expect(screen.getByText('导出工单')).toBeInTheDocument(); + fireEvent.click(screen.getByText('导出工单')); + await act(async () => jest.advanceTimersByTime(300)); + expect(baseElement).toMatchSnapshot(); + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestExportOrderList).toBeCalled(); + expect(RequestExportOrderList).toBeCalledWith( + { + filter_create_time_from: undefined, + filter_create_time_to: undefined, + filter_create_user_id: undefined, + filter_current_step_assignee_user_id: undefined, + filter_status: undefined, + filter_subject: undefined, + filter_task_execute_start_time_from: undefined, + filter_task_execute_start_time_to: undefined, + filter_task_instance_name: undefined, + fuzzy_keyword: '', + project_name: projectName + }, + { responseType: 'blob' } + ); + expect(screen.getByText('历史工单导出成功')).toBeInTheDocument(); + }); + + it('render click batch cancel btn when has not closed ', async () => { + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: 'name1', + workflow_id: '1', + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + }, + { + project_name: '700300', + workflow_name: 'name2', + workflow_id: '2', + desc: 'desc demo2', + create_user_name: ['admin', 'test'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_audit' + }, + { + project_name: '700300', + workflow_name: 'name3', + workflow_id: '3', + desc: 'desc demo3', + create_user_name: ['test'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'rejected' + }, + { + project_name: '700300', + workflow_name: 'name4', + workflow_id: '4', + desc: 'desc demo4', + create_user_name: ['admin'], + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'canceled' + } + ], + total_nums: 4 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const checkboxEle = getAllBySelector( + '.ant-checkbox-wrapper .ant-checkbox-input', + baseElement + ); + expect(checkboxEle.length).toBe(5); + fireEvent.click(checkboxEle[0]); + await act(async () => jest.advanceTimersByTime(1000)); + expect( + getAllBySelector( + '.ant-checkbox-wrapper-checked .ant-checkbox-input', + baseElement + ) + ); + expect(checkboxEle.length).toBe(5); + + fireEvent.click(screen.getByText('批量关闭')); + await act(async () => jest.advanceTimersByTime(500)); + expect(screen.getByText('您确认关闭所选工单吗?')).toBeInTheDocument(); + fireEvent.click(screen.getByText('确 认')); + await act(async () => jest.advanceTimersByTime(300)); + expect( + screen.getByText( + '您所选的工单包含不可关闭的工单!(只有工单状态为“处理中”和“已驳回”的工单可以关闭。)' + ) + ).toBeInTheDocument(); + expect(baseElement).toMatchSnapshot(); + }); + + it('render click batch cancel when action success', async () => { + RequestOrderList.mockImplementation(() => + createSpySuccessResponse({ + data: [ + { + project_name: '700300', + workflow_name: 'name1', + workflow_id: '1', + desc: 'desc demo', + create_user_name: 'admin', + create_time: '', + current_step_type: 'sql_execute', + current_step_assignee_user_name_list: [], + status: 'wait_for_execution' + } + ], + total_nums: 1 + }) + ); + const { baseElement } = customRender(); + await act(async () => jest.advanceTimersByTime(9300)); + expect(RequestOrderList).toBeCalled(); + + const checkboxEle = getAllBySelector( + '.ant-checkbox-wrapper .ant-checkbox-input', + baseElement + ); + expect(checkboxEle.length).toBe(2); + fireEvent.click(checkboxEle[0]); + await act(async () => jest.advanceTimersByTime(1000)); + expect( + getAllBySelector( + '.ant-checkbox-wrapper-checked .ant-checkbox-input', + baseElement + ) + ); + expect(checkboxEle.length).toBe(2); + + fireEvent.click(screen.getByText('批量关闭')); + await act(async () => jest.advanceTimersByTime(500)); + expect(screen.getByText('您确认关闭所选工单吗?')).toBeInTheDocument(); + fireEvent.click(screen.getByText('确 认')); + await act(async () => jest.advanceTimersByTime(300)); + expect(baseElement).toMatchSnapshot(); + await act(async () => jest.advanceTimersByTime(3000)); + expect(RequestBatchCancel).toBeCalled(); + expect(RequestBatchCancel).toBeCalledWith({ + project_name: projectName, + workflow_id_list: ['1'] + }); + await act(async () => jest.advanceTimersByTime(3300)); + expect(RequestOrderList).toBeCalled(); + }); +}); From f9e3a5e398fb3e3265888046c78d9128d5a98d33 Mon Sep 17 00:00:00 2001 From: xinbinyan <404928130@qq.com> Date: Wed, 10 Jan 2024 16:39:48 +0800 Subject: [PATCH 02/23] case useCreateOrderFormState --- .../useCreateOrderFormState.test.ts.snap | 45 ++++++++++++ .../test/useCreateOrderFormState.test.ts | 72 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 packages/sqle/src/page/Order/Create/hooks/test/__snapshots__/useCreateOrderFormState.test.ts.snap create mode 100644 packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderFormState.test.ts diff --git a/packages/sqle/src/page/Order/Create/hooks/test/__snapshots__/useCreateOrderFormState.test.ts.snap b/packages/sqle/src/page/Order/Create/hooks/test/__snapshots__/useCreateOrderFormState.test.ts.snap new file mode 100644 index 000000000..1b55a5021 --- /dev/null +++ b/packages/sqle/src/page/Order/Create/hooks/test/__snapshots__/useCreateOrderFormState.test.ts.snap @@ -0,0 +1,45 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render instanceInfo 1`] = ` +Map { + 0 => Object { + "instanceName": "", + }, +} +`; + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render instanceInfo 2`] = ` +Map { + 0 => Object { + "instanceName": "instance name 1", + }, +} +`; + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render ruleTemplates 1`] = ` +Map { + 0 => undefined, +} +`; + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render ruleTemplates 2`] = ` +Map { + 0 => Object { + "dbType": "dbType1", + }, +} +`; + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render schemaList 1`] = ` +Map { + 0 => Array [], +} +`; + +exports[`sqle/Order/Create/hooks/useCreateOrderFormState render schemaList 2`] = ` +Map { + 0 => Array [ + "schema1", + ], +} +`; diff --git a/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderFormState.test.ts b/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderFormState.test.ts new file mode 100644 index 000000000..801d7c865 --- /dev/null +++ b/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderFormState.test.ts @@ -0,0 +1,72 @@ +import { renderHook, act } from '@testing-library/react'; + +import useCreateOrderFormState from '../useCreateOrderFormState'; +import { WorkflowResV2ModeEnum } from '@actiontech/shared/lib/api/sqle/service/common.enum'; + +describe('sqle/Order/Create/hooks/useCreateOrderFormState', () => { + const customRender = () => { + return renderHook(() => useCreateOrderFormState()); + }; + + it('render schemaList', async () => { + const { result } = customRender(); + expect(result.current.schemaList).toMatchSnapshot(); + await act(async () => { + result.current.setSchemaList(new Map([[0, ['schema1']]])); + }); + expect(result.current.schemaList).toMatchSnapshot(); + }); + + it('render ruleTemplates', async () => { + const { result } = customRender(); + expect(result.current.ruleTemplates).toMatchSnapshot(); + await act(async () => { + result.current.setRuleTemplates(new Map([[0, { dbType: 'dbType1' }]])); + }); + expect(result.current.ruleTemplates).toMatchSnapshot(); + }); + + it('render changeSqlModeDisabled', async () => { + const { result } = customRender(); + expect(result.current.changeSqlModeDisabled).toBeFalsy(); + await act(async () => { + result.current.setChangeSqlModeDisabled(true); + }); + expect(result.current.changeSqlModeDisabled).toBeTruthy(); + }); + + it('render currentSqlMode', async () => { + const { result } = customRender(); + expect(result.current.currentSqlMode).toBe(WorkflowResV2ModeEnum.same_sqls); + await act(async () => { + result.current.setCurrentSqlMode(WorkflowResV2ModeEnum.different_sqls); + }); + expect(result.current.currentSqlMode).toBe( + WorkflowResV2ModeEnum.different_sqls + ); + }); + + it('render instanceInfo', async () => { + const { result } = customRender(); + expect(result.current.instanceInfo).toMatchSnapshot(); + await act(async () => { + result.current.setInstanceInfo( + new Map([[0, { instanceName: 'instance name 1' }]]) + ); + }); + expect(result.current.instanceInfo).toMatchSnapshot(); + }); + + it('render auditLoading', async () => { + const { result } = customRender(); + expect(result.current.auditLoading).toBeFalsy(); + await act(async () => { + result.current.startAudit(); + }); + expect(result.current.auditLoading).toBeTruthy(); + await act(async () => { + result.current.finishAudit(); + }); + expect(result.current.auditLoading).toBeFalsy(); + }); +}); From 4b5c0c7ea31e8fc904ca68f0e4a7b76d81d5f987 Mon Sep 17 00:00:00 2001 From: xinbinyan <404928130@qq.com> Date: Wed, 10 Jan 2024 16:46:21 +0800 Subject: [PATCH 03/23] case useCreateOrderSteps --- .../hooks/test/useCreateOrderSteps.test.ts | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderSteps.test.ts diff --git a/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderSteps.test.ts b/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderSteps.test.ts new file mode 100644 index 000000000..50b1e0f8d --- /dev/null +++ b/packages/sqle/src/page/Order/Create/hooks/test/useCreateOrderSteps.test.ts @@ -0,0 +1,38 @@ +import { renderHook, act } from '@testing-library/react'; + +import useCreateOrderSteps from '../useCreateOrderSteps'; + +describe('sqle/Order/Create/hooks/useCreateOrderSteps', () => { + + const customRender = () => { + return renderHook(() => useCreateOrderSteps()); + }; + + it('render change order step val', async () => { + const { result } = customRender(); + expect(result.current.showForm).toBeTruthy(); + expect(result.current.showTasks).toBeFalsy(); + expect(result.current.showResult).toBeFalsy(); + + await act(async () => { + result.current.showTasksAction(); + }); + expect(result.current.showForm).toBeFalsy(); + expect(result.current.showTasks).toBeTruthy(); + expect(result.current.showResult).toBeFalsy(); + + await act(async () => { + result.current.showResultAction(); + }); + expect(result.current.showForm).toBeFalsy(); + expect(result.current.showTasks).toBeFalsy(); + expect(result.current.showResult).toBeTruthy(); + + await act(async () => { + result.current.showFormAction(); + }); + expect(result.current.showForm).toBeTruthy(); + expect(result.current.showTasks).toBeFalsy(); + expect(result.current.showResult).toBeFalsy(); + }) +}); From d93d4b42f244aa4f954cd8b7167265eb316e156b Mon Sep 17 00:00:00 2001 From: xinbinyan <404928130@qq.com> Date: Wed, 10 Jan 2024 17:57:17 +0800 Subject: [PATCH 04/23] case BaseInfoForm --- .../BaseInfoForm/BaseInfoFormItem.test.tsx | 62 +++ .../BaseInfoFormItem.test.tsx.snap | 372 ++++++++++++++++++ .../__snapshots__/index.test.tsx.snap | 148 +++++++ .../Order/Create/BaseInfoForm/index.test.tsx | 31 ++ .../page/Order/Create/BaseInfoForm/index.tsx | 1 + .../hooks/test/useCreateOrderSteps.test.ts | 3 +- packages/sqle/src/page/Order/Create/index.tsx | 1 - .../Order/hooks/test/useAuditOrder.test.tsx | 1 + 8 files changed, 616 insertions(+), 3 deletions(-) create mode 100644 packages/sqle/src/page/Order/Create/BaseInfoForm/BaseInfoFormItem.test.tsx create mode 100644 packages/sqle/src/page/Order/Create/BaseInfoForm/__snapshots__/BaseInfoFormItem.test.tsx.snap create mode 100644 packages/sqle/src/page/Order/Create/BaseInfoForm/__snapshots__/index.test.tsx.snap create mode 100644 packages/sqle/src/page/Order/Create/BaseInfoForm/index.test.tsx create mode 100644 packages/sqle/src/page/Order/hooks/test/useAuditOrder.test.tsx diff --git a/packages/sqle/src/page/Order/Create/BaseInfoForm/BaseInfoFormItem.test.tsx b/packages/sqle/src/page/Order/Create/BaseInfoForm/BaseInfoFormItem.test.tsx new file mode 100644 index 000000000..2594e8486 --- /dev/null +++ b/packages/sqle/src/page/Order/Create/BaseInfoForm/BaseInfoFormItem.test.tsx @@ -0,0 +1,62 @@ +import { Form } from 'antd'; +import { ReactNode } from 'react'; +import { cleanup, act, fireEvent } from '@testing-library/react'; +import { renderWithTheme } from '../../../../testUtils/customRender'; +import { getBySelector } from '@actiontech/shared/lib/testUtil/customQuery'; + +import BaseInfoFormItem from './BaseInfoFormItem'; + +describe('sqle/Order/CreateOrder/BaseInfoFormItem', () => { + const customRender = (params: { slot?: ReactNode } = {}) => { + return renderWithTheme( +
+ + + ); + }; + + beforeEach(() => { + jest.useFakeTimers(); + // ignore error: Warning: `NaN` is an invalid value for the `height` css style property. + jest.spyOn(console, 'error').mockImplementation(() => {}); + }); + + afterEach(() => { + jest.clearAllMocks(); + jest.clearAllTimers(); + (console.error as jest.Mock).mockRestore(); + cleanup(); + }); + + it('render snap when render default item', () => { + const { baseElement } = customRender(); + expect(baseElement).toMatchSnapshot(); + }); + + it('render workflow_subject check validator', async () => { + const { baseElement } = customRender(); + + const subjectEle = getBySelector('#workflow_subject', baseElement); + + fireEvent.input(subjectEle, { + target: { + value: '1234' + } + }); + await act(async () => jest.advanceTimersByTime(1000)); + expect(baseElement).toMatchSnapshot(); + + fireEvent.change(subjectEle, { + target: { + value: '=' + } + }); + await act(async () => jest.advanceTimersByTime(1000)); + expect(baseElement).toMatchSnapshot(); + }); + + it('render when has slot', () => { + const { baseElement } = customRender({ slot: 111 }); + expect(baseElement).toMatchSnapshot(); + }); +}); diff --git a/packages/sqle/src/page/Order/Create/BaseInfoForm/__snapshots__/BaseInfoFormItem.test.tsx.snap b/packages/sqle/src/page/Order/Create/BaseInfoForm/__snapshots__/BaseInfoFormItem.test.tsx.snap new file mode 100644 index 000000000..8c9275b57 --- /dev/null +++ b/packages/sqle/src/page/Order/Create/BaseInfoForm/__snapshots__/BaseInfoFormItem.test.tsx.snap @@ -0,0 +1,372 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`sqle/Order/CreateOrder/BaseInfoFormItem render snap when render default item 1`] = ` + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + 10 / 3000 + + + +
+
+
+
+
+ + +
+
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+ +`; + +exports[`sqle/Order/CreateOrder render form for click audit btn for diff same sql 2`] = ` + + + + + 10 / 3000 + + + +
+ + + + + + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 +
+
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+ +`; + +exports[`sqle/Order/CreateOrder render form for click audit btn for diff same sql 3`] = ` + + + + + 10 / 3000 + + + + + + + + + + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 +
+
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 +
+
+
+
+
+
+
+
+
+
+ + +
+ + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ 工单创建成功 +
+
+ order desc +
+ +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+ +`; + +exports[`sqle/Order/CreateOrder render form for click audit btn for diff same sql 2`] = ` + + + + + 10 / 3000 + + + + + + + + + + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 + + 操作 +
+
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+ +`; + +exports[`sqle/Order/CreateOrder render form for click audit btn for diff same sql 3`] = ` + + + + + 10 / 3000 + + + + + + + + + + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 + + 操作 +
+
+
+
+
+
+
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ order_name_2 +
+
+ order desc +
+
+
+
+
+
+ +
+
+
+
+
+ 数据去重 +
+
+
+ +
+
+
+
+
+
+
+ + 全部等级 + +
+
+
+
+ + 普通(Normal) + +
+
+
+
+ + 提示(Notice) + +
+
+
+
+ + 告警(Warning) + +
+
+
+
+ + 错误(Error) + +
+
+
+
+
+
+ - + + 审核通过率 + +
+
+
+
+ - + + 审核结果评分 + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 序号 + + 执行语句 + + 审核结果 + + 说明 + + 操作 +
+
+
+
+
+
+
+
+
+
+ + +
+ + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + +
+
+

+ 审核SQL语句信息 +

+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + sqle + +
+ + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + 输入SQL语句 + +
+ + + + + + + +
+
+
+ + + + + + + 上传SQL文件 + + +
+
+ + + + + + + 上传ZIP文件 + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ 工单创建成功 +
+
+ order desc +
+ +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ +
+ + + MySQL + +
+
+
+
+
+ mysql-1(10.186.62.13:33061) +
+
+
+
+ mysql-2(10.186.62.13:33062) +
+
+
+
+ xin-test-database(10.186.62.13:33063) +
+
+
+
+ mysql-5(139.196.241.182:33061) +
+
+
+ +
+ + + PostgreSQL + +
+
+
+
+
+ progres-1(10.186.62.13:5432) +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + +
+
+
+
+
+
+
+ dms +
+
+
+
+ sqle +
+
+
+
+ test123 +
+
+
+
+ test +
+
+
+
+
+
+
+
+
+
+
+
+