From fa87a95636af4932592b292da70189f10b4e3318 Mon Sep 17 00:00:00 2001 From: Carlton Gibson Date: Mon, 2 Oct 2017 15:54:50 +0200 Subject: [PATCH] Add generic view based test case. --- tests/test_schemas.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tests/test_schemas.py b/tests/test_schemas.py index cefac6750..0c2589394 100644 --- a/tests/test_schemas.py +++ b/tests/test_schemas.py @@ -6,7 +6,9 @@ from django.core.exceptions import PermissionDenied from django.http import Http404 from django.test import TestCase, override_settings -from rest_framework import filters, pagination, permissions, serializers +from rest_framework import ( + filters, generics, pagination, permissions, serializers +) from rest_framework.compat import coreapi, coreschema from rest_framework.decorators import ( api_view, detail_route, list_route, schema @@ -22,6 +24,8 @@ from rest_framework.utils import formatting from rest_framework.views import APIView from rest_framework.viewsets import GenericViewSet, ModelViewSet +from .models import BasicModel + factory = APIRequestFactory() @@ -728,12 +732,22 @@ class SchemaGenerationExclusionTests(TestCase): ) - @api_view(["GET"]) def simple_fbv(request): pass +class BasicModelSerializer(serializers.ModelSerializer): + class Meta: + model = BasicModel + fields = "__all__" + + +class NamingCollisionView(generics.RetrieveUpdateDestroyAPIView): + queryset = BasicModel.objects.all() + serializer_class = BasicModelSerializer + + class NamingCollisionViewSet(GenericViewSet): """ Example via: https://stackoverflow.com/questions/43778668/django-rest-framwork-occured-typeerror-link-object-does-not-support-item-ass/ @@ -766,6 +780,21 @@ class TestURLNamingCollisions(TestCase): generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) schema = generator.get_schema() + def test_manually_routing_generic_view(self): + patterns = [ + url(r'^test', NamingCollisionView.as_view()), + url(r'^test/retrieve/', NamingCollisionView.as_view()), + url(r'^test/update/', NamingCollisionView.as_view()), + + # Fails with method names: + url(r'^test/get/', NamingCollisionView.as_view()), + url(r'^test/put/', NamingCollisionView.as_view()), + url(r'^test/delete/', NamingCollisionView.as_view()), + ] + + generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) + schema = generator.get_schema() + def test_from_router(self): patterns = [ url(r'from-router', include(naming_collisions_router.urls)),