Skip to content

Commit dc924d8

Browse files
committed
IFC-1891: Update branch query filter path time condition
Fixes #7338
1 parent 14fcce2 commit dc924d8

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
@@ -335,7 +335,7 @@ def get_query_filter_path(
335335
at = Timestamp(at)
336336
at_str = at.to_string()
337337
if branch_agnostic:
338-
filter_str = f"{variable_name}.from <= ${pp}time1 AND ({variable_name}.to IS NULL or {variable_name}.to >= ${pp}time1)"
338+
filter_str = f"{variable_name}.from < ${pp}time1 AND ({variable_name}.to IS NULL or {variable_name}.to >= ${pp}time1)"
339339
params[f"{pp}time1"] = at_str
340340
return filter_str, params
341341

@@ -348,10 +348,10 @@ def get_query_filter_path(
348348
filters = []
349349
for idx in range(len(branches_times)):
350350
filters.append(
351-
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from <= ${pp}time{idx} AND {variable_name}.to IS NULL)"
351+
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from < ${pp}time{idx} AND {variable_name}.to IS NULL)"
352352
)
353353
filters.append(
354-
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from <= ${pp}time{idx} AND {variable_name}.to >= ${pp}time{idx})"
354+
f"({variable_name}.branch IN ${pp}branch{idx} AND {variable_name}.from < ${pp}time{idx} AND {variable_name}.to >= ${pp}time{idx})"
355355
)
356356

357357
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
@@ -139,6 +139,60 @@ async def test_merge_relationship_many(
139139
assert len(await org1_main.tags.get(db=db)) == 3
140140

141141

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