Skip to content

Commit 56ba4b5

Browse files
committed
[tests] Added integration tests for Procedure.creator/updater() methods
1 parent b9004f3 commit 56ba4b5

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

pyatlan/generator/templates/methods/asset/procedure.jinja2

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,23 @@
4646
connection_qualified_name=connection_qualified_name,
4747
)
4848
return cls(attributes=attributes)
49+
50+
@classmethod
51+
@init_guid
52+
def updater(cls, *, name: str, qualified_name: str, definition: str) -> Procedure:
53+
validate_required_fields(
54+
["name", "qualified_name", "definition"],
55+
[name, qualified_name, definition],
56+
)
57+
procedure = Procedure(
58+
attributes=Procedure.Attributes(qualified_name=qualified_name, name=name)
59+
)
60+
procedure.definition = definition
61+
return procedure
62+
63+
def trim_to_required(self: Procedure) -> Procedure:
64+
return self.updater(
65+
qualified_name=self.qualified_name or "",
66+
name=self.name or "",
67+
definition=self.definition or "",
68+
)

pyatlan/model/assets/core/procedure.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,26 @@ def creator(
6666
)
6767
return cls(attributes=attributes)
6868

69+
@classmethod
70+
@init_guid
71+
def updater(cls, *, name: str, qualified_name: str, definition: str) -> Procedure:
72+
validate_required_fields(
73+
["name", "qualified_name", "definition"],
74+
[name, qualified_name, definition],
75+
)
76+
procedure = Procedure(
77+
attributes=Procedure.Attributes(qualified_name=qualified_name, name=name)
78+
)
79+
procedure.definition = definition
80+
return procedure
81+
82+
def trim_to_required(self: Procedure) -> Procedure:
83+
return self.updater(
84+
qualified_name=self.qualified_name or "",
85+
name=self.name or "",
86+
definition=self.definition or "",
87+
)
88+
6989
type_name: str = Field(default="Procedure", allow_mutation=False)
7090

7191
@validator("type_name")

tests/integration/test_sql_assets.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
Column,
1313
Connection,
1414
Database,
15+
Procedure,
1516
Readme,
1617
Schema,
1718
Table,
@@ -548,6 +549,98 @@ def test_trim_to_required(
548549
assert response.mutated_entities is None
549550

550551

552+
@pytest.mark.order(after="TestView")
553+
class TestProcedure:
554+
procedure: Optional[Procedure] = None
555+
_DEFINITION = """
556+
BEGIN
557+
insert into `atlanhq.testing_lineage.INSTACART_ALCOHOL_ORDER_TIME_copy`
558+
select * from `atlanhq.testing_lineage.INSTACART_ALCOHOL_ORDER_TIME`;
559+
END
560+
"""
561+
562+
def test_creator(
563+
self,
564+
client: AtlanClient,
565+
upsert: Callable[[Asset], AssetMutationResponse],
566+
):
567+
procedure_name = TestId.make_unique("My_Procedure")
568+
assert TestSchema.schema is not None
569+
assert TestSchema.schema.qualified_name
570+
procedure = Procedure.creator(
571+
name=procedure_name,
572+
definition=self._DEFINITION,
573+
schema_qualified_name=TestSchema.schema.qualified_name,
574+
)
575+
response = upsert(procedure)
576+
assert response.mutated_entities
577+
assert response.mutated_entities.CREATE
578+
assert len(response.mutated_entities.CREATE) == 1
579+
assert isinstance(response.mutated_entities.CREATE[0], Procedure)
580+
assert response.guid_assignments
581+
procedure = response.mutated_entities.CREATE[0]
582+
TestProcedure.procedure = procedure
583+
584+
def test_overload_creator(
585+
self,
586+
client: AtlanClient,
587+
upsert: Callable[[Asset], AssetMutationResponse],
588+
):
589+
procedure_name = TestId.make_unique("My_Procedure_Overload")
590+
assert TestDatabase.database is not None
591+
assert TestDatabase.database.name
592+
assert TestDatabase.database.qualified_name
593+
assert TestSchema.schema is not None
594+
assert TestSchema.schema.name
595+
assert TestSchema.schema.qualified_name
596+
assert TestConnection.connection is not None
597+
assert TestConnection.connection.qualified_name
598+
599+
procedure = Procedure.creator(
600+
name=procedure_name,
601+
definition=self._DEFINITION,
602+
schema_name=TestSchema.schema.name,
603+
schema_qualified_name=TestSchema.schema.qualified_name,
604+
database_name=TestDatabase.database.name,
605+
database_qualified_name=TestDatabase.database.qualified_name,
606+
connection_qualified_name=TestConnection.connection.qualified_name,
607+
)
608+
response = upsert(procedure)
609+
assert response.mutated_entities
610+
assert response.mutated_entities.CREATE
611+
assert len(response.mutated_entities.CREATE) == 1
612+
assert isinstance(response.mutated_entities.CREATE[0], Procedure)
613+
assert response.guid_assignments
614+
615+
@pytest.mark.order(after="test_creator")
616+
def test_updater(
617+
self, client: AtlanClient, upsert: Callable[[Asset], AssetMutationResponse]
618+
):
619+
assert TestProcedure.procedure
620+
procedure = TestProcedure.procedure
621+
assert procedure.qualified_name
622+
assert procedure.name
623+
assert procedure.definition
624+
description = f"{procedure.description} more stuff"
625+
procedure = Procedure.updater(
626+
qualified_name=procedure.qualified_name,
627+
name=procedure.name,
628+
definition=procedure.definition,
629+
)
630+
procedure.description = description
631+
response = upsert(procedure)
632+
verify_asset_updated(response, Procedure)
633+
634+
@pytest.mark.order(after="test_creator")
635+
def test_trim_to_required(
636+
self, client: AtlanClient, upsert: Callable[[Asset], AssetMutationResponse]
637+
):
638+
assert TestProcedure.procedure
639+
procedure = TestProcedure.procedure.trim_to_required()
640+
response = upsert(procedure)
641+
assert response.mutated_entities is None
642+
643+
551644
@pytest.mark.order(after="TestView")
552645
class TestColumn:
553646
column: Optional[Column] = None

0 commit comments

Comments
 (0)