2023-03-31 07:55:22 -07:00
|
|
|
# Copyright 2021 Schlameel
|
2025-04-03 10:39:47 +05:30
|
|
|
# Licensed under the Collate Community License, Version 1.0 (the "License");
|
2023-03-31 07:55:22 -07:00
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
2025-04-03 10:39:47 +05:30
|
|
|
# https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE
|
2023-03-31 07:55:22 -07:00
|
|
|
# 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.
|
|
|
|
|
|
|
|
"""
|
|
|
|
OpenMetadata high-level API Glossary test
|
|
|
|
"""
|
2023-11-16 18:14:27 -08:00
|
|
|
from copy import deepcopy
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
from metadata.generated.schema.api.data.createGlossary import CreateGlossaryRequest
|
|
|
|
from metadata.generated.schema.api.data.createGlossaryTerm import (
|
|
|
|
CreateGlossaryTermRequest,
|
|
|
|
)
|
|
|
|
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
|
|
|
|
from metadata.generated.schema.entity.data.glossary import Glossary
|
2023-11-16 18:14:27 -08:00
|
|
|
from metadata.generated.schema.entity.data.glossaryTerm import (
|
|
|
|
GlossaryTerm,
|
|
|
|
TermReference,
|
|
|
|
)
|
2024-06-05 21:18:37 +02:00
|
|
|
from metadata.generated.schema.type.basic import (
|
|
|
|
Email,
|
|
|
|
EntityName,
|
|
|
|
FullyQualifiedEntityName,
|
|
|
|
Markdown,
|
|
|
|
)
|
2023-03-31 07:55:22 -07:00
|
|
|
from metadata.generated.schema.type.entityReference import EntityReference
|
2024-06-05 21:18:37 +02:00
|
|
|
from metadata.generated.schema.type.entityReferenceList import EntityReferenceList
|
2023-11-16 18:14:27 -08:00
|
|
|
from metadata.utils import fqn
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
class TestOMetaGlossary:
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
|
|
|
Run this integration test with the local API available
|
|
|
|
Install the ingestion package before running the tests
|
|
|
|
"""
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
def test_create_glossary(self, create_glossary, create_user):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
Create a Glossary
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
create_user_request = CreateUserRequest(
|
|
|
|
name=EntityName("test.user.1"),
|
|
|
|
email=Email(root="test.user.1@getcollate.io"),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
user = create_user(create_user_request)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_request = CreateGlossaryRequest(
|
2024-06-05 21:18:37 +02:00
|
|
|
name=EntityName("test-glossary"),
|
2023-03-31 07:55:22 -07:00
|
|
|
displayName="test-glossary",
|
2024-06-05 21:18:37 +02:00
|
|
|
description=Markdown("Description of test glossary"),
|
2024-07-29 23:06:39 -07:00
|
|
|
owners=EntityReferenceList(
|
|
|
|
root=[
|
|
|
|
EntityReference(
|
2024-11-20 15:24:53 +01:00
|
|
|
id=user.id,
|
2024-07-29 23:06:39 -07:00
|
|
|
type="user",
|
|
|
|
)
|
|
|
|
],
|
2023-03-31 07:55:22 -07:00
|
|
|
),
|
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(create_glossary_request)
|
|
|
|
|
|
|
|
assert glossary is not None
|
|
|
|
assert create_glossary_request.name == glossary.name
|
|
|
|
|
|
|
|
def test_create_glossary_term(self, create_glossary, create_glossary_term):
|
|
|
|
"""
|
|
|
|
Test the creation of a glossary term
|
|
|
|
"""
|
|
|
|
|
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
# Create Glossary Term without Parent
|
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
2024-06-05 21:18:37 +02:00
|
|
|
name=EntityName("GT1"),
|
2023-03-31 07:55:22 -07:00
|
|
|
displayName="Glossary Term 1",
|
2024-06-05 21:18:37 +02:00
|
|
|
description=Markdown("Test glossary term 1"),
|
2024-11-20 15:24:53 +01:00
|
|
|
)
|
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
|
|
|
|
|
|
|
assert glossary_term_1 is not None
|
|
|
|
assert glossary_term_1.name == create_glossary_term_1.name
|
|
|
|
assert (
|
|
|
|
glossary_term_1.fullyQualifiedName.root
|
|
|
|
== f"{glossary.name.root}.{glossary_term_1.name.root}"
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
# Create Glossary Term with Parent
|
|
|
|
create_glossary_term_2 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
2024-06-05 21:18:37 +02:00
|
|
|
name=EntityName("GT2"),
|
2023-03-31 07:55:22 -07:00
|
|
|
displayName="Glossary Term 2",
|
2024-06-05 21:18:37 +02:00
|
|
|
description=Markdown("Test glossary term 2"),
|
2024-11-20 15:24:53 +01:00
|
|
|
parent=glossary_term_1.fullyQualifiedName,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary_term_2 = create_glossary_term(create_glossary_term_2)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert glossary_term_2 is not None
|
|
|
|
assert glossary_term_2.name == create_glossary_term_2.name
|
|
|
|
assert glossary_term_2.parent.name == glossary_term_1.name.root
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
def test_patch_glossary_term_parent(
|
|
|
|
self, metadata, create_glossary, create_glossary_term
|
|
|
|
):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
Update parent via PATCH
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
|
|
|
)
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
# Create Glossary Term without Parent
|
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT1"),
|
|
|
|
displayName="Glossary Term 1",
|
|
|
|
description=Markdown("Test glossary term 1"),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
# Create Glossary Term with Parent
|
|
|
|
create_glossary_term_2 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT2"),
|
|
|
|
displayName="Glossary Term 2",
|
|
|
|
description=Markdown("Test glossary term 2"),
|
|
|
|
parent=glossary_term_1.fullyQualifiedName,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary_term_2 = create_glossary_term(create_glossary_term_2)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_term_3 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT3"),
|
|
|
|
displayName="Glossary Term 3",
|
|
|
|
description=Markdown("Test glossary term 3"),
|
|
|
|
)
|
|
|
|
glossary_term_3 = create_glossary_term(create_glossary_term_3)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_3 = deepcopy(glossary_term_3)
|
|
|
|
updated_glossary_term_3.parent = EntityReference(
|
|
|
|
id=glossary_term_2.id, type="glossaryTerm"
|
2023-11-16 18:14:27 -08:00
|
|
|
)
|
|
|
|
|
2023-03-31 07:55:22 -07:00
|
|
|
# Add parent
|
2024-11-20 15:24:53 +01:00
|
|
|
patched_glossary_term_3 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_3,
|
|
|
|
destination=updated_glossary_term_3,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary_term_3 is not None
|
|
|
|
assert patched_glossary_term_3.parent.id == glossary_term_2.id
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Move parent
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_3.parent = EntityReference(
|
|
|
|
id=glossary_term_1.id, type="glossaryTerm"
|
2023-11-16 18:14:27 -08:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
patched_glossary_term_3 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_3,
|
|
|
|
destination=updated_glossary_term_3,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_3 is not None
|
|
|
|
assert patched_glossary_term_3.parent.id == glossary_term_1.id
|
|
|
|
|
2023-03-31 07:55:22 -07:00
|
|
|
# Delete parent
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_3.parent = None
|
|
|
|
patched_glossary_term_3 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=patched_glossary_term_3,
|
|
|
|
destination=updated_glossary_term_3,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_3 is not None
|
|
|
|
assert patched_glossary_term_3.parent is None
|
|
|
|
|
|
|
|
def test_patch_glossary_term_related_terms(
|
|
|
|
self, metadata, create_glossary, create_glossary_term
|
|
|
|
):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
|
|
|
Update related terms via PATCH
|
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
2023-11-16 18:14:27 -08:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT1"),
|
|
|
|
displayName="Glossary Term 1",
|
|
|
|
description=Markdown("Test glossary term 1"),
|
|
|
|
)
|
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
|
|
|
|
|
|
|
create_glossary_term_2 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT2"),
|
|
|
|
displayName="Glossary Term 2",
|
|
|
|
description=Markdown("Test glossary term 2"),
|
|
|
|
)
|
|
|
|
glossary_term_2 = create_glossary_term(create_glossary_term_2)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Add related term
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1 = deepcopy(glossary_term_1)
|
|
|
|
updated_glossary_term_1.relatedTerms = EntityReferenceList(
|
|
|
|
root=[EntityReference(id=glossary_term_2.id, type="glossaryTerm")]
|
|
|
|
)
|
|
|
|
|
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.relatedTerms.root) == 1
|
|
|
|
assert patched_glossary_term_1.relatedTerms.root[0].id == glossary_term_2.id
|
|
|
|
|
|
|
|
def test_patch_reviewer(
|
|
|
|
self, metadata, create_glossary, create_glossary_term, create_user
|
|
|
|
):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
|
|
|
Update reviewers via PATCH
|
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
user_1 = create_user(
|
|
|
|
CreateUserRequest(
|
|
|
|
name=EntityName("test.user.1"),
|
|
|
|
email=Email(root="test.user.1@getcollate.io"),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
|
2023-03-31 07:55:22 -07:00
|
|
|
# Add Glossary Reviewer
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary = deepcopy(glossary)
|
|
|
|
if updated_glossary.reviewers is None:
|
|
|
|
updated_glossary.reviewers = []
|
|
|
|
updated_glossary.reviewers.append(EntityReference(id=user_1.id, type="user"))
|
|
|
|
patched_glossary = metadata.patch(
|
|
|
|
entity=Glossary, source=glossary, destination=updated_glossary
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary is not None
|
|
|
|
assert len(patched_glossary.reviewers) == 1
|
|
|
|
assert patched_glossary.reviewers[0].id == user_1.id
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Remove only Glossary reviewer
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary = deepcopy(patched_glossary)
|
|
|
|
updated_glossary.reviewers.pop(0)
|
|
|
|
patched_glossary = metadata.patch(
|
|
|
|
entity=Glossary, source=patched_glossary, destination=updated_glossary
|
|
|
|
)
|
|
|
|
|
|
|
|
assert patched_glossary is not None
|
|
|
|
assert len(patched_glossary.reviewers) == 0
|
|
|
|
|
|
|
|
user_2 = create_user(
|
|
|
|
CreateUserRequest(
|
|
|
|
name=EntityName("test.user.2"),
|
|
|
|
email=Email(root="test.user.2@getcollate.io"),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
|
|
|
|
user_3 = create_user(
|
|
|
|
CreateUserRequest(
|
|
|
|
name=EntityName("test.user.3"),
|
|
|
|
email=Email(root="test.user.3@getcollate.io"),
|
|
|
|
),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
# Add Reviewers
|
|
|
|
updated_glossary = deepcopy(patched_glossary)
|
|
|
|
updated_glossary.reviewers.append(EntityReference(id=user_1.id, type="user"))
|
|
|
|
updated_glossary.reviewers.append(EntityReference(id=user_2.id, type="user"))
|
|
|
|
updated_glossary.reviewers.append(EntityReference(id=user_3.id, type="user"))
|
|
|
|
patched_glossary = metadata.patch(
|
|
|
|
entity=Glossary, source=patched_glossary, destination=updated_glossary
|
|
|
|
)
|
|
|
|
|
2023-07-05 08:53:20 +02:00
|
|
|
# Remove one Glossary reviewer when there are many
|
2024-11-20 15:24:53 +01:00
|
|
|
# delete user_3
|
|
|
|
updated_glossary = deepcopy(patched_glossary)
|
|
|
|
updated_glossary.reviewers.pop(2)
|
|
|
|
patched_glossary = metadata.patch(
|
|
|
|
entity=Glossary, source=patched_glossary, destination=updated_glossary
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary is not None
|
|
|
|
assert len(patched_glossary.reviewers) == 2
|
|
|
|
assert patched_glossary.reviewers[0].id == user_1.id
|
|
|
|
assert patched_glossary.reviewers[1].id == user_2.id
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Add GlossaryTerm Reviewer
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT1"),
|
|
|
|
displayName="Glossary Term 1",
|
|
|
|
description=Markdown("Test glossary term 1"),
|
|
|
|
)
|
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
|
|
|
|
|
|
|
updated_glossary_term_1 = deepcopy(glossary_term_1)
|
|
|
|
updated_glossary_term_1.reviewers.root.append(
|
|
|
|
EntityReference(id=user_1.id, type="user")
|
2023-11-16 18:14:27 -08:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-03-31 07:55:22 -07:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.reviewers.root) == 2
|
|
|
|
assert any(
|
|
|
|
reviewer.id == user_1.id
|
|
|
|
for reviewer in patched_glossary_term_1.reviewers.root
|
|
|
|
)
|
|
|
|
|
|
|
|
updated_glossary_term_1 = deepcopy(patched_glossary_term_1)
|
|
|
|
updated_glossary_term_1.reviewers.root.pop(0)
|
|
|
|
metadata.patch(
|
|
|
|
entity=GlossaryTerm,
|
|
|
|
source=patched_glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2024-08-02 10:16:14 +05:30
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
patched_glossary_term_1 = metadata.get_by_name(
|
2023-03-31 07:55:22 -07:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
fqn=fqn._build(
|
|
|
|
glossary.name.root,
|
|
|
|
glossary_term_1.name.root,
|
|
|
|
),
|
|
|
|
fields=["reviewers"],
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary_term_1 is not None
|
2024-06-06 20:23:37 +05:30
|
|
|
|
|
|
|
# inherited reviewers from glossary
|
2024-11-20 15:24:53 +01:00
|
|
|
assert len(patched_glossary_term_1.reviewers.root) == 2
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
def test_patch_glossary_term_synonyms(
|
|
|
|
self, metadata, create_glossary, create_glossary_term
|
|
|
|
):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
|
|
|
Update synonyms via PATCH
|
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT1"),
|
|
|
|
displayName="Glossary Term 1",
|
|
|
|
description=Markdown("Test glossary term 1"),
|
|
|
|
)
|
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Add GlossaryTerm synonym
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1 = deepcopy(glossary_term_1)
|
|
|
|
if updated_glossary_term_1.synonyms is None:
|
|
|
|
updated_glossary_term_1.synonyms = []
|
|
|
|
|
|
|
|
if updated_glossary_term_1.synonyms is None:
|
|
|
|
updated_glossary_term_1.synonyms = []
|
|
|
|
|
|
|
|
updated_glossary_term_1.synonyms.append(EntityName("GT1S1"))
|
|
|
|
|
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.synonyms) == 1
|
|
|
|
assert patched_glossary_term_1.synonyms[0].root == "GT1S1"
|
|
|
|
# self.glossary_term_1 = self.metadata.get_by_id(
|
|
|
|
# entity=GlossaryTerm, entity_id=self.glossary_term_1.id, fields=["*"]
|
|
|
|
# )
|
|
|
|
|
2023-03-31 07:55:22 -07:00
|
|
|
# Remove GlossaryTerm synonym
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1 = deepcopy(patched_glossary_term_1)
|
|
|
|
updated_glossary_term_1.synonyms.pop(0)
|
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=patched_glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.synonyms) == 0
|
|
|
|
|
|
|
|
updated_glossary_term_1 = deepcopy(patched_glossary_term_1)
|
|
|
|
updated_glossary_term_1.synonyms.append(EntityName("GT1S1"))
|
|
|
|
updated_glossary_term_1.synonyms.append(EntityName("GT1S2"))
|
|
|
|
updated_glossary_term_1.synonyms.append(EntityName("GT1S3"))
|
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=patched_glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.synonyms) == 3
|
|
|
|
assert patched_glossary_term_1.synonyms[1].root == "GT1S2"
|
|
|
|
|
|
|
|
def test_patch_glossary_term_references(
|
|
|
|
self, metadata, create_glossary, create_glossary_term
|
|
|
|
):
|
2023-03-31 07:55:22 -07:00
|
|
|
"""
|
|
|
|
Update GlossaryTerm references via PATCH
|
|
|
|
"""
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary = create_glossary(
|
|
|
|
CreateGlossaryRequest(
|
|
|
|
name=EntityName("test-glossary"),
|
|
|
|
displayName="test-glossary",
|
|
|
|
description=Markdown("Description of test glossary"),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
)
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
create_glossary_term_1 = CreateGlossaryTermRequest(
|
|
|
|
glossary=FullyQualifiedEntityName(glossary.name.root),
|
|
|
|
name=EntityName("GT1"),
|
|
|
|
displayName="Glossary Term 1",
|
|
|
|
description=Markdown("Test glossary term 1"),
|
2023-11-16 18:14:27 -08:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary_term_1 = create_glossary_term(create_glossary_term_1)
|
|
|
|
|
2023-03-31 07:55:22 -07:00
|
|
|
# Add reference
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1 = deepcopy(glossary_term_1)
|
|
|
|
if updated_glossary_term_1.references is None:
|
|
|
|
updated_glossary_term_1.references = []
|
|
|
|
updated_glossary_term_1.references.append(
|
|
|
|
TermReference(name="GT1S1", endpoint="https://www.getcollate.io")
|
|
|
|
)
|
|
|
|
patched_glossary_term_1 = metadata.patch(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
2024-11-20 15:24:53 +01:00
|
|
|
source=glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.references) == 1
|
|
|
|
assert patched_glossary_term_1.references[0].name == "GT1S1"
|
2023-03-31 07:55:22 -07:00
|
|
|
|
|
|
|
# Remove reference
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1 = deepcopy(patched_glossary_term_1)
|
|
|
|
updated_glossary_term_1.references = []
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
metadata.patch(
|
|
|
|
entity=GlossaryTerm,
|
|
|
|
source=patched_glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
patched_glossary_term_1 = metadata.get_by_name(
|
2023-11-16 18:14:27 -08:00
|
|
|
entity=GlossaryTerm,
|
|
|
|
fqn=fqn._build(
|
2024-11-20 15:24:53 +01:00
|
|
|
glossary.name.root,
|
|
|
|
glossary_term_1.name.root,
|
2023-11-16 18:14:27 -08:00
|
|
|
),
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2023-11-16 18:14:27 -08:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.references) == 0
|
2023-03-31 07:55:22 -07:00
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
# Add many references
|
|
|
|
updated_glossary_term_1 = deepcopy(patched_glossary_term_1)
|
|
|
|
updated_glossary_term_1.references.append(
|
2023-11-16 18:14:27 -08:00
|
|
|
TermReference(name="GT1S1", endpoint="https://www.getcollate.io")
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1.references.append(
|
2023-11-16 18:14:27 -08:00
|
|
|
TermReference(name="GT1S2", endpoint="https://open-metadata.org/")
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
updated_glossary_term_1.references.append(
|
2023-11-16 18:14:27 -08:00
|
|
|
TermReference(
|
|
|
|
name="GT1S3", endpoint="https://github.com/open-metadata/OpenMetadata"
|
|
|
|
)
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
|
|
|
|
2024-11-20 15:24:53 +01:00
|
|
|
patched_glossary_term_1 = metadata.patch(
|
|
|
|
entity=GlossaryTerm,
|
|
|
|
source=patched_glossary_term_1,
|
|
|
|
destination=updated_glossary_term_1,
|
2023-03-31 07:55:22 -07:00
|
|
|
)
|
2024-11-20 15:24:53 +01:00
|
|
|
|
|
|
|
assert patched_glossary_term_1 is not None
|
|
|
|
assert len(patched_glossary_term_1.references) == 3
|
|
|
|
assert patched_glossary_term_1.references[1].name == "GT1S2"
|