Skip to content

Commit ea9907b

Browse files
authored
Merge pull request #4670 from opsmill/dga-20241020-fix-4482
Ensure the HFID of a related node is properly returned via GraphQL
2 parents b072df3 + 033c6db commit ea9907b

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

backend/infrahub/core/manager.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,12 @@ async def query_peers(
372372
if display_label_fields:
373373
fields = deep_merge_dict(dicta=fields, dictb=display_label_fields)
374374

375+
if fields and "hfid" in fields:
376+
peer_schema = schema.get_peer_schema(db=db, branch=branch)
377+
hfid_fields = peer_schema.generate_fields_for_hfid()
378+
if hfid_fields:
379+
fields = deep_merge_dict(dicta=fields, dictb=hfid_fields)
380+
375381
if fetch_peers:
376382
peer_ids = [peer.peer_id for peer in peers_info]
377383
peer_nodes = await cls.get_many(

backend/tests/unit/graphql/test_graphql_query.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,59 @@ async def test_display_hfid(db: InfrahubDatabase, default_branch: Branch, animal
316316
}
317317

318318

319+
async def test_display_hfid_related_node(
320+
db: InfrahubDatabase, default_branch: Branch, animal_person_schema: SchemaBranch
321+
):
322+
person_schema = animal_person_schema.get(name="TestPerson")
323+
dog_schema = animal_person_schema.get(name="TestDog")
324+
325+
person1 = await Node.init(db=db, schema=person_schema, branch=default_branch)
326+
await person1.new(db=db, name="Jack")
327+
await person1.save(db=db)
328+
329+
dog1 = await Node.init(db=db, schema=dog_schema, branch=default_branch)
330+
await dog1.new(db=db, name="Rocky", breed="Labrador", owner=person1)
331+
await dog1.save(db=db)
332+
333+
query = """
334+
query {
335+
TestPerson {
336+
edges {
337+
node {
338+
hfid
339+
animals {
340+
edges {
341+
node {
342+
hfid
343+
}
344+
}
345+
}
346+
}
347+
}
348+
}
349+
}
350+
"""
351+
gql_params = prepare_graphql_params(
352+
db=db, include_mutation=False, include_subscription=False, branch=default_branch
353+
)
354+
result = await graphql(
355+
schema=gql_params.schema,
356+
source=query,
357+
context_value=gql_params.context,
358+
root_value=None,
359+
variable_values={},
360+
)
361+
362+
assert result.errors is None
363+
assert len(result.data["TestPerson"]["edges"]) == 1
364+
assert result.data["TestPerson"]["edges"][0] == {
365+
"node": {
366+
"animals": {"edges": [{"node": {"hfid": ["Jack", "Rocky"]}}]},
367+
"hfid": ["Jack"],
368+
},
369+
}
370+
371+
319372
async def test_display_label_generic(db: InfrahubDatabase, default_branch: Branch, animal_person_schema: SchemaBranch):
320373
person_schema = animal_person_schema.get(name="TestPerson")
321374
dog_schema = animal_person_schema.get(name="TestDog")

changelog/4482.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
The HFID of a related node is properly returned via GraphQL in all scenarios

0 commit comments

Comments
 (0)