|
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