Skip to content

Commit 6786a2f

Browse files
committed
update InfrahubNodeSync too, add unit test
1 parent bc264e4 commit 6786a2f

3 files changed

Lines changed: 59 additions & 7 deletions

File tree

infrahub_sdk/node/node.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,11 +1090,18 @@ def _init_relationships(self, data: dict | None = None) -> None:
10901090

10911091
if rel_schema.cardinality == "one":
10921092
if isinstance(rel_data, RelatedNodeSync):
1093-
self._relationship_cardinality_one_data[rel_schema.name] = rel_data
1094-
else:
1095-
self._relationship_cardinality_one_data[rel_schema.name] = RelatedNodeSync(
1096-
name=rel_schema.name, branch=self._branch, client=self._client, schema=rel_schema, data=rel_data
1097-
)
1093+
peer_id_data: dict[str, Any] = {}
1094+
if rel_data.id:
1095+
peer_id_data["id"] = rel_data.id
1096+
if rel_data.hfid:
1097+
peer_id_data["hfid"] = rel_data.hfid
1098+
if peer_id_data:
1099+
rel_data = peer_id_data
1100+
else:
1101+
rel_data = None
1102+
self._relationship_cardinality_one_data[rel_schema.name] = RelatedNodeSync(
1103+
name=rel_schema.name, branch=self._branch, client=self._client, schema=rel_schema, data=rel_data
1104+
)
10981105
else:
10991106
self._relationship_cardinality_many_data[rel_schema.name] = RelationshipManagerSync(
11001107
name=rel_schema.name,

tests/integration/test_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ async def test_node_create_with_relationships_using_related_node(
7474
):
7575
related_node = car_golf.owner
7676
node = await client.create(
77-
kind=TESTING_CAR, name="CoolerTiguan", color="Black", manufacturer=manufacturer_mercedes, owner=related_node
77+
kind=TESTING_CAR, name="Tiguan", color="Black", manufacturer=manufacturer_mercedes, owner=related_node
7878
)
79-
await node.save()
79+
await node.save(allow_upsert=True)
8080
assert node.id is not None
8181

8282
node_after = await client.get(kind=TESTING_CAR, id=node.id, prefetch_relationships=True)

tests/unit/sdk/test_node.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
parse_human_friendly_id,
1616
)
1717
from infrahub_sdk.node.constants import SAFE_VALUE
18+
from infrahub_sdk.node.related_node import RelatedNode, RelatedNodeSync
1819
from infrahub_sdk.schema import GenericSchema, NodeSchemaAPI
1920

2021
if TYPE_CHECKING:
@@ -194,6 +195,50 @@ async def test_init_node_data_user_with_relationships(client, location_schema: N
194195
assert "get_kind" in keys
195196

196197

198+
@pytest.mark.parametrize("client_type", client_types)
199+
async def test_init_node_data_user_with_relationships_using_related_node(
200+
client, location_schema: NodeSchemaAPI, client_type
201+
):
202+
rel_schema = location_schema.get_relationship(name="primary_tag")
203+
if client_type == "standard":
204+
primary_tag = RelatedNode(
205+
name="primary_tag", branch="main", client=client, schema=rel_schema, data={"id": "pppppppp"}
206+
)
207+
else:
208+
primary_tag = RelatedNodeSync(
209+
name="primary_tag", branch="main", client=client, schema=rel_schema, data={"id": "pppppppp"}
210+
)
211+
212+
data = {
213+
"name": {"value": "JFK1"},
214+
"description": {"value": "JFK Airport"},
215+
"type": {"value": "SITE"},
216+
"primary_tag": primary_tag,
217+
"tags": [{"id": "aaaaaa"}, {"id": "bbbb"}],
218+
}
219+
if client_type == "standard":
220+
node = InfrahubNode(client=client, schema=location_schema, data=data)
221+
else:
222+
node = InfrahubNodeSync(client=client, schema=location_schema, data=data)
223+
224+
assert node.name.value == "JFK1"
225+
assert node.name.is_protected is None
226+
assert node.description.value == "JFK Airport"
227+
assert node.type.value == "SITE"
228+
229+
assert isinstance(node.tags, RelationshipManagerBase)
230+
assert len(node.tags.peers) == 2
231+
assert isinstance(node.tags.peers[0], RelatedNodeBase)
232+
assert isinstance(node.primary_tag, RelatedNodeBase)
233+
assert node.primary_tag.id == "pppppppp"
234+
235+
keys = dir(node)
236+
assert "name" in keys
237+
assert "type" in keys
238+
assert "tags" in keys
239+
assert "get_kind" in keys
240+
241+
197242
@pytest.mark.parametrize("property_test", property_tests)
198243
@pytest.mark.parametrize("client_type", client_types)
199244
async def test_init_node_data_graphql(

0 commit comments

Comments
 (0)