Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -916,23 +916,10 @@ test.describe('Glossary Advanced Operations', () => {

await waitForAllLoadersToDisappear(page);

// Clear all related terms

await page
.getByTestId('tag-selector')
.locator('#tagsForm_tags')
.press('Backspace');
await page
.getByTestId('tag-selector')
.locator('#tagsForm_tags')
.press('Backspace');
await page
.getByTestId('tag-selector')
.locator('#tagsForm_tags')
.press('Backspace');
await page.locator('[data-testid^="remove-row-"]').first().click();

const validateRes = page.waitForResponse('/api/v1/glossaryTerms/*');
await page.getByTestId('saveAssociatedTag').click();
await page.getByTestId('save-related-terms').click();
await validateRes;

// Verify related term is removed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,10 @@ test.describe('Glossary Term Details Operations', () => {
.getByTestId('edit-button')
.click();

// Remove the related term by clicking the close icon on the tag
// Use a more robust selector that doesn't rely on FQN in attribute
await page.locator('.ant-tag-close-icon').first().click();
await page.locator('[data-testid^="remove-row-"]').first().click();

const saveRes = page.waitForResponse('/api/v1/glossaryTerms/*');
await page.getByTestId('saveAssociatedTag').click();
await page.getByTestId('save-related-terms').click();
await saveRes;

// Verify related term is removed
Expand Down Expand Up @@ -235,17 +233,19 @@ test.describe('Glossary Term Details Operations', () => {

await expect(page.getByTestId(term1Name)).toBeVisible();

// Move mouse away to dismiss any tooltip that may be overlapping the edit button
await page.mouse.move(0, 0);

// Clean up: remove the related term from term2's page - use edit button since term exists
await page
.getByTestId('related-term-container')
.getByTestId('edit-button')
.click();

// Use a more robust selector
await page.locator('.ant-tag-close-icon').first().click();
await page.locator('[data-testid^="remove-row-"]').first().click();

const saveRes = page.waitForResponse('/api/v1/glossaryTerms/*');
await page.getByTestId('saveAssociatedTag').click();
await page.getByTestId('save-related-terms').click();
await saveRes;
} finally {
await glossaryTerm1.delete(apiContext);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1183,20 +1183,27 @@ export const addRelatedTerms = async (
relatedTerms: GlossaryTerm[]
) => {
await page.getByTestId('related-term-add-button').click();

const autocompleteInput = page
.locator('[data-testid^="term-autocomplete-"]')
.first()
.locator('input');

for (const term of relatedTerms) {
const entityName = get(term, 'responseData.name');
const entityFqn = get(term, 'responseData.fullyQualifiedName');
await page.locator('#tagsForm_tags').fill(entityName);
await page.getByTestId(`tag-${entityFqn}`).click();
const entityDisplayName =
get(term, 'responseData.displayName') || get(term, 'responseData.name');
const searchRes = page.waitForResponse('**/api/v1/glossaryTerms/search*');
await autocompleteInput.fill(entityDisplayName);
await searchRes;
await page.getByRole('option', { name: entityDisplayName }).click();
}

const saveRes = page.waitForResponse('/api/v1/glossaryTerms/*');
await page.getByTestId('saveAssociatedTag').click();
await page.getByTestId('save-related-terms').click();
await saveRes;

for (const term of relatedTerms) {
const entityName = get(term, 'responseData.displayName');

await expect(page.getByTestId(entityName)).toBeVisible();
}
};
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,35 @@ jest.mock('@openmetadata/ui-core-components', () => {
const React = require('react');

return {
Autocomplete: Object.assign(
({ children, ...props }: Record<string, unknown>) =>
React.createElement('div', props, children),
{
Item: ({ label, ...props }: Record<string, unknown>) =>
React.createElement('div', props, label),
}
),
Badge: ({ children, ...props }: Record<string, unknown>) =>
React.createElement('span', props, children),
BadgeWithIcon: ({
children,
iconLeading: _iconLeading,
...props
}: Record<string, unknown>) => React.createElement('span', props, children),
Button: ({
children,
iconLeading: _iconLeading,
...props
}: Record<string, unknown>) =>
React.createElement('button', props, children),
Select: ({ children, ...props }: Record<string, unknown>) =>
React.createElement('select', props, children),
Select: Object.assign(
({ children, ...props }: Record<string, unknown>) =>
React.createElement('select', props, children),
{
Item: ({ label, ...props }: Record<string, unknown>) =>
React.createElement('option', props, label),
}
),
Tooltip: ({ children, ...props }: Record<string, unknown>) =>
React.createElement('span', props, children),
TooltipTrigger: ({ children, ...props }: Record<string, unknown>) =>
Expand All @@ -45,6 +66,45 @@ jest.mock('@openmetadata/ui-core-components', () => {
};
});

jest.mock('../../../common/ExpandableCard/ExpandableCard', () => ({
__esModule: true,
default: jest.fn(
({
children,
cardProps,
}: {
children: unknown;
cardProps?: { title?: unknown };
}) => {
const React = require('react');

return React.createElement('div', {}, cardProps?.title, children);
}
),
}));

jest.mock('../../../common/IconButtons/EditIconButton', () => ({
EditIconButton: ({ children, ...props }: Record<string, unknown>) => {
const React = require('react');

return React.createElement('button', props, children);
},
PlusIconButton: ({ children, ...props }: Record<string, unknown>) => {
const React = require('react');

return React.createElement('button', props, children);
},
}));

jest.mock('../../../../rest/glossaryAPI', () => ({
getGlossaryTermRelationSettings: jest.fn().mockResolvedValue({
relationTypes: [
{ name: 'relatedTo', displayName: 'Related To', isSymmetric: true },
],
}),
searchGlossaryTermsPaginated: jest.fn().mockResolvedValue({ data: [] }),
}));

jest.mock('../../../Customization/GenericProvider/GenericProvider', () => ({
useGenericContext: jest.fn().mockImplementation(() => mockContext),
}));
Expand Down Expand Up @@ -93,10 +153,10 @@ describe('RelatedTerms', () => {
expect(getByTestId('edit-button')).toBeInTheDocument();
});

it('should not show the edit button if there are no related terms and the user has edit permissions', () => {
it('should show the edit button even if there are no related terms when the user has edit permissions', () => {
mockContext.data = { ...MOCKED_GLOSSARY_TERMS[2], relatedTerms: [] };
const { queryByTestId } = render(<RelatedTerms />);
const { getByTestId } = render(<RelatedTerms />);

expect(queryByTestId('edit-button')).toBeNull();
expect(getByTestId('edit-button')).toBeInTheDocument();
});
});
Loading
Loading