From 4233abf41587b436402d1abec2bcc2d72c913f64 Mon Sep 17 00:00:00 2001 From: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> Date: Tue, 8 Oct 2024 23:06:54 +0530 Subject: [PATCH] Gen-882: Add max length validation for glossary term rename (#18166) * add max length validation for glossary term name * add name validation --- .../main/resources/ui/playwright/utils/glossary.ts | 11 ++++++++++- .../main/resources/ui/src/assets/svg/ic-search.svg | 8 +++++++- .../GlossaryHeader/GlossaryHeader.component.tsx | 11 +++++++++++ .../GlossaryTerms/GlossaryTermsV1.component.tsx | 6 +++++- .../EntityNameModal/EntityNameModal.component.tsx | 2 ++ .../EntityNameModal/EntityNameModal.interface.ts | 3 +++ .../Glossary/GlossaryPage/GlossaryPage.component.tsx | 5 +---- 7 files changed, 39 insertions(+), 7 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts index b060e62128d..c5b7e7e2ea1 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/glossary.ts @@ -37,6 +37,8 @@ import { addMultiOwner } from './entity'; import { sidebarClick } from './sidebar'; import { TaskDetails, TASK_OPEN_FETCH_LINK } from './task'; +const GLOSSARY_NAME_VALIDATION_ERROR = 'Name size must be between 1 and 128'; + export const descriptionBox = '.toastui-editor-md-container > .toastui-editor > .ProseMirror'; @@ -146,7 +148,7 @@ export const setupGlossaryAndTerms = async (page: Page) => { return { glossary, term1, term2, cleanup }; }; -export const validateForm = async (page) => { +export const validateForm = async (page: Page) => { // Error messages await expect(page.locator('#name_help')).toHaveText('Name is required'); await expect(page.locator('#description_help')).toHaveText( @@ -603,6 +605,13 @@ export const updateNameForGlossaryTerm = async ( await expect(page.locator('#name')).toBeVisible(); + // Max length validation + await page.locator('#name').fill(INVALID_NAMES.MAX_LENGTH); + + await expect(page.locator('#name_help')).toHaveText( + GLOSSARY_NAME_VALIDATION_ERROR + ); + await page.fill('#name', name); const updateNameResponsePromise = page.waitForResponse( `/api/v1/${endPoint}/*` diff --git a/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg b/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg index 206c4dcc02c..9be36acac92 100644 --- a/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg +++ b/openmetadata-ui/src/main/resources/ui/src/assets/svg/ic-search.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx index fa77762831c..9c0851a77ab 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryHeader/GlossaryHeader.component.tsx @@ -657,6 +657,17 @@ const GlossaryHeader = ({ { await handleGlossaryTermUpdate(data as GlossaryTerm); - getEntityFeedCount(); + // For name change, do not update the feed. It will be updated when the page is redirected to + // have the new value. + if (glossaryTerm.name === data.name) { + getEntityFeedCount(); + } }; const tabItems = useMemo(() => { diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx index 3be5a50d8dc..ce65ff03214 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Modals/EntityNameModal/EntityNameModal.component.tsx @@ -25,6 +25,7 @@ const EntityNameModal: React.FC = ({ // re-name will update actual name of the entity, it will impact across application // By default its disabled, send allowRename true to get the functionality allowRename = false, + nameValidationRules = [], }) => { const { t } = useTranslation(); const [form] = Form.useForm<{ name: string; displayName: string }>(); @@ -83,6 +84,7 @@ const EntityNameModal: React.FC = ({ pattern: ENTITY_NAME_REGEX, message: t('message.entity-name-validation'), }, + ...nameValidationRules, ]}> void | Promise; entity: Partial; title: string; + nameValidationRules?: Rule[]; } diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx index 427311974d1..ab2d3592eb7 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/Glossary/GlossaryPage/GlossaryPage.component.tsx @@ -280,10 +280,7 @@ const GlossaryPage = () => { return; } try { - const response = await patchGlossaryTerm( - activeGlossary?.id as string, - jsonPatch - ); + const response = await patchGlossaryTerm(activeGlossary?.id, jsonPatch); if (response) { setActiveGlossary(response as ModifiedGlossary); if (activeGlossary?.name !== updatedData.name) {