added proper tests for the readonly and writable fields with source test for uniquetogether validator

This commit is contained in:
anvesh agarwal 2019-10-29 11:43:35 +05:30
parent c87e53a692
commit a3e5559f02
3 changed files with 34 additions and 71 deletions

View File

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

View File

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

View File

@ -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`
# ---------------------------------- # ----------------------------------