mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-03-09 18:51:25 +00:00
64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
from django.core.management import call_command
|
|
from django.core.management.base import CommandError
|
|
from rest_framework import status
|
|
from rest_framework.test import APITestCase
|
|
|
|
|
|
class TestApiSchema(APITestCase):
|
|
ENDPOINT = "/api/schema/"
|
|
|
|
def test_valid_schema(self) -> None:
|
|
"""
|
|
Test that the schema is valid
|
|
"""
|
|
try:
|
|
call_command("spectacular", "--validate", "--fail-on-warn")
|
|
except CommandError as e:
|
|
self.fail(f"Schema validation failed: {e}")
|
|
|
|
def test_get_schema_endpoints(self) -> None:
|
|
"""
|
|
Test that the schema endpoints exist and return a 200 status code
|
|
"""
|
|
schema_response = self.client.get(self.ENDPOINT)
|
|
self.assertEqual(schema_response.status_code, status.HTTP_200_OK)
|
|
|
|
ui_response = self.client.get(self.ENDPOINT + "view/")
|
|
self.assertEqual(ui_response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_schema_includes_dedicated_document_edit_endpoints(self) -> None:
|
|
schema_response = self.client.get(self.ENDPOINT)
|
|
self.assertEqual(schema_response.status_code, status.HTTP_200_OK)
|
|
|
|
paths = schema_response.data["paths"]
|
|
self.assertIn("/api/documents/delete/", paths)
|
|
self.assertIn("/api/documents/reprocess/", paths)
|
|
self.assertIn("/api/documents/rotate/", paths)
|
|
self.assertIn("/api/documents/merge/", paths)
|
|
self.assertIn("/api/documents/edit_pdf/", paths)
|
|
self.assertIn("/api/documents/remove_password/", paths)
|
|
|
|
def test_schema_bulk_edit_advertises_legacy_document_action_methods(self) -> None:
|
|
schema_response = self.client.get(self.ENDPOINT)
|
|
self.assertEqual(schema_response.status_code, status.HTTP_200_OK)
|
|
|
|
schema = schema_response.data["components"]["schemas"]
|
|
bulk_schema = schema["BulkEditRequest"]
|
|
method_schema = bulk_schema["properties"]["method"]
|
|
|
|
# drf-spectacular emits the enum as a referenced schema for this field
|
|
enum_ref = method_schema["allOf"][0]["$ref"].split("/")[-1]
|
|
advertised_methods = schema[enum_ref]["enum"]
|
|
|
|
for action_method in [
|
|
"delete",
|
|
"reprocess",
|
|
"rotate",
|
|
"merge",
|
|
"edit_pdf",
|
|
"remove_password",
|
|
"split",
|
|
"delete_pages",
|
|
]:
|
|
self.assertIn(action_method, advertised_methods)
|