Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite7af8d6

Browse files
authored
tests for#5127 (#7715)
* tests for#5127*Resolves#5127
1 parentf8a03b0 commite7af8d6

File tree

5 files changed

+64
-1
lines changed

5 files changed

+64
-1
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
fromdjango.urlsimportpath
22

3-
from .viewsimportMockView
3+
from .viewsimportBasicModelWithUsersViewSet,MockView
44

55
urlpatterns= [
66
path('',MockView.as_view()),
7+
path('basicviewset',BasicModelWithUsersViewSet.as_view({'get':'list'})),
78
]

‎tests/browsable_api/serializers.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
fromrest_framework.serializersimportModelSerializer
2+
fromtests.modelsimportBasicModelWithUsers
3+
4+
5+
classBasicSerializer(ModelSerializer):
6+
classMeta:
7+
model=BasicModelWithUsers
8+
fields='__all__'

‎tests/browsable_api/test_browsable_api.py‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,35 @@
11
fromdjango.contrib.auth.modelsimportUser
22
fromdjango.testimportTestCase,override_settings
33

4+
fromrest_framework.permissionsimportIsAuthenticated
45
fromrest_framework.testimportAPIClient
56

7+
from .viewsimportBasicModelWithUsersViewSet,OrganizationPermissions
8+
9+
10+
@override_settings(ROOT_URLCONF='tests.browsable_api.no_auth_urls')
11+
classAnonymousUserTests(TestCase):
12+
"""Tests correct handling of anonymous user request on endpoints with IsAuthenticated permission class."""
13+
14+
defsetUp(self):
15+
self.client=APIClient(enforce_csrf_checks=True)
16+
17+
deftearDown(self):
18+
self.client.logout()
19+
20+
deftest_get_raises_typeerror_when_anonymous_user_in_queryset_filter(self):
21+
withself.assertRaises(TypeError):
22+
self.client.get('/basicviewset')
23+
24+
deftest_get_returns_http_forbidden_when_anonymous_user(self):
25+
old_permissions=BasicModelWithUsersViewSet.permission_classes
26+
BasicModelWithUsersViewSet.permission_classes= [IsAuthenticated,OrganizationPermissions]
27+
28+
response=self.client.get('/basicviewset')
29+
30+
BasicModelWithUsersViewSet.permission_classes=old_permissions
31+
self.assertEqual(response.status_code,403)
32+
633

734
@override_settings(ROOT_URLCONF='tests.browsable_api.auth_urls')
835
classDropdownWithAuthTests(TestCase):

‎tests/browsable_api/views.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
fromrest_frameworkimportauthentication,renderers
2+
fromrest_framework.permissionsimportBasePermission
23
fromrest_framework.responseimportResponse
34
fromrest_framework.viewsimportAPIView
5+
fromrest_framework.viewsetsimportModelViewSet
6+
7+
from ..modelsimportBasicModelWithUsers
8+
from .serializersimportBasicSerializer
9+
10+
11+
classOrganizationPermissions(BasePermission):
12+
defhas_object_permission(self,request,view,obj):
13+
returnrequest.user.is_staffor (request.user==obj.owner.organization_user.user)
414

515

616
classMockView(APIView):
@@ -9,3 +19,15 @@ class MockView(APIView):
919

1020
defget(self,request):
1121
returnResponse({'a':1,'b':2,'c':3})
22+
23+
24+
classBasicModelWithUsersViewSet(ModelViewSet):
25+
queryset=BasicModelWithUsers.objects.all()
26+
serializer_class=BasicSerializer
27+
permission_classes= [OrganizationPermissions]
28+
# permission_classes = [IsAuthenticated, OrganizationPermissions]
29+
renderer_classes= (renderers.BrowsableAPIRenderer,renderers.JSONRenderer)
30+
31+
defget_queryset(self):
32+
qs=super().get_queryset().filter(users=self.request.user)
33+
returnqs

‎tests/models.py‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
importuuid
22

3+
fromdjango.contrib.auth.modelsimportUser
34
fromdjango.dbimportmodels
45
fromdjango.utils.translationimportgettext_lazyas_
56

@@ -33,6 +34,10 @@ class ManyToManySource(RESTFrameworkModel):
3334
targets=models.ManyToManyField(ManyToManyTarget,related_name='sources')
3435

3536

37+
classBasicModelWithUsers(RESTFrameworkModel):
38+
users=models.ManyToManyField(User)
39+
40+
3641
# ForeignKey
3742
classForeignKeyTarget(RESTFrameworkModel):
3843
name=models.CharField(max_length=100)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp