Skip to content

Commit de1d997

Browse files
committed
add unit test for creating and retrieving with metadata
1 parent d5e3bb5 commit de1d997

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

backend/infrahub/core/node/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,8 @@ async def _create(self, db: InfrahubDatabase, user_id: str, at: Timestamp | None
814814
create_at = Timestamp(at)
815815
self.set_created_at(create_at)
816816
self.set_created_by(user_id)
817+
self.set_updated_at(create_at)
818+
self.set_updated_by(user_id)
817819

818820
if not self._schema.is_schema_node:
819821
await self.add_human_friendly_id(db=db)

backend/tests/unit/core/test_node.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,58 @@ async def test_node_create_with_object_template(
897897
)
898898

899899

900+
async def test_node_create_user_timestamp_metadata(
901+
db: InfrahubDatabase, default_branch: Branch, criticality_schema
902+
) -> None:
903+
# Assume test user id for created_by
904+
test_user_id = "user-123"
905+
906+
# Create object on default branch
907+
obj = await Node.init(db=db, schema=criticality_schema)
908+
await obj.new(db=db, name="low", level=2)
909+
before_create_default = Timestamp()
910+
await obj.save(db=db, user_id=test_user_id)
911+
after_create_default = Timestamp()
912+
913+
# validate created object on default branch
914+
assert before_create_default < obj.get_created_at() < after_create_default
915+
assert obj.get_created_by() == test_user_id
916+
assert obj.get_updated_at() == obj.get_created_at()
917+
assert obj.get_updated_by() == test_user_id
918+
919+
# Retrieve node and validate metadata
920+
retrieved_obj = await NodeManager.get_one(db=db, id=obj.id, include_metadata=MetadataOptions.USER_TIMESTAMPS)
921+
assert retrieved_obj.get_created_at() == obj.get_created_at()
922+
assert retrieved_obj.get_created_by() == obj.get_created_by()
923+
assert retrieved_obj.get_updated_at() == obj.get_updated_at()
924+
assert retrieved_obj.get_updated_by() == obj.get_updated_by()
925+
926+
# Create a branch and create another object on the branch
927+
branch1 = await create_branch(branch_name="branch1", db=db)
928+
branch_user_id = "user-456"
929+
930+
obj_branch = await Node.init(db=db, schema=criticality_schema, branch=branch1)
931+
await obj_branch.new(db=db, name="medium", level=3)
932+
before_create_branch = Timestamp()
933+
await obj_branch.save(db=db, user_id=branch_user_id)
934+
after_create_branch = Timestamp()
935+
936+
# Validate created object on branch
937+
assert before_create_branch < obj_branch.get_created_at() < after_create_branch
938+
assert obj_branch.get_created_by() == branch_user_id
939+
assert obj_branch.get_updated_at() == obj_branch.get_created_at()
940+
assert obj_branch.get_updated_by() == branch_user_id
941+
942+
# Retrieve node from branch and validate metadata
943+
retrieved_obj_branch = await NodeManager.get_one(
944+
db=db, id=obj_branch.id, branch=branch1, include_metadata=MetadataOptions.USER_TIMESTAMPS
945+
)
946+
assert retrieved_obj_branch.get_created_at() == obj_branch.get_created_at()
947+
assert retrieved_obj_branch.get_created_by() == obj_branch.get_created_by()
948+
assert retrieved_obj_branch.get_updated_at() == obj_branch.get_updated_at()
949+
assert retrieved_obj_branch.get_updated_by() == obj_branch.get_updated_by()
950+
951+
900952
# --------------------------------------------------------------------------
901953
# Update
902954
# --------------------------------------------------------------------------

0 commit comments

Comments
 (0)