Просмотр исходного кода

Fixes #22207: Fix GraphQL `object_type` field for table configurations (#22214)

Martin Hauser 2 дней назад
Родитель
Сommit
25bc127d93
2 измененных файлов с 24 добавлено и 0 удалено
  1. 1 0
      netbox/extras/graphql/types.py
  2. 23 0
      netbox/netbox/tests/test_graphql.py

+ 1 - 0
netbox/extras/graphql/types.py

@@ -204,6 +204,7 @@ class SubscriptionType(ObjectType):
     pagination=True
 )
 class TableConfigType(ObjectType):
+    object_type: Annotated["ContentTypeType", strawberry.lazy('netbox.graphql.types')] | None
     user: Annotated["UserType", strawberry.lazy('users.graphql.types')] | None
 
 

+ 23 - 0
netbox/netbox/tests/test_graphql.py

@@ -1,6 +1,7 @@
 import json
 
 import strawberry
+from django.contrib.contenttypes.models import ContentType
 from django.test import override_settings
 from django.urls import reverse
 from rest_framework import status
@@ -9,8 +10,10 @@ from strawberry.schema.config import StrawberryConfig
 
 from dcim.choices import LocationStatusChoices
 from dcim.models import Device, DeviceRole, DeviceType, Location, Manufacturer, Site, VirtualChassis
+from extras.models import TableConfig
 from netbox.graphql.scalars import BigInt, BigIntScalar
 from netbox.graphql.schema import Query, get_schema_extensions
+from utilities.tables import get_table_for_model
 from utilities.testing import APITestCase, TestCase, disable_warnings
 
 
@@ -216,6 +219,26 @@ class GraphQLAPITestCase(APITestCase):
         self.assertNotIn('errors', data)
         self.assertEqual(len(data['data']['device_list']), 3)
 
+    def test_graphql_tableconfig_object_type_exposes_id(self):
+        """TableConfigType.object_type must expose ContentType fields (e.g. id)."""
+        self.add_permissions('extras.view_tableconfig')
+        url = reverse('graphql')
+
+        site_ct = ContentType.objects.get_for_model(Site)
+        table_config = TableConfig.objects.create(
+            object_type=site_ct,
+            table=get_table_for_model(Site).__name__,
+            name='Test config',
+            columns=['name'],
+        )
+
+        query = '{ table_config(id: ' + str(table_config.pk) + ') { object_type { id } } }'
+        response = self.client.post(url, data={'query': query}, format='json', **self.header)
+        self.assertHttpStatus(response, status.HTTP_200_OK)
+        data = json.loads(response.content)
+        self.assertNotIn('errors', data)
+        self.assertEqual(int(data['data']['table_config']['object_type']['id']), site_ct.pk)
+
     def test_offset_pagination(self):
         self.add_permissions('dcim.view_site')
         url = reverse('graphql')