Added unit test for dashboardVersion page (#3933)

Co-authored-by: Sachin Chaurasiya <sachinchaurasiyachotey87@gmail.com>
This commit is contained in:
Shailesh Parmar 2022-04-08 12:47:44 +05:30 committed by GitHub
parent 6de2096f84
commit bba786085e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 438 additions and 5 deletions

View File

@ -131,9 +131,9 @@ const DashboardVersion: FC<DashboardVersionProp> = ({
{ {
key: 'Owner', key: 'Owner',
value: value:
!isUndefined(ownerDiff.added) || !isUndefined(ownerDiff?.added) ||
!isUndefined(ownerDiff.deleted) || !isUndefined(ownerDiff?.deleted) ||
!isUndefined(ownerDiff.updated) !isUndefined(ownerDiff?.updated)
? getDiffValue( ? getDiffValue(
oldOwner?.displayName || oldOwner?.name || '', oldOwner?.displayName || oldOwner?.name || '',
newOwner?.displayName || newOwner?.name || '' newOwner?.displayName || newOwner?.name || ''
@ -215,11 +215,14 @@ const DashboardVersion: FC<DashboardVersionProp> = ({
<div <div
className={classNames( className={classNames(
'tw-px-6 tw-w-full tw-h-full tw-flex tw-flex-col tw-relative' 'tw-px-6 tw-w-full tw-h-full tw-flex tw-flex-col tw-relative'
)}> )}
data-testid="dashboard-version-container">
{isVersionLoading ? ( {isVersionLoading ? (
<Loader /> <Loader />
) : ( ) : (
<div className={classNames('version-data')}> <div
className={classNames('version-data')}
data-testid="version-data">
<EntityPageInfo <EntityPageInfo
isVersionSelected isVersionSelected
deleted={deleted} deleted={deleted}

View File

@ -0,0 +1,214 @@
/*
* Copyright 2021 Collate
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { findByTestId, findByText, render } from '@testing-library/react';
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import DashboardVersion from './DashboardVersion.component';
import { DashboardVersionProp } from './DashboardVersion.interface';
import {
dashboardVersionProp,
mockNoChartData,
mockTagChangeVersion,
} from './dashboardVersion.mock';
jest.mock('../common/rich-text-editor/RichTextEditorPreviewer', () => {
return jest
.fn()
.mockImplementation(() => <div>RichTextEditorPreviewer.component</div>);
});
jest.mock('../common/description/Description', () => {
return jest.fn().mockImplementation(() => <div>Description.component</div>);
});
jest.mock('../common/TabsPane/TabsPane', () => {
return jest.fn().mockImplementation(() => <div>TabsPane.component</div>);
});
jest.mock('../EntityVersionTimeLine/EntityVersionTimeLine', () => {
return jest
.fn()
.mockImplementation(() => <div>EntityVersionTimeLine.component</div>);
});
jest.mock('../common/entityPageInfo/EntityPageInfo', () => {
return jest
.fn()
.mockImplementation(() => <div>EntityPageInfo.component</div>);
});
jest.mock('../Loader/Loader', () => {
return jest.fn().mockImplementation(() => <div>Loader.component</div>);
});
jest.mock('../../utils/EntityVersionUtils', () => ({
getDescriptionDiff: jest.fn(),
getDiffByFieldName: jest.fn().mockImplementation(() => ({
updated: {
name: 'description',
oldValue: '',
newValue: 'test description',
},
})),
getDiffValue: jest.fn(),
getTagsDiff: jest.fn(),
}));
JSON.parse = jest.fn().mockReturnValue([]);
describe('Test DashboardVersion page', () => {
it('Checks if the page has all the proper components rendered', async () => {
const { container } = render(
<DashboardVersion
{...(dashboardVersionProp as unknown as DashboardVersionProp)}
/>,
{
wrapper: MemoryRouter,
}
);
const dashboardVersionContainer = await findByTestId(
container,
'dashboard-version-container'
);
const versionData = await findByTestId(container, 'version-data');
const schemaTable = await findByTestId(container, 'schema-table');
const entityPageInfo = await findByText(
container,
'EntityPageInfo.component'
);
const entityVersionTimeLine = await findByText(
container,
'EntityVersionTimeLine.component'
);
const tabs = await findByText(container, 'TabsPane.component');
const description = await findByText(container, 'Description.component');
const richTextEditorPreviewer = await findByText(
container,
'RichTextEditorPreviewer.component'
);
expect(dashboardVersionContainer).toBeInTheDocument();
expect(versionData).toBeInTheDocument();
expect(schemaTable).toBeInTheDocument();
expect(entityPageInfo).toBeInTheDocument();
expect(entityVersionTimeLine).toBeInTheDocument();
expect(tabs).toBeInTheDocument();
expect(description).toBeInTheDocument();
expect(richTextEditorPreviewer).toBeInTheDocument();
});
it('Checks if the page has all the proper components rendered, if change version is related to tags', async () => {
const { container } = render(
<DashboardVersion
{...(dashboardVersionProp as unknown as DashboardVersionProp)}
currentVersionData={
mockTagChangeVersion as DashboardVersionProp['currentVersionData']
}
/>,
{
wrapper: MemoryRouter,
}
);
const dashboardVersionContainer = await findByTestId(
container,
'dashboard-version-container'
);
const versionData = await findByTestId(container, 'version-data');
const schemaTable = await findByTestId(container, 'schema-table');
const entityPageInfo = await findByText(
container,
'EntityPageInfo.component'
);
const entityVersionTimeLine = await findByText(
container,
'EntityVersionTimeLine.component'
);
const tabs = await findByText(container, 'TabsPane.component');
const description = await findByText(container, 'Description.component');
const richTextEditorPreviewer = await findByText(
container,
'RichTextEditorPreviewer.component'
);
expect(dashboardVersionContainer).toBeInTheDocument();
expect(versionData).toBeInTheDocument();
expect(schemaTable).toBeInTheDocument();
expect(entityPageInfo).toBeInTheDocument();
expect(entityVersionTimeLine).toBeInTheDocument();
expect(tabs).toBeInTheDocument();
expect(description).toBeInTheDocument();
expect(richTextEditorPreviewer).toBeInTheDocument();
});
it('Checks if the page has all the proper components rendered, if the dashboard deleted is undefined', async () => {
const { container } = render(
<DashboardVersion
{...(dashboardVersionProp as unknown as DashboardVersionProp)}
currentVersionData={
mockNoChartData as DashboardVersionProp['currentVersionData']
}
deleted={undefined}
/>,
{
wrapper: MemoryRouter,
}
);
const dashboardVersionContainer = await findByTestId(
container,
'dashboard-version-container'
);
const versionData = await findByTestId(container, 'version-data');
const entityPageInfo = await findByText(
container,
'EntityPageInfo.component'
);
const entityVersionTimeLine = await findByText(
container,
'EntityVersionTimeLine.component'
);
const tabs = await findByText(container, 'TabsPane.component');
const description = await findByText(container, 'Description.component');
expect(dashboardVersionContainer).toBeInTheDocument();
expect(versionData).toBeInTheDocument();
expect(entityPageInfo).toBeInTheDocument();
expect(entityVersionTimeLine).toBeInTheDocument();
expect(tabs).toBeInTheDocument();
expect(description).toBeInTheDocument();
});
it('If version is loading it should show loading component', async () => {
const { container } = render(
<DashboardVersion
{...(dashboardVersionProp as unknown as DashboardVersionProp)}
isVersionLoading
/>,
{
wrapper: MemoryRouter,
}
);
const dashboardVersionContainer = await findByTestId(
container,
'dashboard-version-container'
);
const loader = await findByText(container, 'Loader.component');
expect(dashboardVersionContainer).toBeInTheDocument();
expect(loader).toBeInTheDocument();
});
});

View File

@ -0,0 +1,216 @@
/*
* Copyright 2021 Collate
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* eslint-disable max-len */
export const dashboardVersionProp = {
version: '0.3',
currentVersionData: {
id: '4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8',
name: 'eta_predictions_performance',
displayName: 'ETA Predictions Performance',
fullyQualifiedName: 'sample_superset.eta_predictions_performance',
description: 'test description',
version: 0.3,
updatedAt: 1649337873334,
updatedBy: 'anonymous',
dashboardUrl:
'http://localhost:808/superset/dashboard/eta_predictions_performance/',
charts: [
{
id: '0698ab5d-a122-4b86-a6e5-d10bf3550bd7',
type: 'chart',
name: 'with_description',
description: 'test',
displayName: 'ETA Predictions Accuracy',
deleted: false,
},
{
id: '0698ab5d-a122-4b86-a6e5-d10bf3550bd7',
type: 'chart',
name: 'without_description',
description: '',
displayName: 'ETA Predictions Accuracy',
deleted: false,
},
],
owner: {
id: '067319fd-fa77-4b55-b481-f438489b0931',
type: 'user',
name: 'aaron_johnson0',
displayName: 'Aaron Johnson',
deleted: false,
},
tags: [],
service: {
id: 'b1e14bf6-9078-40d7-abf5-21a5fcb056bd',
type: 'dashboardService',
name: 'sample_superset',
deleted: false,
},
serviceType: 'Superset',
changeDescription: {
fieldsAdded: [
{
name: 'owner',
newValue:
'{"id":"067319fd-fa77-4b55-b481-f438489b0931","type":"user","name":"aaron_johnson0","displayName":"Aaron Johnson","deleted":false}',
},
],
fieldsUpdated: [],
fieldsDeleted: [],
previousVersion: 0.2,
},
deleted: false,
},
isVersionLoading: false,
owner: {
name: 'Aaron Johnson',
id: '067319fd-fa77-4b55-b481-f438489b0931',
type: 'user',
},
slashedDashboardName: [
{
name: 'sample_superset',
url: '/service/dashboardServices/sample_superset',
imgSrc: '/service-icon-superset.png',
},
{
name: 'ETA Predictions Performance',
url: '',
activeTitle: true,
},
],
versionList: {
entityType: 'dashboard',
versions: [
'{"id":"4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8","name":"eta_predictions_performance","displayName":"ETA Predictions Performance","fullyQualifiedName":"sample_superset.eta_predictions_performance","description":"test description","version":0.3,"updatedAt":1649337873334,"updatedBy":"anonymous","dashboardUrl":"http://localhost:808/superset/dashboard/eta_predictions_performance/","charts":[{"id":"0698ab5d-a122-4b86-a6e5-d10bf3550bd7","type":"chart","name":"sample_superset.210","description":"","displayName":"ETA Predictions Accuracy","deleted":false}],"owner":{"id":"067319fd-fa77-4b55-b481-f438489b0931","type":"user","name":"aaron_johnson0","displayName":"Aaron Johnson","deleted":false},"tags":[],"service":{"id":"b1e14bf6-9078-40d7-abf5-21a5fcb056bd","type":"dashboardService","name":"sample_superset","deleted":false},"serviceType":"Superset","changeDescription":{"fieldsAdded":[{"name":"owner","newValue":"{\\"id\\":\\"067319fd-fa77-4b55-b481-f438489b0931\\",\\"type\\":\\"user\\",\\"name\\":\\"aaron_johnson0\\",\\"displayName\\":\\"Aaron Johnson\\",\\"deleted\\":false}"}],"fieldsUpdated":[],"fieldsDeleted":[],"previousVersion":0.2},"deleted":false}',
'{"id": "4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8", "name": "eta_predictions_performance", "tags": [], "charts": [{"id": "0698ab5d-a122-4b86-a6e5-d10bf3550bd7", "name": "sample_superset.210", "type": "chart", "deleted": false, "description": "", "displayName": "ETA Predictions Accuracy"}], "deleted": false, "service": {"id": "b1e14bf6-9078-40d7-abf5-21a5fcb056bd", "name": "sample_superset", "type": "dashboardService", "deleted": false}, "version": 0.2, "updatedAt": 1649337730944, "updatedBy": "anonymous", "description": "test description", "displayName": "ETA Predictions Performance", "serviceType": "Superset", "dashboardUrl": "http://localhost:808/superset/dashboard/eta_predictions_performance/", "changeDescription": {"fieldsAdded": [], "fieldsDeleted": [], "fieldsUpdated": [{"name": "description", "newValue": "test description", "oldValue": ""}], "previousVersion": 0.1}, "fullyQualifiedName": "sample_superset.eta_predictions_performance"}',
'{"id": "4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8", "name": "eta_predictions_performance", "tags": [], "charts": [{"id": "0698ab5d-a122-4b86-a6e5-d10bf3550bd7", "name": "sample_superset.210", "type": "chart", "deleted": false, "description": "", "displayName": "ETA Predictions Accuracy"}], "deleted": false, "service": {"id": "b1e14bf6-9078-40d7-abf5-21a5fcb056bd", "name": "sample_superset", "type": "dashboardService", "deleted": false}, "version": 0.1, "updatedAt": 1649329479303, "updatedBy": "anonymous", "description": "", "displayName": "ETA Predictions Performance", "serviceType": "Superset", "dashboardUrl": "http://localhost:808/superset/dashboard/eta_predictions_performance/", "fullyQualifiedName": "sample_superset.eta_predictions_performance"}',
],
},
deleted: false,
};
export const mockTagChangeVersion = {
id: '4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8',
description: 'test description',
version: 0.4,
updatedAt: 1649354506617,
updatedBy: 'anonymous',
dashboardUrl:
'http://localhost:808/superset/dashboard/eta_predictions_performance/',
charts: [
{
id: '0698ab5d-a122-4b86-a6e5-d10bf3550bd7',
type: 'chart',
name: 'sample_superset.210',
description: 'test',
displayName: 'ETA Predictions Accuracy',
deleted: false,
},
],
owner: {
id: '067319fd-fa77-4b55-b481-f438489b0931',
type: 'user',
},
tags: [
{
tagFQN: 'PersonalData.Personal',
description:
'Data that can be used to directly or indirectly identify a person.',
source: 'Tag',
labelType: 'Manual',
state: 'Confirmed',
},
{
tagFQN: 'Tier.Tier1',
description:
'Data that can be used to directly or indirectly identify a person.',
source: 'Tag',
labelType: 'Manual',
state: 'Confirmed',
},
],
service: {
id: 'b1e14bf6-9078-40d7-abf5-21a5fcb056bd',
type: 'dashboardService',
name: 'sample_superset',
deleted: false,
},
serviceType: 'Superset',
changeDescription: {
fieldsAdded: [
{
name: 'tags',
newValue:
'[{"tagFQN":"PersonalData.Personal","source":"Tag","labelType":"Manual","state":"Confirmed"}]',
},
],
fieldsUpdated: [],
fieldsDeleted: [],
previousVersion: 0.3,
},
deleted: false,
};
export const mockNoChartData = {
id: '4ee70a0c-6ec9-4c93-a91c-4a57d65bebc8',
description: 'test description',
version: 0.4,
updatedAt: 1649354506617,
updatedBy: 'anonymous',
dashboardUrl:
'http://localhost:808/superset/dashboard/eta_predictions_performance/',
owner: {
id: '067319fd-fa77-4b55-b481-f438489b0931',
type: 'user',
},
tags: [
{
tagFQN: 'PersonalData.Personal',
description:
'Data that can be used to directly or indirectly identify a person.',
source: 'Tag',
labelType: 'Manual',
state: 'Confirmed',
},
{
tagFQN: 'Tier.Tier1',
description:
'Data that can be used to directly or indirectly identify a person.',
source: 'Tag',
labelType: 'Manual',
state: 'Confirmed',
},
],
service: {
id: 'b1e14bf6-9078-40d7-abf5-21a5fcb056bd',
type: 'dashboardService',
name: 'sample_superset',
deleted: false,
},
serviceType: 'Superset',
changeDescription: {
fieldsAdded: [
{
name: 'tags',
newValue:
'[{"tagFQN":"PersonalData.Personal","source":"Tag","labelType":"Manual","state":"Confirmed"}]',
},
],
fieldsUpdated: [],
fieldsDeleted: [],
previousVersion: 0.3,
},
deleted: false,
};