test(ui): Refactor useExtractFieldTagsInfo and useExtractFieldGlossaryTermsInfo tests (#14607)

This commit is contained in:
Andrew Sikowitz 2025-08-30 12:29:35 -07:00 committed by GitHub
parent 9698850f08
commit 22e382d1be
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 56 additions and 55 deletions

View File

@ -1,4 +1,5 @@
import { renderHook } from '@testing-library/react-hooks';
import { beforeEach } from 'vitest';
import { pathMatchesExact, pathMatchesInsensitiveToV2 } from '@app/entityV2/dataset/profile/schema/utils/utils';
import useExtractFieldGlossaryTermsInfo from '@app/entityV2/shared/tabs/Dataset/Schema/utils/useExtractFieldGlossaryTermsInfo';
@ -10,9 +11,21 @@ import {
SchemaFieldDataType,
} from '@src/types.generated';
const mockUseBaseEntity = vi.hoisted(() => vi.fn());
vi.mock('@src/app/entity/shared/EntityContext', async (importOriginal) => {
const original = await importOriginal<object>();
return {
...original,
useBaseEntity: mockUseBaseEntity,
};
});
describe('useExtractFieldTermsInfo', () => {
const dummySchemaFieldUrn = 'urn:li:schemaField:testField';
const testTerm: GlossaryTerm = {
urn: 'urn:testField',
urn: 'urn:li:glossaryTerm:testTermName',
type: EntityType.GlossaryTerm,
name: 'testTermName',
hierarchicalName: 'test.testTermName',
@ -24,7 +37,7 @@ describe('useExtractFieldTermsInfo', () => {
};
const testTerm2: GlossaryTerm = {
urn: 'urn:testField2',
urn: 'urn:li:glossaryTerm:testTermName2',
type: EntityType.GlossaryTerm,
name: 'testTermName2',
hierarchicalName: 'test.testTermName2',
@ -36,7 +49,7 @@ describe('useExtractFieldTermsInfo', () => {
};
const testTerm3: GlossaryTerm = {
urn: 'urn:testField3',
urn: 'urn:li:glossaryTerm:testTermName3',
type: EntityType.GlossaryTerm,
name: 'testTermName3',
hierarchicalName: 'test.testTermName3',
@ -48,7 +61,7 @@ describe('useExtractFieldTermsInfo', () => {
};
const extraTerm: GlossaryTerm = {
urn: 'urn:extraField',
urn: 'urn:li:glossaryTerm:extraTermName',
type: EntityType.GlossaryTerm,
name: 'extraTermName',
hierarchicalName: 'test.extraTermName',
@ -68,7 +81,7 @@ describe('useExtractFieldTermsInfo', () => {
glossaryTerms: {
terms: [
{
associatedUrn: 'urn:li:globalTerms:test.testTermName',
associatedUrn: dummySchemaFieldUrn,
term: testTerm,
},
],
@ -84,7 +97,7 @@ describe('useExtractFieldTermsInfo', () => {
glossaryTerms: {
terms: [
{
associatedUrn: 'urn:li:globalTerms:test.testTermName',
associatedUrn: dummySchemaFieldUrn,
term: testTerm,
},
],
@ -95,7 +108,7 @@ describe('useExtractFieldTermsInfo', () => {
glossaryTerms: {
terms: [
{
associatedUrn: 'urn:li:globalTerms:test.extraTermName',
associatedUrn: dummySchemaFieldUrn,
term: extraTerm,
},
],
@ -116,7 +129,7 @@ describe('useExtractFieldTermsInfo', () => {
glossaryTerms: {
terms: [
{
associatedUrn: 'urn:li:globalTerm:test.testTermName',
associatedUrn: dummySchemaFieldUrn,
term: testTerm,
},
],
@ -133,7 +146,7 @@ describe('useExtractFieldTermsInfo', () => {
glossaryTerms: {
terms: [
{
associatedUrn: testTerm.urn,
associatedUrn: dummySchemaFieldUrn,
term: testTerm,
},
],
@ -148,18 +161,6 @@ describe('useExtractFieldTermsInfo', () => {
const emptyBaseEntity = {};
const { mockedUseBaseEntity } = vi.hoisted(() => {
return { mockedUseBaseEntity: vi.fn() };
});
vi.mock('@src/app/entity/shared/EntityContext', async (importOriginal) => {
const original = await importOriginal<object>();
return {
...original,
useBaseEntity: vi.fn(() => mockedUseBaseEntity()),
};
});
beforeAll(() => {
expect(pathMatchesExact('testField', 'testField')).toBe(true);
expect(pathMatchesExact('testField', '[version=2.0].[type=record].testField')).toBe(false);
@ -167,6 +168,10 @@ describe('useExtractFieldTermsInfo', () => {
expect(pathMatchesInsensitiveToV2('[version=2.0].[type=record].testField', 'testField')).toBe(true);
});
beforeEach(() => {
mockUseBaseEntity.mockReturnValue(emptyBaseEntity);
});
afterEach(() => {
vi.restoreAllMocks();
vi.resetAllMocks();
@ -212,7 +217,6 @@ describe('useExtractFieldTermsInfo', () => {
});
it('should extract all terms when they were provided in both schema and editable metadata, but exclude duplicates', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTermsInfo = renderHook(() => useExtractFieldGlossaryTermsInfo(filledEditableSchemaMetadata))
.result.current;
@ -244,7 +248,7 @@ describe('useExtractFieldTermsInfo', () => {
editableSchemaFieldInfo: [
{
fieldPath: 'testField',
glossaryTerms: { terms: [{ term: testTerm2, associatedUrn: testTerm2.urn }] },
glossaryTerms: { terms: [{ term: testTerm2, associatedUrn: dummySchemaFieldUrn }] },
},
],
};
@ -253,7 +257,7 @@ describe('useExtractFieldTermsInfo', () => {
const schemaField: SchemaField = {
...directSchemaField,
glossaryTerms: { terms: [{ term: testTerm3, associatedUrn: testTerm3.urn }] },
glossaryTerms: { terms: [{ term: testTerm3, associatedUrn: dummySchemaFieldUrn }] },
};
const { directTerms, editableTerms, uneditableTerms, numberOfTerms } = extractFieldTermsInfo(schemaField);
@ -267,7 +271,6 @@ describe('useExtractFieldTermsInfo', () => {
});
it('should not extract any terms when they are not provided', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTermsInfo = renderHook(() => useExtractFieldGlossaryTermsInfo(emptyEditableSchemaMetadata))
.result.current;
@ -280,8 +283,6 @@ describe('useExtractFieldTermsInfo', () => {
});
it('should extract extra uneditable terms from fields that match the field path insensitive to V2', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTermsInfo = renderHook(() =>
useExtractFieldGlossaryTermsInfo(editableSchemaMetadataWithExtraTerms),
).result.current;

View File

@ -1,12 +1,24 @@
import { renderHook } from '@testing-library/react-hooks';
import { pathMatchesExact, pathMatchesInsensitiveToV2 } from '@app/entityV2/dataset/profile/schema/utils/utils';
import useExtractFieldTagsInfo from '@app/entityV2/shared/tabs/Dataset/Schema/utils/useExtractFieldTagsInfo';
import { pathMatchesExact, pathMatchesInsensitiveToV2 } from '@src/app/entityV2/dataset/profile/schema/utils/utils';
import { EditableSchemaMetadata, EntityType, SchemaField, SchemaFieldDataType, Tag } from '@src/types.generated';
const mockUseBaseEntity = vi.hoisted(() => vi.fn());
vi.mock('@src/app/entity/shared/EntityContext', async (importOriginal) => {
const original = await importOriginal<object>();
return {
...original,
useBaseEntity: mockUseBaseEntity,
};
});
describe('useExtractFieldTagsInfo', () => {
const dummySchemaFieldUrn = 'urn:li:schemaField:testField';
const testTag: Tag = {
urn: 'urn:testField',
urn: 'urn:li:tag:testTagName',
type: EntityType.Tag,
name: 'testTagName',
properties: {
@ -15,7 +27,7 @@ describe('useExtractFieldTagsInfo', () => {
};
const testTag2: Tag = {
urn: 'urn:testField2',
urn: 'urn:li:tag:testTagName2',
type: EntityType.Tag,
name: 'testTagName2',
properties: {
@ -24,7 +36,7 @@ describe('useExtractFieldTagsInfo', () => {
};
const testTag3: Tag = {
urn: 'urn:testField3',
urn: 'urn:li:tag:testTagName3',
type: EntityType.Tag,
name: 'testTagName3',
properties: {
@ -33,7 +45,7 @@ describe('useExtractFieldTagsInfo', () => {
};
const extraTag: Tag = {
urn: 'urn:extraField',
urn: 'urn:li:tag:extraTagName',
type: EntityType.Tag,
name: 'extraTagName',
properties: {
@ -50,7 +62,7 @@ describe('useExtractFieldTagsInfo', () => {
globalTags: {
tags: [
{
associatedUrn: 'urn:li:globalTags:test.testTagName',
associatedUrn: dummySchemaFieldUrn,
tag: testTag,
},
],
@ -66,7 +78,7 @@ describe('useExtractFieldTagsInfo', () => {
globalTags: {
tags: [
{
associatedUrn: 'urn:li:globalTags:test.testTagName',
associatedUrn: dummySchemaFieldUrn,
tag: testTag,
},
],
@ -77,7 +89,7 @@ describe('useExtractFieldTagsInfo', () => {
globalTags: {
tags: [
{
associatedUrn: 'urn:li:globalTags:test.extraTagName',
associatedUrn: dummySchemaFieldUrn,
tag: extraTag,
},
],
@ -98,7 +110,7 @@ describe('useExtractFieldTagsInfo', () => {
globalTags: {
tags: [
{
associatedUrn: 'urn:li:globalTag:test.testTagName',
associatedUrn: dummySchemaFieldUrn,
tag: testTag,
},
],
@ -115,7 +127,7 @@ describe('useExtractFieldTagsInfo', () => {
tags: {
tags: [
{
associatedUrn: testTag.urn,
associatedUrn: dummySchemaFieldUrn,
tag: testTag,
},
],
@ -130,18 +142,6 @@ describe('useExtractFieldTagsInfo', () => {
const emptyBaseEntity = {};
const { mockedUseBaseEntity } = vi.hoisted(() => {
return { mockedUseBaseEntity: vi.fn() };
});
vi.mock('@src/app/entity/shared/EntityContext', async (importOriginal) => {
const original = await importOriginal<object>();
return {
...original,
useBaseEntity: vi.fn(() => mockedUseBaseEntity()),
};
});
beforeAll(() => {
expect(pathMatchesExact('testField', 'testField')).toBe(true);
expect(pathMatchesExact('testField', '[version=2.0].[type=record].testField')).toBe(false);
@ -149,6 +149,10 @@ describe('useExtractFieldTagsInfo', () => {
expect(pathMatchesInsensitiveToV2('[version=2.0].[type=record].testField', 'testField')).toBe(true);
});
beforeEach(() => {
mockUseBaseEntity.mockReturnValue(emptyBaseEntity);
});
afterEach(() => {
vi.restoreAllMocks();
vi.resetAllMocks();
@ -194,7 +198,6 @@ describe('useExtractFieldTagsInfo', () => {
});
it('should extract all tags when they were provided in both schema and editable metadata, but exclude duplicates', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTagsInfo = renderHook(() => useExtractFieldTagsInfo(filledEditableSchemaMetadata)).result
.current;
@ -225,7 +228,7 @@ describe('useExtractFieldTagsInfo', () => {
editableSchemaFieldInfo: [
{
fieldPath: 'testField',
globalTags: { tags: [{ tag: testTag2, associatedUrn: testTag2.urn }] },
globalTags: { tags: [{ tag: testTag2, associatedUrn: dummySchemaFieldUrn }] },
},
],
};
@ -233,7 +236,7 @@ describe('useExtractFieldTagsInfo', () => {
const schemaField: SchemaField = {
...directSchemaField,
globalTags: { tags: [{ tag: testTag3, associatedUrn: testTag3.urn }] },
globalTags: { tags: [{ tag: testTag3, associatedUrn: dummySchemaFieldUrn }] },
};
const { directTags, editableTags, uneditableTags, numberOfTags } = extractFieldTagsInfo(schemaField);
@ -247,7 +250,6 @@ describe('useExtractFieldTagsInfo', () => {
});
it('should not extract any tags when they are not provided', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTagsInfo = renderHook(() => useExtractFieldTagsInfo(emptyEditableSchemaMetadata)).result
.current;
@ -260,8 +262,6 @@ describe('useExtractFieldTagsInfo', () => {
});
it('should extract extra uneditable tags from fields that match the field path insensitive to V2', () => {
mockedUseBaseEntity.mockReturnValue(emptyBaseEntity);
const extractFieldTagsInfo = renderHook(() => useExtractFieldTagsInfo(editableSchemaMetadataWithExtraTags))
.result.current;