1
+ import collections
1
2
import graphene
2
3
from graphene import Schema , relay , ObjectType
3
4
from django .test import TestCase , RequestFactory
@@ -16,6 +17,14 @@ class Meta:
16
17
interfaces = (relay .Node , )
17
18
18
19
20
+ class PetNodeMultiplePermissions (AuthNodeMixin , DjangoObjectType ):
21
+ _permission = ('app.view_pet' , 'app.add_pet' )
22
+
23
+ class Meta :
24
+ model = Pet
25
+ interfaces = (relay .Node , )
26
+
27
+
19
28
class CreatePet (AuthMutationMixin , graphene .Mutation ):
20
29
"""
21
30
Mutation for create user
@@ -44,10 +53,42 @@ def mutate(cls, root, input, context, info):
44
53
return CreatePet (pet = pet )
45
54
46
55
56
+ class CreatePetMultiple (AuthMutationMixin , graphene .Mutation ):
57
+ """
58
+ Mutation for create user
59
+ example mutation:
60
+ mutation {
61
+ createPet(name: "Mila") {
62
+ pet {
63
+ id
64
+ name
65
+ }
66
+ }
67
+ }
68
+ """
69
+ _permission = ('app.view_pet' , 'app.add_pet' )
70
+ pet = graphene .Field (PetNode )
71
+
72
+ class Input :
73
+ name = graphene .String (required = True )
74
+
75
+ @classmethod
76
+ def mutate (cls , root , input , context , info ):
77
+ if cls .has_permision (context ) is not True :
78
+ return cls .has_permision (context )
79
+ pet_name = input .get ('name' )
80
+ pet = Pet .objects .create (name = pet_name )
81
+ return CreatePet (pet = pet )
82
+
83
+
47
84
class PetFilterConnection (AuthDjangoFilterConnectionField ):
48
85
_permission = 'app.create_pet'
49
86
50
87
88
+ class PetFilterConnectionMultiple (AuthDjangoFilterConnectionField ):
89
+ _permission = ('app.view_pet' , 'app.add_pet' )
90
+
91
+
51
92
class QueryRoot (ObjectType ):
52
93
pet = relay .Node .Field (PetNode )
53
94
pets = PetFilterConnection (PetNode )
@@ -205,3 +246,56 @@ def test_filter_non_permission(self):
205
246
print (result .errors )
206
247
self .assertNotEqual (result .errors , [])
207
248
self .assertEqual (result .errors [0 ].message , 'Permission Denied' )
249
+
250
+ def test_auth_node (self ):
251
+ pn = PetNode ()
252
+ result = pn .get_node (id = 1 , context = None , info = None )
253
+ assert isinstance (result , PermissionDenied )
254
+ result = pn .get_node (id = 1 , context = {'user' : None }, info = None )
255
+ assert isinstance (result , PermissionDenied )
256
+ Context = collections .namedtuple ('Context' , ['user' , ])
257
+ context = Context (MockUserContext (authenticated = False ))
258
+ result = pn .get_node (id = 1 , context = context , info = None )
259
+ assert isinstance (result , PermissionDenied )
260
+ pn_multiple = PetNodeMultiplePermissions ()
261
+ context = Context (MockUserContext (authenticated = True ))
262
+ result = pn_multiple .get_node (id = 1 , context = context , info = None )
263
+ assert isinstance (result , PermissionDenied )
264
+ pn_multiple = PetNodeMultiplePermissions ()
265
+ context = Context (MockUserContext (authenticated = True ))
266
+ result = pn_multiple .get_node (id = 10 , context = context , info = None )
267
+ assert result is None
268
+
269
+ def test_auth_mutation (self ):
270
+ pet_mutation = CreatePet ()
271
+ result = pet_mutation .has_permision (context = None )
272
+ assert isinstance (result , PermissionDenied )
273
+ result = pet_mutation .has_permision (context = {'user' : None })
274
+ assert isinstance (result , PermissionDenied )
275
+ Context = collections .namedtuple ('Context' , ['user' , ])
276
+ context = Context (MockUserContext (authenticated = False ))
277
+ result = pet_mutation .has_permision (context = context )
278
+ assert isinstance (result , PermissionDenied )
279
+ pet_mutation_multiple = CreatePetMultiple ()
280
+ context = Context (MockUserContext (authenticated = True ))
281
+ result = pet_mutation_multiple .has_permision (context = context )
282
+ assert isinstance (result , PermissionDenied )
283
+ pet_mutation_multiple = CreatePetMultiple ()
284
+ context = Context (MockUserContext (authenticated = True , perms = ('app.view_pet' , 'app.add_pet' )))
285
+ result = pet_mutation_multiple .has_permision (context = context )
286
+ assert result is True
287
+
288
+ def test_auth_filter_connection_field (self ):
289
+ pet_filter = PetFilterConnection (PetNode )
290
+ result = pet_filter .has_perm (context = None )
291
+ assert result is False
292
+ result = pet_filter .has_perm (context = {'user' : None })
293
+ assert result is False
294
+ Context = collections .namedtuple ('Context' , ['user' , ])
295
+ context = Context (MockUserContext (authenticated = False ))
296
+ result = pet_filter .has_perm (context = context )
297
+ assert result is False
298
+ pet_filter_mulitple = PetFilterConnectionMultiple (PetNode )
299
+ context = Context (MockUserContext (authenticated = True , perms = ('app.view_pet' , )))
300
+ result = pet_filter_mulitple .has_perm (context = context )
301
+ assert result is False
0 commit comments