mirror of
https://github.com/inventree/InvenTree.git
synced 2025-10-24 18:07:38 +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(
|
path(
|
||||||
'auth/', include('rest_framework.urls', namespace='rest_framework')
|
'auth/', include('rest_framework.urls', namespace='rest_framework')
|
||||||
), # Used for (DRF) browsable API auth
|
), # Used for (DRF) browsable API auth
|
||||||
@@ -139,10 +139,7 @@ backendpatterns = [
|
|||||||
RedirectView.as_view(url=f'/{settings.FRONTEND_URL_BASE}', permanent=False),
|
RedirectView.as_view(url=f'/{settings.FRONTEND_URL_BASE}', permanent=False),
|
||||||
name='account_login',
|
name='account_login',
|
||||||
), # Add a redirect for login views
|
), # Add a redirect for login views
|
||||||
path('api/', include(apipatterns)),
|
path('anymail/', include('anymail.urls')), # Emails
|
||||||
path('api-doc/', SpectacularRedocView.as_view(url_name='schema'), name='api-doc'),
|
|
||||||
# Emails
|
|
||||||
path('anymail/', include('anymail.urls')),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns = []
|
urlpatterns = []
|
||||||
@@ -156,7 +153,11 @@ if settings.INVENTREE_ADMIN_ENABLED:
|
|||||||
path(f'{admin_url}/', admin.site.urls, name='inventree-admin'),
|
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
|
urlpatterns += platform_urls
|
||||||
|
|
||||||
# Append custom plugin URLs (if custom plugin support is enabled)
|
# Append custom plugin URLs (if custom plugin support is enabled)
|
||||||
|
|||||||
Reference in New Issue
Block a user