2
0
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:
Matthias Mair
2025-10-17 02:35:57 +02:00
parent 28886083e3
commit 1b2ce89c42
2 changed files with 86 additions and 6 deletions

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

View File

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