diff --git a/test_read_only_default/test_read_only_default.py b/test_read_only_default/test_read_only_default.py deleted file mode 100644 index df17eef22..000000000 --- a/test_read_only_default/test_read_only_default.py +++ /dev/null @@ -1,60 +0,0 @@ -from django.db import models -from rest_framework import serializers -from rest_framework.validators import ( - UniqueTogetherValidator, -) - -from rest_framework import viewsets -import json -from rest_framework import mixins -from rest_framework import generics -from rest_framework.views import APIView -from rest_framework.response import Response -from rest_framework import status -from django.test import TestCase -from rest_framework import status - - -class ModelTwo(models.Model): - testfieldtwo = models.CharField(max_length=60, primary_key=True) - -class ModelOne(models.Model): - testfield = models.ForeignKey(ModelTwo, on_delete=models.CASCADE) - alias = models.CharField(max_length=60) - name = models.CharField(max_length=60) - - class Meta: - unique_together = ('testfield', 'name',) - - -class ExampleSerializer(serializers.ModelSerializer): - altername = serializers.CharField(source="testfield", default=ModelTwo(testfieldtwo="model 2 default"), read_only=True) - - class Meta: - model = ModelOne - fields = ('altername' ,'alias', 'name') - validators = [ - UniqueTogetherValidator( - queryset=ModelOne.objects.all(), - fields=('testfield', 'name') - ) - ] - -class ExampleViewSet(mixins.CreateModelMixin, - mixins.UpdateModelMixin, - viewsets.ReadOnlyModelViewSet): - - queryset = ModelOne.objects.all() - serializer_class = ExampleSerializer - - -class ExampleTests(TestCase): - - def url(self): - return '/example/' - - def test_created_successfully(self): - name = 'blab blah' - alias = 'ab ab' - response = self.client.post(self.url, {'name': name, 'alias': alias}) - self.assertEqual(response.status_code, status.HTTP_201_CREATED, response.data) diff --git a/test_read_only_default/urls.py b/test_read_only_default/urls.py deleted file mode 100644 index 771983904..000000000 --- a/test_read_only_default/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.conf.urls import include, url -from rest_framework import routers -from test_read_only_default import ExampleViewSet - -router = routers.DefaultRouter() -router.register(r'example', ExampleViewSet) - -urlpatterns = [ - url('', include(router.urls)), - url('api-auth/', include('rest_framework.urls', namespace='rest_framework')) -] \ No newline at end of file diff --git a/tests/test_validators.py b/tests/test_validators.py index fe31ba235..6b02d3264 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -365,6 +365,40 @@ class TestUniquenessTogetherValidation(TestCase): validator.filter_queryset(attrs=data, queryset=queryset) assert queryset.called_with == {'race_name': 'bar', 'position': 1} +class WritableFieldsWithSourceSerializer(serializers.ModelSerializer): + name = serializers.CharField(source='race_name') + + class Meta: + model = UniquenessTogetherModel + fields = ['name', 'position'] + validators = [ + UniqueTogetherValidator( + queryset=UniquenessTogetherModel.objects.all(), + fields=['name', 'position'] + ) + ] + +class ReadOnlyFieldsWithSourceSerializer(serializers.ModelSerializer): + name = serializers.CharField(source='race_name', read_only=True, default='test') + + class Meta: + model = UniquenessTogetherModel + fields = ['name', 'position'] + validators = [ + UniqueTogetherValidator( + queryset=UniquenessTogetherModel.objects.all(), + fields=['name', 'position'] + ) + ] + +class TestFieldsWithFieldSource(TestCase): + def test_writeable(self): + serializer = WritableFieldsWithSourceSerializer(data={'name': 'formula1', 'position': '1'}) + serializer.is_valid(raise_exception=True) + + def test_read_only(self): + serializer = ReadOnlyFieldsWithSourceSerializer(data={'position': '1'}) + serializer.is_valid(raise_exception=True) # Tests for `UniqueForDateValidator` # ----------------------------------