test(ui): cypress tests to cover health page of OpenMetadata (#15861)

* test(ui): cypress tests to cover health page of OpenMetadata

* added wait for api
This commit is contained in:
Chirag Madlani 2024-04-12 16:44:53 +05:30 committed by GitHub
parent 8447cf0192
commit e91f846f5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 74 additions and 279 deletions

View File

@ -1,262 +0,0 @@
/*
* Copyright 2022 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 { BASE_URL } from './constants';
import {
GlobalSettingOptions,
GlobalSettingsMenuCategory,
} from './settings.constant';
export const LEFT_PANEL_DETAILS = {
tables: {
testid: '[data-testid="tables"]',
url: `${BASE_URL}/explore/tables`,
},
topics: {
testid: '[data-testid="topics"]',
url: `${BASE_URL}/explore/topics`,
},
dashboard: {
testid: '[data-testid="dashboards"]',
url: `${BASE_URL}/explore/dashboards`,
},
pipelines: {
testid: '[data-testid="pipelines"]',
url: `${BASE_URL}/explore/pipelines`,
},
mlmodels: {
testid: '[data-testid="mlmodels"]',
url: `${BASE_URL}/explore/mlmodels`,
},
services: {
testid: '[data-testid="service"]',
url: `${BASE_URL}/settings/services/databases`,
},
users: {
testid: '[data-testid="user"]',
url: `${BASE_URL}/settings/members/users`,
},
teams: {
testid: '[data-testid="teams"]',
url: `${BASE_URL}/settings/members/teams`,
},
testSuites: {
testid: '[data-testid="test-suite"]',
url: `${BASE_URL}/test-suites`,
},
containers: {
testid: '[data-testid="containers"]',
url: `${BASE_URL}/explore/containers`,
},
glossaryTerms: {
testid: '[data-testid="glossary-terms"]',
url: `${BASE_URL}/glossary`,
},
};
export const NAVBAR_DETAILS = {
explore: {
testid: 'app-bar-item-explore',
url: `${BASE_URL}/explore/tables`,
},
quality: {
testid: `observability`,
subMenu: 'app-bar-item-data-quality',
url: `${BASE_URL}/data-quality`,
},
incidentManager: {
testid: `observability`,
subMenu: 'app-bar-item-incident-manager',
url: `${BASE_URL}/incident-manager`,
},
insights: {
testid: 'app-bar-item-data-insight',
url: `${BASE_URL}/data-insights`,
},
glossary: {
testid: 'governance',
subMenu: `app-bar-item-glossary`,
url: `${BASE_URL}/glossary`,
},
tags: {
testid: 'governance',
subMenu: 'app-bar-item-tags',
url: `${BASE_URL}/tags/`,
},
settings: {
testid: 'app-bar-item-settings',
url: `${BASE_URL}/settings`,
},
profile: {
testid: 'dropdown-profile',
subMenu: 'user-name',
url: `${BASE_URL}/users/admin`,
},
};
export const SETTINGS_PAGE_OPTIONS = {
// Services
databases: {
testid: GlobalSettingOptions.DATABASES,
url: `${BASE_URL}/settings/services/databases`,
},
messaging: {
testid: GlobalSettingOptions.MESSAGING,
url: `${BASE_URL}/settings/services/messaging`,
},
dashboard: {
testid: GlobalSettingOptions.DASHBOARDS,
url: `${BASE_URL}/settings/services/dashboards`,
},
pipeline: {
testid: GlobalSettingOptions.PIPELINES,
url: `${BASE_URL}/settings/services/pipelines`,
},
mlmodel: {
testid: GlobalSettingOptions.MLMODELS,
url: `${BASE_URL}/settings/services/mlmodels`,
},
storages: {
testid: GlobalSettingOptions.STORAGES,
url: `${BASE_URL}/settings/services/storages`,
},
searchService: {
testid: GlobalSettingOptions.SEARCH,
url: `${BASE_URL}/settings/services/search`,
},
metadata: {
testid: GlobalSettingOptions.METADATA,
url: `${BASE_URL}/settings/services/metadata`,
},
// Integrations
applications: {
testid: GlobalSettingOptions.APPLICATIONS,
url: `${BASE_URL}/settings/apps`,
},
bots: {
testid: GlobalSettingOptions.BOTS,
url: `${BASE_URL}/settings/bots`,
},
// Notification
notification: {
testid: GlobalSettingsMenuCategory.NOTIFICATIONS,
url: `${BASE_URL}/settings/notifications`,
},
// Teams User Management
users: {
testid: GlobalSettingOptions.USERS,
url: `${BASE_URL}/settings/members/users`,
},
teams: {
testid: GlobalSettingOptions.TEAMS,
url: `${BASE_URL}/settings/members/teams/Organization`,
},
admins: {
testid: GlobalSettingOptions.ADMINS,
url: `${BASE_URL}/settings/members/admins`,
},
persona: {
testid: GlobalSettingOptions.PERSONA,
url: `${BASE_URL}/settings/members/persona`,
},
// Access Control
roles: {
testid: GlobalSettingOptions.ROLES,
url: `${BASE_URL}/settings/access/roles`,
},
policies: {
testid: GlobalSettingOptions.POLICIES,
url: `${BASE_URL}/settings/access/policies`,
},
// Open-metadata
customizeLandingPage: {
testid: GlobalSettingOptions.CUSTOMIZE_LANDING_PAGE,
url: `${BASE_URL}/settings/openMetadata/customizeLandingPage`,
},
email: {
testid: GlobalSettingOptions.EMAIL,
url: `${BASE_URL}/settings/openMetadata/email`,
},
customLogo: {
testid: GlobalSettingOptions.CUSTOM_LOGO,
url: `${BASE_URL}/settings/openMetadata/customLogo`,
},
loginConfiguration: {
testid: GlobalSettingOptions.LOGIN_CONFIGURATION,
url: `${BASE_URL}/settings/openMetadata/loginConfiguration`,
},
// CustomProperties
customPropertiesTable: {
testid: GlobalSettingOptions.TABLES,
url: `${BASE_URL}/settings/customProperties/tables`,
isCustomProperty: true,
},
customPropertiesTopics: {
testid: GlobalSettingOptions.TOPICS,
url: `${BASE_URL}/settings/customProperties/topics`,
isCustomProperty: true,
},
customPropertiesDashboards: {
testid: GlobalSettingOptions.DASHBOARDS,
url: `${BASE_URL}/settings/customProperties/dashboards`,
isCustomProperty: true,
},
customPropertiesPipelines: {
testid: GlobalSettingOptions.PIPELINES,
url: `${BASE_URL}/settings/customProperties/pipelines`,
isCustomProperty: true,
},
customPropertiesMlModels: {
testid: GlobalSettingOptions.MLMODELS,
url: `${BASE_URL}/settings/customProperties/mlmodels`,
isCustomProperty: true,
},
customPropertiesContainers: {
testid: GlobalSettingOptions.CONTAINERS,
url: `${BASE_URL}/settings/customProperties/containers`,
isCustomProperty: true,
},
customPropertiesSearchIndex: {
testid: GlobalSettingOptions.SEARCH_INDEXES,
url: `${BASE_URL}/settings/customProperties/searchIndexes`,
isCustomProperty: true,
},
customPropertiesStoredProcedure: {
testid: GlobalSettingOptions.STORED_PROCEDURES,
url: `${BASE_URL}/settings/customProperties/storedProcedures`,
isCustomProperty: true,
},
customPropertiesGlossaryTerm: {
testid: GlobalSettingOptions.GLOSSARY_TERM,
url: `${BASE_URL}/settings/customProperties/glossaryTerm`,
isCustomProperty: true,
},
customPropertiesDatabases: {
testid: GlobalSettingOptions.DATABASES,
url: `${BASE_URL}/settings/customProperties/databases`,
isCustomProperty: true,
},
customPropertiesDatabaseSchema: {
testid: GlobalSettingOptions.DATABASE_SCHEMA,
url: `${BASE_URL}/settings/customProperties/databaseSchemas`,
isCustomProperty: true,
},
};

View File

@ -60,6 +60,7 @@ export enum GlobalSettingOptions {
ADD_DATA_INSIGHT_REPORT_ALERT = 'add-data-insight-report',
EDIT_DATA_INSIGHT_REPORT_ALERT = 'edit-data-insight-report',
LOGIN_CONFIGURATION = 'loginConfiguration',
OPENMETADATA_STATUS = 'openmetadataStatus',
CUSTOMIZE_LANDING_PAGE = 'customizeLandingPage',
TOPICS = 'topics',
CONTAINERS = 'containers',

View File

@ -0,0 +1,49 @@
/*
* Copyright 2024 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 { interceptURL, verifyResponseStatusCode } from '../../common/common';
import { GlobalSettingOptions } from '../../constants/settings.constant';
describe('Health Check for Openmetadata', () => {
before(() => {
cy.login();
});
it('All 5 checks should be successful', () => {
interceptURL('GET', '/api/v1/system/status', 'getOMStatus');
cy.settingClick(GlobalSettingOptions.OM_HEALTH);
verifyResponseStatusCode('@getOMStatus', 200);
cy.get('[data-testid="database"] .success-status').should(
'have.text',
'Success'
);
cy.get('[data-testid="searchInstance"] .success-status').should(
'have.text',
'Success'
);
cy.get('[data-testid="pipelineServiceClient"] .success-status').should(
'have.text',
'Success'
);
cy.get('[data-testid="jwks"] .success-status').should(
'have.text',
'Success'
);
cy.get('[data-testid="migrations"] .success-status').should(
'have.text',
'Success'
);
});
});

View File

@ -11,6 +11,7 @@
* limitations under the License.
*/
import { InfoCircleOutlined } from '@ant-design/icons';
import Icon from '@ant-design/icons/lib/components/Icon';
import { Collapse, Divider, Space, Tooltip, Typography } from 'antd';
import classNames from 'classnames';
import { isUndefined } from 'lodash';
@ -85,39 +86,45 @@ const ConnectionStepCard = ({
</Typography.Text>
)}
{success && (
<Space size={4}>
<div className="d-flex gap-2 align-center">
<Typography.Text className="success-status">
{`${t('label.success')}`}
</Typography.Text>
<SuccessIcon data-testid="success-badge" height={20} width={20} />
</Space>
<Icon
component={SuccessIcon}
data-testid="success-badge"
style={{ fontSize: '20px' }}
/>
</div>
)}
{isMandatoryStepsFailing && (
<Space size={4}>
<div className="d-flex gap-2 align-center">
<Typography.Text className="failure-status">
{`${t('label.failed')}`}
</Typography.Text>
<FailIcon data-testid="fail-badge" height={20} width={20} />
</Space>
<Icon
component={FailIcon}
data-testid="fail-badge"
style={{ fontSize: '20px' }}
/>
</div>
)}
{isNonMandatoryStepsFailing && (
<Space align="center" size={4}>
<div className="d-flex gap-2 align-center">
<Typography.Text className="warning-status">
{`${t('label.attention')}`}
</Typography.Text>
<AttentionIcon
<Icon
component={AttentionIcon}
data-testid="warning-badge"
height={20}
width={20}
style={{ fontSize: '20px' }}
/>
</Space>
</div>
)}
{isSkipped && (
<Space size={4}>
<Typography.Text className="skipped-status">{`${t(
'label.skipped'
)}`}</Typography.Text>
</Space>
<Typography.Text className="skipped-status">{`${t(
'label.skipped'
)}`}</Typography.Text>
)}
</Space>
</div>

View File

@ -85,7 +85,7 @@ const OmHealthPage = () => {
validationStatus,
(validation, key) =>
validation && (
<Col key={key} span={24}>
<Col data-testid={key} key={key} span={24}>
<ConnectionStepCard
isTestingConnection={false}
testConnectionStep={{