Common: Improve API view and tests

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-06 21:57:02 -04:00
parent 7d3677acfb
commit ee2637dddc
6 changed files with 35 additions and 21 deletions

View File

@@ -9,7 +9,7 @@ from .classes import Template
from .serializers import ContentTypeSerializer, TemplateSerializer
class APIContentTypeViewSet(viewsets.ReadOnlyModelViewSet):
class ContentTypeAPIViewSet(viewsets.ReadOnlyModelViewSet):
"""
list:
Return a list of all the available content types.
@@ -17,13 +17,12 @@ class APIContentTypeViewSet(viewsets.ReadOnlyModelViewSet):
retrieve:
Return the given content type details.
"""
lookup_field = 'pk'
lookup_url_kwarg = 'content_type_id'
queryset = ContentType.objects.order_by('app_label', 'model')
serializer_class = ContentTypeSerializer
class APITemplateViewSet(viewsets.ReadOnlyModelViewSet):
class TemplateAPIViewSet(viewsets.ReadOnlyModelViewSet):
"""
list:
Return a list of partial templates.
@@ -31,12 +30,12 @@ class APITemplateViewSet(viewsets.ReadOnlyModelViewSet):
retrieve:
Return the given partial template details.
"""
lookup_url_kwarg = 'name'
lookup_url_kwarg = 'template_name'
permission_classes = (IsAuthenticated,)
serializer_class = TemplateSerializer
def get_object(self):
return Template.get(name=self.kwargs['name']).render(
return Template.get(name=self.kwargs['template_name']).render(
request=self.request
)

View File

@@ -292,7 +292,7 @@ class Template(object):
def get_absolute_url(self):
return reverse(
viewname='rest_api:template-detail', kwargs={'template_pk': self.name}
viewname='rest_api:template-detail', kwargs={'template_name': self.name}
)
def render(self, request):

View File

@@ -13,7 +13,6 @@ from django.views.generic.detail import SingleObjectMixin
from mayan.apps.acls.models import AccessControlList
from mayan.apps.permissions import Permission
from .exceptions import ActionError
from .forms import DynamicForm
from .literals import (
PK_LIST_SEPARATOR, TEXT_CHOICE_ITEMS, TEXT_CHOICE_LIST,

View File

@@ -9,8 +9,8 @@ class ContentTypeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
extra_kwargs = {
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'content_type_id',
'view_name': 'rest_api:content_type-detail'
'lookup_url_kwarg': 'content_type_id',
'view_name': 'rest_api:content-type-detail'
}
}
fields = ('app_label', 'id', 'model', 'url')
@@ -22,6 +22,6 @@ class TemplateSerializer(serializers.Serializer):
name = serializers.CharField(read_only=True)
html = serializers.CharField(read_only=True)
url = serializers.HyperlinkedIdentityField(
lookup_field='name', lookup_url_kwarg='name',
lookup_field='name', lookup_url_kwarg='template_name',
view_name='rest_api:template-detail'
)

View File

@@ -1,7 +1,6 @@
from __future__ import unicode_literals
from django.test import override_settings
from django.urls import reverse
from mayan.apps.rest_api.tests import BaseAPITestCase
@@ -11,23 +10,40 @@ TEST_TEMPLATE_RESULT = '<div'
class CommonAPITestCase(BaseAPITestCase):
auto_login_user = False
def test_content_type_list_view(self):
response = self.client.get(reverse(viewname='rest_api:content-type-list'))
response = self.get(viewname='rest_api:content-type-list')
self.assertEqual(response.status_code, 200)
@override_settings(LANGUAGE_CODE='de')
def _request_template_detail_view(self):
return self.get(path=self.test_template.get_absolute_url())
def test_template_detail_view(self):
self.login_user()
template_main_menu = Template.get(name='menu_main')
response = self.client.get(template_main_menu.get_absolute_url())
self.test_template = Template.get(name='menu_main')
response = self._request_template_detail_view()
self.assertContains(
response=response, text=TEST_TEMPLATE_RESULT, status_code=200
)
@override_settings(LANGUAGE_CODE='de')
def test_template_detail_german_view(self):
self.login_user()
self.test_template = Template.get(name='menu_main')
response = self._request_template_detail_view()
self.assertContains(
response=response, text=TEST_TEMPLATE_RESULT, status_code=200
)
def test_template_detail_anonymous_view(self):
template_main_menu = Template.get(name='menu_main')
response = self.client.get(template_main_menu.get_absolute_url())
self.test_template = Template.get(name='menu_main')
response = self._request_template_detail_view()
self.assertNotContains(
response=response, text=TEST_TEMPLATE_RESULT, status_code=403
)

View File

@@ -3,7 +3,7 @@ from __future__ import unicode_literals
from django.conf.urls import url
from django.views.i18n import javascript_catalog, set_language
from .api_views import APIContentTypeViewSet, APITemplateViewSet
from .api_views import ContentTypeAPIViewSet, TemplateAPIViewSet
from .views import (
AboutView, CheckVersionView, CurrentUserLocaleProfileDetailsView,
CurrentUserLocaleProfileEditView, FaviconRedirectView, HomeView,
@@ -67,11 +67,11 @@ urlpatterns += [
api_router_entries = (
{
'prefix': r'content_types', 'viewset': APIContentTypeViewSet,
'basename': 'content_type'
'prefix': r'content_types', 'viewset': ContentTypeAPIViewSet,
'basename': 'content-type'
},
{
'prefix': r'templates', 'viewset': APITemplateViewSet,
'prefix': r'templates', 'viewset': TemplateAPIViewSet,
'basename': 'template'
},
)