mirror of
https://github.com/inventree/InvenTree.git
synced 2025-10-24 01:47:39 +00:00
Add generic test for serializer
This commit is contained in:
79
src/backend/InvenTree/InvenTree/test_serializers.py
Normal file
79
src/backend/InvenTree/InvenTree/test_serializers.py
Normal file
@@ -0,0 +1,79 @@
|
||||
"""Low level tests for serializers."""
|
||||
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import path, reverse
|
||||
|
||||
from rest_framework.serializers import SerializerMethodField
|
||||
|
||||
import InvenTree.serializers
|
||||
from InvenTree.mixins import ListCreateAPI, OutputOptionsMixin
|
||||
from InvenTree.unit_test import InvenTreeAPITestCase
|
||||
from InvenTree.urls import third_backendpatterns
|
||||
|
||||
|
||||
class SampleSerializer(
|
||||
InvenTree.serializers.FilterableSerializerMixin,
|
||||
InvenTree.serializers.InvenTreeModelSerializer,
|
||||
):
|
||||
"""Sample serializer for testing FilterableSerializerMixin."""
|
||||
|
||||
class Meta:
|
||||
"""Meta options."""
|
||||
|
||||
model = User
|
||||
fields = ['field_a', 'field_b', 'field_c', 'field_d', 'id']
|
||||
|
||||
field_a = SerializerMethodField(method_name='sample')
|
||||
field_b = InvenTree.serializers.enable_filter(
|
||||
InvenTree.serializers.FilterableSerializerMethodField(method_name='sample')
|
||||
)
|
||||
field_c = InvenTree.serializers.enable_filter(
|
||||
InvenTree.serializers.FilterableSerializerMethodField(method_name='sample'),
|
||||
True,
|
||||
filter_name='crazy_name',
|
||||
)
|
||||
field_d = InvenTree.serializers.enable_filter(
|
||||
InvenTree.serializers.FilterableSerializerMethodField(method_name='sample'),
|
||||
True,
|
||||
filter_name='crazy_name',
|
||||
)
|
||||
|
||||
def sample(self, obj):
|
||||
"""Sample method field."""
|
||||
return 'sample'
|
||||
|
||||
|
||||
class SampleList(OutputOptionsMixin, ListCreateAPI):
|
||||
"""List endpoint sample."""
|
||||
|
||||
serializer_class = SampleSerializer
|
||||
queryset = User.objects.all()
|
||||
permission_classes = []
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('', SampleList.as_view(), name='sample-list'),
|
||||
path('admin/', admin.site.urls, name='inventree-admin'),
|
||||
]
|
||||
urlpatterns += third_backendpatterns
|
||||
|
||||
|
||||
class FilteredSerializers(InvenTreeAPITestCase):
|
||||
"""Tests for functionality of FilteredSerializerMixin / adjacent functions."""
|
||||
|
||||
def test_basic_setup(self):
|
||||
"""Test simple sample setup."""
|
||||
with self.settings(
|
||||
ROOT_URLCONF=__name__,
|
||||
CSRF_TRUSTED_ORIGINS=['http://testserver'],
|
||||
SITE_URL='http://testserver',
|
||||
):
|
||||
url = reverse('sample-list', urlconf=__name__)
|
||||
|
||||
# Default request (no filters)
|
||||
response = self.client.get(url)
|
||||
self.assertContains(response, 'field_a')
|
||||
self.assertNotContains(response, 'field_b')
|
||||
self.assertContains(response, 'field_c')
|
||||
self.assertContains(response, 'field_d')
|
||||
@@ -126,7 +126,7 @@ apipatterns = [
|
||||
]
|
||||
|
||||
|
||||
backendpatterns = [
|
||||
third_backendpatterns = [
|
||||
path(
|
||||
'auth/', include('rest_framework.urls', namespace='rest_framework')
|
||||
), # Used for (DRF) browsable API auth
|
||||
@@ -139,10 +139,7 @@ backendpatterns = [
|
||||
RedirectView.as_view(url=f'/{settings.FRONTEND_URL_BASE}', permanent=False),
|
||||
name='account_login',
|
||||
), # Add a redirect for login views
|
||||
path('api/', include(apipatterns)),
|
||||
path('api-doc/', SpectacularRedocView.as_view(url_name='schema'), name='api-doc'),
|
||||
# Emails
|
||||
path('anymail/', include('anymail.urls')),
|
||||
path('anymail/', include('anymail.urls')), # Emails
|
||||
]
|
||||
|
||||
urlpatterns = []
|
||||
@@ -156,7 +153,11 @@ if settings.INVENTREE_ADMIN_ENABLED:
|
||||
path(f'{admin_url}/', admin.site.urls, name='inventree-admin'),
|
||||
]
|
||||
|
||||
urlpatterns += backendpatterns
|
||||
urlpatterns += third_backendpatterns
|
||||
urlpatterns += [ # API URLs
|
||||
path('api/', include(apipatterns)),
|
||||
path('api-doc/', SpectacularRedocView.as_view(url_name='schema'), name='api-doc'),
|
||||
]
|
||||
urlpatterns += platform_urls
|
||||
|
||||
# Append custom plugin URLs (if custom plugin support is enabled)
|
||||
|
||||
Reference in New Issue
Block a user