Sriharsha Chintalapani 5571851e53
Pluggable API/Features Limits (#16782)
* Limits

* Limits

* - Mismatched Types

* Update Limits config response

* Update Limits feature response

* Limits

* Limits

* - Mismatched Types

* Update Limits config response

* Update Limits feature response

* Limits: add entity resource enforcer

* Limits: fix rebase

* update limits enforcement

* Add OperationContext to limits

* chore: Bump versions to `1.4.0`

* chore: Bump Ingestion Versions to `1.4.0.1` for Release

* chore: Bump Ingestion Versions to `1.4.0.1`  in Dockerfiles for Release

* Remove Retry From Abstract Event Consumer (#16405)

(cherry picked from commit f8ed079731cc238dc136306fe018c5df35dd2f3b)

* Fix Migrations: Add postgres migrations (#16403)

(cherry picked from commit 9416a7ac5fa8fd9695063b108501790d813e8e6e)

* Add Null Check for isAdmin (#16407)

* Remove Retry From Abstract Event Consumer

* - Add Check for null Or Empty in isAdmin

* - Fix Test

(cherry picked from commit fe2db2d63c5495b6c288d4252a19ab77481b6de0)

* Fix OpenLineage ingestor (#16416)

* Fix OpenLineage ingestor

* py format

---------

Co-authored-by: ulixius9 <mayursingal9@gmail.com>

* Minor: added whats new for 1.4.1 (#16420)

* Minor: added whats new for 1.4.1

* added note in to whats new

* Fix SSL issue (#16412)

* chore: Bump Versions for `1.4.1` Release

* chore(release): Prepare Branch for `1.4.2`

* [MINOR] partition migration issue with redshift servics (#16452)

* fix: partition migration issue with redshift servics

* chore: typo in sql comment

(cherry picked from commit 451d73593e813151c24f2c1d17efb3dcdebb71c8)

* minor(ui): update what's new for 1.4.2 (#16457)

(cherry picked from commit d55981adfd2321de706e4a043828bb473a4b05f1)

* fix:  ingestion for dbt > 1.8.0 resource_type is not an enum (#16415)

* fix: resource_type is not an enum

* feat: add log to display finis

* improve readability

* use getattr to be compatible

* format

* Add Cache Query Param for Limits

* Only Parse view  query (#16470)

* add limit check during user creation via PUT

* add limit check during user creation via PUT

* MINOR: Kafka Setup SSL Arg Fix (#16469)

* Fix#16404 - Show Node level lineage by default (#16445)

* default to node layer

* update cypress

* code cleanup

* fix cypress

(cherry picked from commit f0cda8464f34a21f45f18fa557e980fb2f105d8e)

* Invalidate count of data asset after hard delete. add limit exception to ingestion client

* - Remove Change Description from Lineage (#16488)

(cherry picked from commit 9e5c5529a84dfc781382b3a3b6abd80ee41f11f5)

* - Non Indexable fields should be remvoed at the end (#16499)

(cherry picked from commit f0b0f7a9426ca601d3bfee3989d4ce47e732a7af)

* fix announcement not redirect from landing page (#16506)

* fix announcement not redirect from landing page

* minor changes

* change in cypress test

(cherry picked from commit ee7cddd169a3a1fb1e598e80035c2fc15a5a129b)

* Fix Schema Field Null Issue (#16510)

(cherry picked from commit 022772943f1b33f6230cb35547d1da6acfaf6cfa)

* feat(ui): limits integration with application (#16206)

* feat(ui): limits integration with application

* support pipelineSchedules via limit api

* enforce limit to all the modules

* update banner styling

* update

* support disable option for ManageButton

* limit version

* fix spotlight

* update tests

* Add name and version history to resource limits
Refactor the getEntityIcon function and add new icon mappings

* limit version

* hide access token tab

* fix version for all the entity

* fix tests

* fix DQ tests

* Add fallback for the icon

* Revert the fallback icon changes

* Apply the limit to the add ingestion button in the service details page

* Fix the data quality tab add test button not working

* fix banner styling

* minor fix

* Fix ingestion component unit test

* Add InlineAlert component

* update entityNameLabels mapping object

* Fix the incorrect link in LimitBanner

* update pricing page url

* Create the GlobalSettingsClassBase

* Update URLs for pricing page and upgrade options

* fix global settings uncaught error

* add parameters to the resource limit API

* implement inline alerts for service and alert creation form

* update PRIVILEGES for docker

* fix layout issues

* fix tests

---------

Co-authored-by: Aniket Katkar <aniketkatkar97@gmail.com>

* Add token limitations

* Add token limitations

* Add appType as part of schema in ingestion pipeline (#16519)

* #16489: fix the redirect issue to new tab for tags and glossary (#16512)

* fix the redirect issue to new tab for tags and glossary

* fix the redirect on cancel icon and unit test issue

* changes as per comments

(cherry picked from commit 8d312f0853609cfef260739cf789d459838a3421)

* Fix  #16229 - Tag and Service filters for test cases (#16484)

* fix: added test case support for tags (inherit from table/column)]"

* feat: add tag and service filter for test cases

* feat: add tier query param

* fix: tests

(cherry picked from commit 6b00dde90285924445567ee7c396c89f0fcf3f1d)

* fix: None type is not iterable (#16496)

(cherry picked from commit 656da03b14ca24171cf7924b9dd33663e6bed423)

* minor(ui): refresh token for OIDC SSO (#16483)

* minor(ui): refresh token for OIDC SSO

* remove frame window timeout issue

* increase iFrame timeout for oidc

(cherry picked from commit 1a6c4c972052836a9b3cfa273b7ea1aa3202eafe)

* feat(ui): support tag & tier filter for test case (#16502)

* feat(ui): support tag & tier filter for test case

* fix tag filter

* allow single select for tier

* added service name filter

* update cypress for tags, tier & service

* add specific add for filters

* fix tier api call

(cherry picked from commit 5b71d79e8ac2d08a154882dfe71b9b3a0f73bffc)

* minor: sanitize activity feed editor content (#16533)

* Add appType as part of schema in ingestion pipeline (#16519)

* Fixed quicksight conn (#16537)

* fix: saml auth for new user not created (#16543)

* fix: saml auth for new user not created

* doc: add comment

* Fix#16491 -  fix lineage edge description update (#16538)

* fix lineage edge description update

* fix tests

(cherry picked from commit dff0aa8dbedcd4064ad63765cadda65bb998772e)

* CYPRESS: fix announcement cypress (#16536)

* fix announcement cypress

* changes as per comments

* fix the cypress failure

(cherry picked from commit fcb87b5866ba06aa7a6db516677e311c24053db7)

* [MINOR] Fix Test Failure for EventRegistration

* [MINOR] Fix Test Failure for EventRegistration

* [MINOR] Fix Test Failure for EventRegistration

[MINOR] Fix Test Failure for EventRegistration

* Fix Event Handlers registration Issue (#16544)

* Fix Event Handlers Issue

* Review Comments

(cherry picked from commit d374e48b7938e8ad3514dc5cf8dff619a12595e3)

* [MINOR] Fix Test Failure for EventRegistration

(cherry picked from commit 4563ad4fd10f9790c21fe744d8fc131ebd028ac8)

* Fix Topic Schema missing messageSchema (#16545)

(cherry picked from commit b612dd90c07f564d38392b1ccfe0de1505a4867b)

* Add limits exception cache in rest client

* MINOR: Ignore Cluster Information from columns (#16495)

* minor: improve the block editor initial content history (#16540)

* Minor: fixed data quality page type issue (#16556)

* #16521: fix issue in userProfilePage for roles. teams and displayName (#16527)

* fix update on roles and backlink them in user profile page

* fix teams, displayName and profile pic issue

* sonar fix

* fix cypress issue

* minor changes

(cherry picked from commit 98945cb2db87ebb325d3a72131f049abffcba345)

* Empty quick filters (#16402)

* initial commit for empty quick filters

* update progress

* fix field title

* cleanup

* add tests

* unit tests

* fix encoding of search query

* add cypress tests

* add cypress

* fix flaky cypress

* fix review comments

* revert tooltip changes

* fix tests

* fix tests

(cherry picked from commit 5930cd7a7a4bef73f6850848c85118eb64843e2d)

* Fix #16278 : Search to display Draft glossaryTerms on Explore page (#16462)

* Fix #16278 : Search to display Draft glossaryTerms as well on Explore page

* add term status quick filter

* change aggregation key for status field

* change aggregation key for status field

* add lowercase_normalizer in status filed for aggregate api

* add cypress tests

* fix cypress

---------

Co-authored-by: karanh37 <karanh37@gmail.com>
Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com>
(cherry picked from commit ae5e9d61cc9e6a39d65972987de9149a421395b1)

* [FIX] GlossaryTerm reviewers should be user or team only (#16372)

* add teams as reviewer

* Check Users to be reviewers

* Reviewers can be a team or user

* Fix check by id or name

* Review can be team or user both

* Validate Reviewers

* add multi select control

* - Fix Reviewers

* - Centralize Reviewer Relationship to EntityRepository

* - Sort

* add team as reviewer for glossary terms

* locales

* cleanup

* - Update Reviewer should remove existing reviewers

* fix selectable owner control

* fix code smells

* fix reviewer issue

* add glossary cypress

* fix patch issue on reviewers set to null

* update cypress tests

* fix cypress

* fix cypress

* fix reviewers in glossary task and supported cypress

* fix pytest

* Fix

* fix cypress

* fix code smells

* Inherited Reviewers need to be present always

* filter out inherited users

* fix cypress

* fix backend tests failure

* fix backend tests failure -checkstyle

* restrict owner to accept task in case of reviewer present

* fix pytest

---------

Co-authored-by: karanh37 <karanh37@gmail.com>
Co-authored-by: Pere Miquel Brull <peremiquelbrull@gmail.com>
Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com>
Co-authored-by: Ashish Gupta <ashish@getcollate.io>
Co-authored-by: ulixius9 <mayursingal9@gmail.com>
Co-authored-by: sonikashah <sonikashah94@gmail.com>
(cherry picked from commit 9ec3d94e3b8445e63a7d77239c92c92a32536bf2)

* Add testSuite tags, domain field and check for TestCase limits

* fix owner not showing after refersh in teams page (#16567)

(cherry picked from commit 119fcf8959732a980b75e1f795a9f2dc5288cd27)

* [ISSUE-16503] Fix createUser to use EntityResource (#16549)

* Fix createUser to use EntityResource

* fix broken tests

* Fix Tests - 3

(cherry picked from commit aeb020ae3b0cbab3a2ee5995c61480cdd1eae405)

* what's new for 1.4.2 (#16568)

(cherry picked from commit c86468d9929e433922886852381269b46d69c832)

* address feedbacks

* fix error for bots page

* update banner text

* allow force fetch limit

* fix ingestion schedule

* Revert "Merge branch '1.4.2' into limits"

This reverts commit 8e965207a23ba527d0f5ba91463c1869077bf091, reversing
changes made to 4d16531965fb0d489a4afdebd45ab5b7f3d1eb5c.

* Merge 1.4.2 (#16578)

* fix explore page conflicts

* fix tests

---------

Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com>
Co-authored-by: Chira Madlani <chirag@getcollate.io>

* fix subheader

* Updating glossary reviewers should propagate reviewers in glossary term (#16580)

* highlight inherited reviewer in glossary

* locales

* use glossary name for search query

* fix glossary version cypress

* add union datatype for subfields

* Adding reviewer to glossary also adds them as an assignee to the task

* add glossary approval cypress

---------

Co-authored-by: sonikashah <sonikashah94@gmail.com>
(cherry picked from commit 4c8bf1cac14074df87dafe7a719e2795b0a29895)

* Update documentation for Search Index apis (#16539)

(cherry picked from commit d3123c49143652015c416d271d9fd0f9cfa9e324)

* cypress: fixed flakiness and announcment cypress (#16579)

* fetch latest limit for create / delete operations

* guard datAsset limit got topic, dashboard, mlmodel etc

* Fix: Ensure correct index mapping in Elasticsearch for clusterAlias (#16589)

* Fix: Ensure correct index mapping in Elasticsearch for clusterAlias

* Fix: Ensure correct index mapping in Elasticsearch for clusterAlias

(cherry picked from commit 8723b8c36afe31410c31d1ebbdafe7b1770921fa)

* cypress: fixed cypress AUT for mysql (#16446)

* cypress: fixed cypress AUT for mysql

* minor fix

* skip announcment redirection cypress

* Minor: Ensure correct index mapping in Elasticsearch for clusterAlias (#16598)

(cherry picked from commit 04543722a6f6e2b1eaf7a451ebb1c176862bc346)

* Fix Postgres Application listing (#16600)

* Fix Postgres Application listing

* Fix Listing

(cherry picked from commit 77dfe1f6af53d187ff7a61fdb1e1416de7178f5a)

* fix limit related issue

* Fix Automations limits invalidation during the uninstall

* cypress: fixed 1.4.2 AUT cypress (#16602)

* cypress: fixed 1.4.2 AUT cypress

* fix cypress around announcement,user,glossary, lineage and mydata

* searchIndexApplication fix and minor changes

---------

Co-authored-by: Ashish Gupta <ashish@getcollate.io>

* test: add updateJWTTokenExpiryTime util (#16606)

(cherry picked from commit 8c173bed6a279cb0a648bd30632ea6ebdf4a2a90)

* OSS changes for adding automator cypress tests (#16611)

* Fix Test Suite Filter (#16615)

Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com>
(cherry picked from commit 3db41f08e27f388495040e5b23cc7bee5ae665f1)

* MINOR: Fix Profiler for SSL Enabled Source (#16613)

* Add Test Suite SSL (#16619)

* MINOR: Fix ssl connection in usage & lineage (#16625)

* Fix owner notification (#16629)

* - Fix Task notification not getting sent to owners

* - Fix Task notification not getting sent to owners

(cherry picked from commit cc2d581eb0524604b6dcf0523e9ca96e0b8a6ce3)

* chore(release): Prepare Branch for `1.4.3`

* - Fix User Signup (#16667)

(cherry picked from commit b4cba8a850ecd7a25aeff6ca7dea0dc432d43d86)

* - Fix User Signup - p2

(cherry picked from commit d9ae6f6db9891f8e9bf7ad49c561a71dd50103da)

* - Update What's new (#16669)

- fix vulnerability

(cherry picked from commit 1dcb1bd46f9da49764f4c61a7ac5048dd2fa956b)

* Minor: Fix incorrect alert on signup page (#16666)

* Fix Application enforceLimits during install

* Wrap the add test button with limits wrapper for column profile tab

* fix errors

* fix tests

* fix pylint

* fix tests

* fix limits

* pylint

* fix schedule options

* fix glossary spec failure

* Add domain & tags to testSuite

* Update airflow-apis-tests-3_9.yml

---------

Co-authored-by: mohitdeuex <mohit.y@deuexsolutions.com>
Co-authored-by: Chira Madlani <chirag@getcollate.io>
Co-authored-by: Pablo Takara <pjt1991@gmail.com>
Co-authored-by: Akash-Jain <15995028+akash-jain-10@users.noreply.github.com>
Co-authored-by: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com>
Co-authored-by: Ayush Shah <ayush@getcollate.io>
Co-authored-by: Maxim Martynov <martinov_m_s_@mail.ru>
Co-authored-by: ulixius9 <mayursingal9@gmail.com>
Co-authored-by: Shailesh Parmar <shailesh.parmar.webdev@gmail.com>
Co-authored-by: Teddy <teddy.crepineau@gmail.com>
Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com>
Co-authored-by: Antoine Balliet <antoine.balliet@gorgias.com>
Co-authored-by: Suman Maharana <sumanmaharana786@gmail.com>
Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com>
Co-authored-by: Ashish Gupta <ashish@getcollate.io>
Co-authored-by: Aniket Katkar <aniketkatkar97@gmail.com>
Co-authored-by: Sachin Chaurasiya <sachinchaurasiyachotey87@gmail.com>
Co-authored-by: Onkar Ravgan <onkar.10r@gmail.com>
Co-authored-by: Pere Miquel Brull <peremiquelbrull@gmail.com>
Co-authored-by: Mayur Singal <39544459+ulixius9@users.noreply.github.com>
Co-authored-by: sonika-shah <58761340+sonika-shah@users.noreply.github.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
2024-07-01 14:59:25 +05:30

454 lines
12 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 {
DELETE_TERM,
INVALID_NAMES,
NAME_MIN_MAX_LENGTH_VALIDATION_ERROR_1_128,
NAME_VALIDATION_ERROR,
} from '../constants/constants';
import { SidebarItem } from '../constants/Entity.interface';
import {
descriptionBox,
interceptURL,
toastNotification,
verifyResponseStatusCode,
} from './common';
export const validateForm = () => {
// error messages
cy.get('#name_help')
.scrollIntoView()
.should('be.visible')
.contains('Name is required');
cy.get('#description_help')
.should('be.visible')
.contains('Description is required');
// max length validation
cy.get('[data-testid="name"]')
.scrollIntoView()
.should('be.visible')
.type(INVALID_NAMES.MAX_LENGTH);
cy.get('#name_help').should(
'contain',
NAME_MIN_MAX_LENGTH_VALIDATION_ERROR_1_128
);
// with special char validation
cy.get('[data-testid="name"]')
.should('be.visible')
.clear()
.type(INVALID_NAMES.WITH_SPECIAL_CHARS);
cy.get('#name_help').should('be.visible').contains(NAME_VALIDATION_ERROR);
};
export const selectActiveGlossary = (glossaryName) => {
interceptURL('GET', '/api/v1/glossaryTerms*', 'getGlossaryTerms');
cy.get('.ant-menu-item').contains(glossaryName).click();
verifyResponseStatusCode('@getGlossaryTerms', 200);
};
export const checkDisplayName = (displayName) => {
cy.get('[data-testid="entity-header-display-name"]')
.filter(':visible')
.scrollIntoView()
.within(() => {
cy.contains(displayName);
});
};
export const visitGlossaryPage = () => {
interceptURL('GET', '/api/v1/glossaries?fields=*', 'getGlossaries');
cy.sidebarClick(SidebarItem.GLOSSARY);
verifyResponseStatusCode('@getGlossaries', 200);
};
export const removeReviewer = (entity) => {
interceptURL('PATCH', `/api/v1/${entity}/*`, 'patchOwner');
cy.get('[data-testid="edit-reviewer-button"]').click();
cy.get('[data-testid="clear-all-button"]').click();
cy.get('[data-testid="selectable-list-update-btn"]').click();
verifyResponseStatusCode('@patchOwner', 200);
cy.get('[data-testid="glossary-reviewer"] [data-testid="Add"]').should(
'be.visible'
);
};
export const deleteGlossary = (glossary) => {
cy.get('.ant-menu-item').contains(glossary).click();
cy.get('[data-testid="manage-button"]').scrollIntoView().click();
cy.get('[data-testid="delete-button"]').scrollIntoView().click();
cy.get('[data-testid="delete-confirmation-modal"]').then(() => {
cy.get('[role="dialog"]').should('be.visible');
cy.get('[data-testid="modal-header"]').should('be.visible');
});
cy.get('[data-testid="modal-header"]').should('contain', glossary);
cy.get('[data-testid="confirmation-text-input"]').type(DELETE_TERM);
interceptURL('DELETE', '/api/v1/glossaries/*', 'getGlossary');
cy.get('[data-testid="confirm-button"]').click();
verifyResponseStatusCode('@getGlossary', 200);
toastNotification('"Glossary" deleted successfully!');
};
export const addOwnerInGlossary = (
ownerNames: string | string[],
activatorBtnDataTestId: string,
resultTestId = 'owner-link',
isSelectableInsideForm = false
) => {
const isMultipleOwners = Array.isArray(ownerNames);
const owners = isMultipleOwners ? ownerNames : [ownerNames];
interceptURL('GET', '/api/v1/users?*isBot=false*', 'getUsers');
cy.get(`[data-testid="${activatorBtnDataTestId}"]`).click();
cy.get("[data-testid='select-owner-tabs']").should('be.visible');
cy.wait(500); // Due to popover positioning issue adding wait here, will handle this with playwright @karan
cy.get('.ant-tabs [id*=tab-users]').click({
waitForAnimations: true,
});
verifyResponseStatusCode('@getUsers', 200);
interceptURL(
'GET',
`api/v1/search/query?q=*&index=user_search_index*`,
'searchOwner'
);
interceptURL('PATCH', `/api/v1/**`, 'patchOwner');
if (isMultipleOwners) {
cy.get('[data-testid="clear-all-button"]').scrollIntoView().click();
}
owners.forEach((ownerName) => {
cy.get('[data-testid="owner-select-users-search-bar"]')
.clear()
.type(ownerName);
verifyResponseStatusCode('@searchOwner', 200);
cy.get(`.ant-popover [title="${ownerName}"]`).click();
});
if (isMultipleOwners) {
cy.get('[data-testid="selectable-list-update-btn"]').click();
}
if (!isSelectableInsideForm) {
verifyResponseStatusCode('@patchOwner', 200);
}
cy.get(`[data-testid=${resultTestId}]`).within(() => {
owners.forEach((name) => {
cy.contains(name);
});
});
};
export const addTeamAsReviewer = (
teamName: string,
activatorBtnDataTestId: string,
dataTestId?: string,
isSelectableInsideForm = false
) => {
interceptURL(
'GET',
'/api/v1/search/query?q=*&from=0&size=*&index=team_search_index&sort_field=displayName.keyword&sort_order=asc',
'getTeams'
);
cy.get(`[data-testid="${activatorBtnDataTestId}"]`).click();
cy.get("[data-testid='select-owner-tabs']").should('be.visible');
verifyResponseStatusCode('@getTeams', 200);
interceptURL(
'GET',
`api/v1/search/query?q=*${encodeURI(teamName)}*`,
'searchTeams'
);
cy.get('[data-testid="owner-select-teams-search-bar"]').type(teamName);
verifyResponseStatusCode('@searchTeams', 200);
interceptURL('PATCH', `/api/v1/**`, 'patchOwner');
cy.get(`.ant-popover [title="${teamName}"]`).click();
if (!isSelectableInsideForm) {
verifyResponseStatusCode('@patchOwner', 200);
}
cy.get(`[data-testid=${dataTestId ?? 'owner-link'}]`).should(
'contain',
teamName
);
};
export const createGlossary = (glossaryData, bValidateForm) => {
// Intercept API calls
interceptURL('POST', '/api/v1/glossaries', `create_${glossaryData.name}`);
interceptURL(
'GET',
'/api/v1/search/query?q=*disabled:false&index=tag_search_index&from=0&size=10&query_filter=%7B%7D',
'fetchTags'
);
// Click on the "Add Glossary" button
cy.get('[data-testid="add-glossary"]').click();
// Validate redirection to the add glossary page
cy.get('[data-testid="form-heading"]')
.contains('Add Glossary')
.should('be.visible');
// Perform glossary creation steps
cy.get('[data-testid="save-glossary"]')
.scrollIntoView()
.should('be.visible')
.click();
if (bValidateForm) {
validateForm();
}
cy.get('[data-testid="name"]')
.scrollIntoView()
.should('be.visible')
.clear()
.type(glossaryData.name);
cy.get(descriptionBox)
.scrollIntoView()
.should('be.visible')
.type(glossaryData.description);
if (glossaryData.isMutually) {
cy.get('[data-testid="mutually-exclusive-button"]')
.scrollIntoView()
.click();
}
if (glossaryData.tag) {
// Add tag
cy.get('[data-testid="tag-selector"] .ant-select-selection-overflow')
.scrollIntoView()
.type(glossaryData.tag);
verifyResponseStatusCode('@fetchTags', 200);
cy.get(`[data-testid="tag-${glossaryData.tag}"]`).click();
cy.get('[data-testid="right-panel"]').click();
}
if (glossaryData.reviewers.length > 0) {
// Add reviewer
if (glossaryData.reviewers[0].type === 'user') {
addOwnerInGlossary(
glossaryData.reviewers.map((reviewer) => reviewer.name),
'add-reviewers',
'reviewers-container',
true
);
} else {
addTeamAsReviewer(
glossaryData.reviewers[0].name,
'add-reviewers',
'reviewers-container',
true
);
}
}
cy.get('[data-testid="save-glossary"]')
.scrollIntoView()
.should('be.visible')
.click();
cy.wait(`@create_${glossaryData.name}`).then(({ request }) => {
expect(request.body.name).equals(glossaryData.name);
expect(request.body.description).equals(glossaryData.description);
});
cy.url().should('include', '/glossary/');
checkDisplayName(glossaryData.name);
};
const fillGlossaryTermDetails = (
term,
isMutually = false,
validateCreateForm = true
) => {
cy.get('[data-testid="add-new-tag-button-header"]').click();
cy.contains('Add Glossary Term').should('be.visible');
// validation should work
cy.get('[data-testid="save-glossary-term"]')
.scrollIntoView()
.should('be.visible')
.click();
if (validateCreateForm) {
validateForm();
}
cy.get('[data-testid="name"]')
.scrollIntoView()
.should('be.visible')
.clear()
.type(term.name);
cy.get(descriptionBox)
.scrollIntoView()
.should('be.visible')
.type(term.description);
const synonyms = term.synonyms.split(',');
cy.get('[data-testid="synonyms"]')
.scrollIntoView()
.should('be.visible')
.type(synonyms.join('{enter}'));
if (isMutually) {
cy.get('[data-testid="mutually-exclusive-button"]')
.scrollIntoView()
.should('exist')
.should('be.visible')
.click();
}
cy.get('[data-testid="add-reference"]')
.scrollIntoView()
.should('be.visible')
.click();
cy.get('#name-0').scrollIntoView().should('be.visible').type('test');
cy.get('#url-0')
.scrollIntoView()
.should('be.visible')
.type('https://test.com');
if (term.icon) {
cy.get('[data-testid="icon-url"]').scrollIntoView().type(term.icon);
}
if (term.color) {
cy.get('[data-testid="color-color-input"]')
.scrollIntoView()
.type(term.color);
}
if (term.owner) {
addOwnerInGlossary(term.owner, 'add-owner', 'owner-container', true);
}
};
export const createGlossaryTerm = (
term,
status,
isMutually = false,
validateCreateForm = true
) => {
fillGlossaryTermDetails(term, isMutually, validateCreateForm);
interceptURL('POST', '/api/v1/glossaryTerms', `createGlossaryTerms`);
cy.get('[data-testid="save-glossary-term"]')
.scrollIntoView()
.should('be.visible')
.click();
verifyResponseStatusCode('@createGlossaryTerms', 201);
cy.get(
`[data-row-key="${Cypress.$.escapeSelector(term.fullyQualifiedName)}"]`
)
.scrollIntoView()
.should('be.visible')
.contains(term.name);
cy.get(
`[data-testid="${Cypress.$.escapeSelector(
term.fullyQualifiedName
)}-status"]`
)
.should('be.visible')
.contains(status);
};
export const verifyGlossaryDetails = (glossaryDetails) => {
cy.get('[data-testid="glossary-left-panel"]')
.contains(glossaryDetails.name)
.click();
checkDisplayName(glossaryDetails.name);
cy.get('[data-testid="viewer-container"]')
.invoke('text')
.then((text) => {
expect(text).to.contain(glossaryDetails.description);
});
// Owner
cy.get(`[data-testid="glossary-right-panel-owner-link"]`).should(
'contain',
glossaryDetails.owner ? glossaryDetails.owner : 'No Owner'
);
// Reviewer
if (glossaryDetails.reviewers.length > 0) {
cy.get(`[data-testid="glossary-reviewer-name"]`).within(() => {
glossaryDetails.reviewers.forEach((reviewer) => {
cy.contains(reviewer.name);
});
});
}
// Tags
if (glossaryDetails.tag) {
cy.get(`[data-testid="tag-${glossaryDetails.tag}"]`).should('be.visible');
}
};
const verifyGlossaryTermDataInTable = (term, status: string) => {
const escapedName = Cypress.$.escapeSelector(term.fullyQualifiedName);
const selector = `[data-row-key=${escapedName}]`;
cy.get(selector).scrollIntoView().should('be.visible');
cy.get(`${selector} [data-testid="${escapedName}-status"]`).contains(status);
// If empty owner, the creator is the owner
cy.get(`${selector} [data-testid="owner-link"]`).contains(
term.owner ?? 'admin'
);
};
export const createGlossaryTerms = (glossaryDetails) => {
selectActiveGlossary(glossaryDetails.name);
const termStatus =
glossaryDetails.reviewers.length > 0 ? 'Draft' : 'Approved';
glossaryDetails.terms.forEach((term, index) => {
createGlossaryTerm(term, termStatus, true, index === 0);
verifyGlossaryTermDataInTable(term, termStatus);
});
};