Procházet zdrojové kódy

Fixes #23469: Apply the status prefix to the GraphQL CircuitStatusEnum (#23496)

CircuitStatusChoices.as_enum() was passed 'status' as the enum name
rather than its prefix, exposing the enum as "status" with unprefixed
values.
Jeremy Stretch před 2 dny
rodič
revize
d2238fc36d

+ 1 - 1
docs/integrations/graphql-api.md

@@ -11,7 +11,7 @@ curl -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -H "Accept: application/json" \
 http://netbox/graphql/ \
---data '{"query": "query {circuit_list(filters:{status: {exact: ACTIVE}}) {cid provider {name}}}"}'
+--data '{"query": "query {circuit_list(filters:{status: {exact: STATUS_ACTIVE}}) {cid provider {name}}}"}'
 ```
 
 The response will include the requested data formatted as JSON:

+ 1 - 1
netbox/circuits/graphql/enums.py

@@ -11,6 +11,6 @@ __all__ = (
 
 
 CircuitPriorityEnum = strawberry.enum(CircuitPriorityChoices.as_enum(prefix='priority'))
-CircuitStatusEnum = strawberry.enum(CircuitStatusChoices.as_enum('status'))
+CircuitStatusEnum = strawberry.enum(CircuitStatusChoices.as_enum(prefix='status'))
 CircuitTerminationSideEnum = strawberry.enum(CircuitTerminationSideChoices.as_enum(prefix='side'))
 VirtualCircuitTerminationRoleEnum = strawberry.enum(VirtualCircuitTerminationRoleChoices.as_enum(prefix='role'))

+ 13 - 0
netbox/circuits/tests/test_api.py

@@ -241,6 +241,19 @@ class CircuitTestCase(APIViewTestCases.APIViewTestCase):
         self.assertEqual(circuit.description, 'New description')
         self.assertEqual(list(circuit.group_assignments.all()), [assignment])
 
+    @tag('regression')  # Ref: #23469
+    def test_graphql_filter_by_status(self):
+        """Circuits can be filtered by status in GraphQL using the prefixed enum values."""
+        self.add_permissions('circuits.view_circuit')
+        Circuit.objects.filter(cid='Circuit 1').update(status=CircuitStatusChoices.STATUS_PLANNED)
+
+        query = '{ circuit_list(filters: {status: {exact: STATUS_PLANNED}}) { cid } }'
+        response = self.client.post(reverse('graphql'), data={'query': query}, format='json', **self.header)
+        self.assertHttpStatus(response, status.HTTP_200_OK)
+        data = response.json()
+        self.assertNotIn('errors', data)
+        self.assertEqual([circuit['cid'] for circuit in data['data']['circuit_list']], ['Circuit 1'])
+
 
 class CircuitTerminationTestCase(APIViewTestCases.APIViewTestCase):
     model = CircuitTermination