mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-28 17:09:59 +03:00
added proper tests for the readonly and writable fields with source test for uniquetogether validator
This commit is contained in:
parent
c87e53a692
commit
a3e5559f02
|
@ -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)
|
|
@ -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'))
|
||||
]
|
|
@ -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`
|
||||
# ----------------------------------
|
||||
|
|
Loading…
Reference in New Issue
Block a user