|
3 | 3 | import base64
|
4 | 4 | import unittest
|
5 | 5 |
|
| 6 | +import pytest |
6 | 7 | from django.contrib.auth.models import Group, Permission, User
|
7 | 8 | from django.core.urlresolvers import ResolverMatch
|
8 | 9 | from django.db import models
|
|
14 | 15 | )
|
15 | 16 | from rest_framework.compat import guardian
|
16 | 17 | from rest_framework.filters import DjangoObjectPermissionsFilter
|
| 18 | +from rest_framework.permissions import ( |
| 19 | + DjangoModelPermissions, DjangoObjectPermissions |
| 20 | +) |
17 | 21 | from rest_framework.routers import DefaultRouter
|
18 | 22 | from rest_framework.test import APIRequestFactory
|
19 | 23 | from tests.models import BasicModel
|
@@ -468,3 +472,30 @@ def test_permission_denied_for_object_with_custom_detail(self):
|
468 | 472 | detail = response.data.get('detail')
|
469 | 473 | self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
470 | 474 | self.assertEqual(detail, self.custom_message)
|
| 475 | + |
| 476 | + |
| 477 | +class CheckAttributeError(AttributeError): |
| 478 | + pass |
| 479 | + |
| 480 | + |
| 481 | +class GetQuerysetRaises(generics.ListAPIView): |
| 482 | + def get_queryset(self): |
| 483 | + raise CheckAttributeError("Something terrible occurred deep down in the call stack") |
| 484 | + |
| 485 | + |
| 486 | +class DjangoObjectPermissionsList(GetQuerysetRaises): |
| 487 | + permission_classes = (DjangoObjectPermissions,) |
| 488 | + |
| 489 | + |
| 490 | +class DjangoModelPermissionsList(GetQuerysetRaises): |
| 491 | + permission_classes = (DjangoModelPermissions,) |
| 492 | + |
| 493 | + |
| 494 | +def test_DjangoObjectPermissions_hiding(): |
| 495 | + with pytest.raises(CheckAttributeError): |
| 496 | + DjangoObjectPermissionsList().check_object_permissions(request=None, obj=None) |
| 497 | + |
| 498 | + |
| 499 | +def test_DjangoModelPermissions_hiding(): |
| 500 | + with pytest.raises(CheckAttributeError): |
| 501 | + DjangoModelPermissionsList().check_permissions(request=None) |
0 commit comments