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

This commit is contained in:
Martin Hauser 2026-05-18 21:40:27 +02:00 committed by GitHub
parent 84f466877d
commit 25bc127d93
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 0 deletions

View File

@ -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

View File

@ -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')