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)
|
validator.filter_queryset(attrs=data, queryset=queryset)
|
||||||
assert queryset.called_with == {'race_name': 'bar', 'position': 1}
|
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`
|
# Tests for `UniqueForDateValidator`
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user