@@ -695,3 +695,54 @@ async def test_relationship_add_from_pool(
695695 addresses = await p1 .ip_addresses .get (db = db )
696696 assert prefixes
697697 assert not addresses
698+
699+
700+ # See #4649
701+ async def test_add_generic_related_node_with_hfid (
702+ db : InfrahubDatabase ,
703+ default_branch : Branch ,
704+ generic_car_person_schema ,
705+ ):
706+ electric_car = await Node .init (db = db , schema = "TestElectricCar" , branch = default_branch )
707+ await electric_car .new (db = db , name = "testing-car" , color = "blue" )
708+ await electric_car .save (db = db )
709+
710+ person = await Node .init (db = db , schema = "TestPerson" , branch = default_branch )
711+ await person .new (db = db , name = "testing-person" )
712+ await person .save (db = db )
713+
714+ query = """
715+ mutation {
716+ TestPersonUpdate(data: {
717+ id: "%s",
718+ car: {
719+ hfid: ["testing-car", "blue"],
720+ kind: "TestElectricCar"
721+ }
722+ }) {
723+ ok
724+ object {
725+ id
726+ car {
727+ node {
728+ name {
729+ value
730+ }
731+ }
732+ }
733+ }
734+ }
735+ }
736+ """ % (person .id )
737+
738+ gql_params = prepare_graphql_params (db = db , include_subscription = False , branch = default_branch )
739+
740+ result = await graphql (
741+ schema = gql_params .schema ,
742+ source = query ,
743+ context_value = gql_params .context ,
744+ root_value = None ,
745+ variable_values = {},
746+ )
747+ assert result .errors is None
748+ assert result .data ["TestPersonUpdate" ]["object" ]["car" ]["node" ]["name" ]["value" ] == "testing-car"
0 commit comments