Skip to content

Commit d675591

Browse files
committed
IFC-1891: Update branch query filter path time condition
Fixes #7338
1 parent 13f0e64 commit d675591

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

backend/infrahub/core/branch/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ def get_query_filter_path(
356356
at = Timestamp(at)
357357
at_str = at.to_string()
358358
if branch_agnostic:
359-
filter_str = f"{variable_name}.from <= ${pp}time1 AND ({variable_name}.to IS NULL or {variable_name}.to >= ${pp}time1)"
359+
filter_str = f"{variable_name}.from < ${pp}time1 AND ({variable_name}.to IS NULL or {variable_name}.to >= ${pp}time1)"
360360
params[f"{pp}time1"] = at_str
361361
return filter_str, params
362362

@@ -369,10 +369,10 @@ def get_query_filter_path(
369369
filters = []
370370
for idx in range(len(branches_times)):
371371
filters.append(
372-
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from <= ${pp}time{idx} AND {variable_name}.to IS NULL)"
372+
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from < ${pp}time{idx} AND {variable_name}.to IS NULL)"
373373
)
374374
filters.append(
375-
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from <= ${pp}time{idx} AND {variable_name}.to >= ${pp}time{idx})"
375+
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from < ${pp}time{idx} AND {variable_name}.to >= ${pp}time{idx})"
376376
)
377377

378378
filter_str = "(" + "\n OR ".join(filters) + ")"

backend/tests/unit/core/test_branch_merge.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,60 @@ async def test_merge_relationship_many(
140140
assert len(await org1_main.tags.get(db=db)) == 3
141141

142142

143+
async def test_merge_relationship_one(
144+
db: InfrahubDatabase,
145+
person_tag_schema: None,
146+
default_branch: Branch,
147+
tag_blue_main: Node,
148+
tag_red_main: Node,
149+
tag_black_main: Node,
150+
person_jack_main: Node,
151+
):
152+
await person_jack_main.primary_tag.update(db=db, data=[tag_blue_main])
153+
await person_jack_main.save(db=db)
154+
155+
branch1 = await create_branch(db=db, branch_name="branch1")
156+
component_registry = get_component_registry()
157+
diff_coordinator = await component_registry.get_component(DiffCoordinator, db=db, branch=branch1)
158+
159+
person_jack_branch = await NodeManager.get_one(id=person_jack_main.id, branch=branch1, db=db)
160+
await person_jack_branch.primary_tag.update(db=db, data=[tag_red_main])
161+
await person_jack_branch.save(db=db)
162+
163+
await diff_coordinator.update_branch_diff(base_branch=default_branch, diff_branch=branch1)
164+
diff_merger = await component_registry.get_component(DiffMerger, db=db, branch=branch1)
165+
await diff_merger.merge_graph(at=Timestamp())
166+
167+
# check person on main
168+
fresh_jack_on_main = await NodeManager.get_one(db=db, id=person_jack_main.id)
169+
tag_rels = await fresh_jack_on_main.primary_tag.get_relationships(db=db)
170+
assert len(tag_rels) == 1
171+
assert tag_rels[0].peer_id == tag_red_main.id
172+
173+
# update person on main
174+
await fresh_jack_on_main.primary_tag.update(db=db, data=[tag_black_main])
175+
await fresh_jack_on_main.save(db=db)
176+
refreshed_jack_on_main = await NodeManager.get_one(db=db, id=person_jack_main.id)
177+
tag_rels = await refreshed_jack_on_main.primary_tag.get_relationships(db=db)
178+
assert len(tag_rels) == 1
179+
assert tag_rels[0].peer_id == tag_black_main.id
180+
181+
# check person on branch
182+
fresh_jack_on_branch = await NodeManager.get_one(db=db, branch=branch1, id=person_jack_main.id)
183+
tag_rels = await fresh_jack_on_branch.primary_tag.get_relationships(db=db)
184+
assert len(tag_rels) == 1
185+
assert tag_rels[0].peer_id == tag_red_main.id
186+
187+
# update person on branch
188+
await fresh_jack_on_branch.primary_tag.update(db=db, data=[tag_black_main])
189+
await fresh_jack_on_branch.save(db=db)
190+
refreshed_jack_on_branch = await NodeManager.get_one(db=db, branch=branch1, id=person_jack_main.id)
191+
192+
tag_rels = await refreshed_jack_on_branch.primary_tag.get_relationships(db=db)
193+
assert len(tag_rels) == 1
194+
assert tag_rels[0].peer_id == tag_black_main.id
195+
196+
143197
async def test_merge_update_schema(
144198
db: InfrahubDatabase,
145199
default_branch: Branch,

changelog/7338.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed filter based on path relationship condition

0 commit comments

Comments
 (0)