mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-12 08:52:38 +00:00
147 lines
4.3 KiB
TypeScript
147 lines
4.3 KiB
TypeScript
/*
|
|
* Copyright 2023 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 { EntityType } from '../../constants/Entity.interface';
|
|
import { interceptURL, verifyResponseStatusCode } from '../common';
|
|
|
|
export enum CustomPropertyType {
|
|
STRING = 'String',
|
|
INTEGER = 'Integer',
|
|
MARKDOWN = 'Markdown',
|
|
}
|
|
|
|
export interface CustomProperty {
|
|
name: string;
|
|
type: CustomPropertyType;
|
|
description: string;
|
|
}
|
|
|
|
export const generateCustomProperty = (type: CustomPropertyType) => ({
|
|
name: `cypress${type.toLowerCase()}${Date.now()}`,
|
|
type,
|
|
description: `${type} cypress Property`,
|
|
});
|
|
|
|
export const createCustomPropertyForEntity = ({
|
|
property,
|
|
type,
|
|
}: {
|
|
property: CustomProperty;
|
|
type: EntityType;
|
|
}) => {
|
|
interceptURL('GET', '/api/v1/teams/name/*', 'settingsPage');
|
|
|
|
cy.get('[data-testid="app-bar-item-settings"]').click();
|
|
verifyResponseStatusCode('@settingsPage', 200);
|
|
|
|
interceptURL('GET', `/api/v1/metadata/types/name/*`, 'getEntity');
|
|
|
|
// Selecting the entity
|
|
cy.get(`[data-menu-id*="customAttributes.${type}"]`).scrollIntoView().click();
|
|
|
|
verifyResponseStatusCode('@getEntity', 200);
|
|
|
|
// Add Custom property for selected entity
|
|
cy.get('[data-testid="add-field-button"]').click();
|
|
|
|
cy.get('[data-testid="name"]').clear().type(property.name);
|
|
|
|
cy.get('[data-testid="propertyType"]').click();
|
|
cy.get(`[title="${property.type}"]`).click();
|
|
|
|
cy.get('.toastui-editor-md-container > .toastui-editor > .ProseMirror')
|
|
.clear()
|
|
.type(property.description);
|
|
|
|
// Check if the property got added
|
|
cy.intercept('/api/v1/metadata/types/name/*?fields=customProperties').as(
|
|
'customProperties'
|
|
);
|
|
cy.get('[data-testid="create-button"]').scrollIntoView().click();
|
|
|
|
cy.wait('@customProperties');
|
|
cy.get('.ant-table-row').should('contain', property.name);
|
|
};
|
|
|
|
export const deleteCustomPropertyForEntity = ({
|
|
property,
|
|
type,
|
|
}: {
|
|
property: CustomProperty;
|
|
type: EntityType;
|
|
}) => {
|
|
cy.get('[data-testid="app-bar-item-settings"]').click();
|
|
|
|
interceptURL('GET', `/api/v1/metadata/types/name/*`, 'getEntity');
|
|
interceptURL('PATCH', `/api/v1/metadata/types/*`, 'patchEntity');
|
|
// Selecting the entity
|
|
cy.get(`[data-menu-id*="customAttributes.${type}"]`)
|
|
.first()
|
|
.scrollIntoView()
|
|
.click();
|
|
|
|
verifyResponseStatusCode('@getEntity', 200);
|
|
|
|
cy.get(
|
|
`[data-row-key="${property.name}"] [data-testid="delete-button"]`
|
|
).click();
|
|
|
|
cy.get('[data-testid="modal-header"]').should(
|
|
'contain',
|
|
`Delete Property ${property.name}`
|
|
);
|
|
|
|
cy.get('[data-testid="save-button"]').click();
|
|
|
|
verifyResponseStatusCode('@patchEntity', 200);
|
|
};
|
|
|
|
export const setValueForProperty = (propertyName, value: string) => {
|
|
cy.get('[data-testid="custom_properties"]').click();
|
|
|
|
cy.get('tbody').should('contain', propertyName);
|
|
|
|
// Adding value for the custom property
|
|
|
|
// Navigating through the created custom property for adding value
|
|
cy.get(`[data-row-key="${propertyName}"]`)
|
|
.find('[data-testid="edit-icon"]')
|
|
.scrollIntoView()
|
|
.as('editbutton');
|
|
|
|
cy.get('@editbutton').click();
|
|
|
|
interceptURL('PATCH', `/api/v1/*/*`, 'patchEntity');
|
|
// Checking for value text box or markdown box
|
|
cy.get('body').then(($body) => {
|
|
if ($body.find('[data-testid="value-input"]').length > 0) {
|
|
cy.get('[data-testid="value-input"]').clear().type(value);
|
|
cy.get('[data-testid="inline-save-btn"]').click();
|
|
} else if (
|
|
$body.find(
|
|
'.toastui-editor-md-container > .toastui-editor > .ProseMirror'
|
|
)
|
|
) {
|
|
cy.get('.toastui-editor-md-container > .toastui-editor > .ProseMirror')
|
|
.clear()
|
|
.type(value);
|
|
cy.get('[data-testid="save"]').click();
|
|
}
|
|
});
|
|
verifyResponseStatusCode('@patchEntity', 200);
|
|
cy.get(`[data-row-key="${propertyName}"]`).should(
|
|
'contain',
|
|
value.replace(/\*|_/gi, '')
|
|
);
|
|
};
|