| 
8 | 8 | from infrahub.core.diff.calculator import DiffCalculator  | 
9 | 9 | from infrahub.core.diff.combiner import DiffCombiner  | 
10 | 10 | from infrahub.core.diff.coordinator import DiffCoordinator  | 
11 |  | -from infrahub.core.diff.model.path import BranchTrackingId, EnrichedDiffRootMetadata  | 
 | 11 | +from infrahub.core.diff.model.path import BranchTrackingId, EnrichedDiffRootMetadata, NameTrackingId  | 
12 | 12 | from infrahub.core.diff.repository.repository import DiffRepository  | 
13 | 13 | from infrahub.core.initialization import create_branch  | 
14 | 14 | from infrahub.core.manager import NodeManager  | 
@@ -240,3 +240,64 @@ async def test_unrelated_changes_skip_some_expensive_operations(  | 
240 | 240 |         )  | 
241 | 241 |         assert no_changes_diff.from_time == no_changes_diff_metadata.from_time == diff_with_data.from_time  | 
242 | 242 |         assert no_changes_diff.to_time == no_changes_diff_metadata.to_time  | 
 | 243 | + | 
 | 244 | +    async def test_diff_on_default_branch_only(  | 
 | 245 | +        self,  | 
 | 246 | +        db: InfrahubDatabase,  | 
 | 247 | +        default_branch: Branch,  | 
 | 248 | +        person_john_main: Node,  | 
 | 249 | +        person_jane_main: Node,  | 
 | 250 | +        person_alfred_main: Node,  | 
 | 251 | +        car_camry_main: Node,  | 
 | 252 | +        car_accord_main: Node,  | 
 | 253 | +    ) -> None:  | 
 | 254 | +        branch = await create_branch(db=db, branch_name="branch1")  | 
 | 255 | + | 
 | 256 | +        updated_person = await NodeManager.get_one(db=db, id=person_john_main.id)  | 
 | 257 | +        updated_person.height.value = 200  | 
 | 258 | +        await updated_person.save(db=db)  | 
 | 259 | + | 
 | 260 | +        new_person = await Node.init(db=db, schema="TestPerson", branch=default_branch)  | 
 | 261 | +        await new_person.new(db=db, name="Jeff", height=170)  | 
 | 262 | +        await new_person.save(db=db)  | 
 | 263 | + | 
 | 264 | +        deleted_person = await NodeManager.get_one(db=db, id=person_alfred_main.id)  | 
 | 265 | +        await deleted_person.delete(db=db)  | 
 | 266 | + | 
 | 267 | +        updated_car = await NodeManager.get_one(db=db, id=car_accord_main.id)  | 
 | 268 | +        await updated_car.owner.update(db=db, data=new_person)  | 
 | 269 | +        await updated_car.save(db=db)  | 
 | 270 | + | 
 | 271 | +        from_time = Timestamp(branch.get_branched_from())  | 
 | 272 | +        to_time = Timestamp()  | 
 | 273 | +        name = str(uuid4())  | 
 | 274 | +        diff_coordinator = await self.get_wrapped_diff_coordinator(db=db, branch=default_branch)  | 
 | 275 | +        component_registry = get_component_registry()  | 
 | 276 | +        diff_repository = await component_registry.get_component(DiffRepository, db=db, branch=default_branch)  | 
 | 277 | +        main_diff_metadata = await diff_coordinator.create_or_update_arbitrary_timeframe_diff(  | 
 | 278 | +            base_branch=default_branch, diff_branch=default_branch, from_time=from_time, to_time=to_time, name=name  | 
 | 279 | +        )  | 
 | 280 | +        main_diff = await diff_repository.get_one(diff_branch_name=default_branch.name, diff_id=main_diff_metadata.uuid)  | 
 | 281 | + | 
 | 282 | +        assert main_diff.base_branch_name == default_branch.name  | 
 | 283 | +        assert main_diff.diff_branch_name == default_branch.name  | 
 | 284 | +        assert main_diff.from_time == from_time  | 
 | 285 | +        assert main_diff.to_time == to_time  | 
 | 286 | +        assert main_diff.tracking_id == NameTrackingId(name=name)  | 
 | 287 | +        assert len(main_diff.nodes) == 4  | 
 | 288 | +        nodes_by_id = {n.uuid: n for n in main_diff.nodes}  | 
 | 289 | +        assert set(nodes_by_id.keys()) == {updated_person.id, new_person.id, deleted_person.id, updated_car.id}  | 
 | 290 | +        new_person_diff = nodes_by_id[new_person.id]  | 
 | 291 | +        assert new_person_diff.action is DiffAction.ADDED  | 
 | 292 | +        deleted_person_diff = nodes_by_id[deleted_person.id]  | 
 | 293 | +        assert deleted_person_diff.action is DiffAction.REMOVED  | 
 | 294 | +        updated_car_diff = nodes_by_id[updated_car.id]  | 
 | 295 | +        assert updated_car_diff.action is DiffAction.UPDATED  | 
 | 296 | +        assert updated_car_diff.attributes == set()  | 
 | 297 | +        rel_diffs = {(r.name, r.action) for r in updated_car_diff.relationships}  | 
 | 298 | +        assert rel_diffs == {("owner", DiffAction.UPDATED)}  | 
 | 299 | +        updated_person_diff = nodes_by_id[updated_person.id]  | 
 | 300 | +        rel_diffs = {(r.name, r.action) for r in updated_person_diff.relationships}  | 
 | 301 | +        assert rel_diffs == {("cars", DiffAction.UPDATED)}  | 
 | 302 | +        attr_diffs = {(a.name, a.action) for a in updated_person_diff.attributes}  | 
 | 303 | +        assert attr_diffs == {("height", DiffAction.UPDATED)}  | 
0 commit comments