Skip to content

Commit 058e0c4

Browse files
authored
Fix object templates being added in menu twice (#5815)
Also fix spam of warning logs due to this issue.
1 parent 43697d2 commit 058e0c4

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

backend/infrahub/core/node/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ def _get_parent_relationship_name(self) -> str | None:
864864

865865
async def get_object_template(self, db: InfrahubDatabase) -> Node | None:
866866
object_template: RelationshipManager = getattr(self, OBJECT_TEMPLATE_RELATIONSHIP_NAME, None)
867-
return None if not object_template else await object_template.get_peer(db=db)
867+
return await object_template.get_peer(db=db) if object_template is not None else None
868868

869869
def get_relationships(
870870
self, kind: RelationshipKind, exclude: Sequence[str] | None = None

backend/infrahub/menu/generator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ async def generate_menu(db: InfrahubDatabase, branch: Branch, menu_items: list[C
103103

104104
if schema.namespace == "Template":
105105
object_templates_menu.children[menu_item.identifier] = menu_item
106+
items_to_add[item_name] = True
106107
elif not schema.menu_placement:
107108
first_element = MenuItemDict.from_schema(model=schema)
108109
first_element.identifier = f"{first_element.identifier}Sub"

backend/tests/unit/graphql/test_mutation_create.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,6 +1184,48 @@ async def test_create_with_object_template(
11841184
assert sorted([(await sfp.interface.get_peer(db=db)).name.value for sfp in device_sfps]) == if_names
11851185

11861186

1187+
async def test_create_without_object_template(
1188+
db: InfrahubDatabase, default_branch: Branch, register_core_models_schema: SchemaBranch
1189+
):
1190+
registry.schema.register_schema(schema=DEVICE_SCHEMA, branch=default_branch.name)
1191+
1192+
query = """
1193+
mutation NewDevice($device_name: String!, $manufacturer: String!) {
1194+
TestingDeviceCreate(data: {
1195+
name: {value: $device_name}
1196+
manufacturer: {value: $manufacturer}
1197+
height: {value: 1}
1198+
weight: {value: 6}
1199+
airflow: {value: "Front to rear"}
1200+
}) {
1201+
ok
1202+
object {
1203+
id
1204+
}
1205+
}
1206+
}
1207+
"""
1208+
gql_params = await prepare_graphql_params(db=db, include_subscription=False, branch=default_branch)
1209+
1210+
result = await graphql(
1211+
schema=gql_params.schema,
1212+
source=query,
1213+
context_value=gql_params.context,
1214+
root_value=None,
1215+
variable_values={"device_name": "th2.par.asbr01", "manufacturer": "Juniper"},
1216+
)
1217+
assert not result.errors
1218+
1219+
device = await NodeManager.get_one(
1220+
db=db, kind="TestingDevice", branch=default_branch, id=result.data["TestingDeviceCreate"]["object"]["id"]
1221+
)
1222+
assert device
1223+
assert device.name.value == "th2.par.asbr01"
1224+
# Validate object not is linked to object template
1225+
device_template_node = await device.object_template.get_peer(db=db)
1226+
assert not device_template_node
1227+
1228+
11871229
# These tests have been moved at the end of the file to avoid colliding with other and breaking them
11881230

11891231

0 commit comments

Comments
 (0)