Skip to content

Commit 2d525d7

Browse files
committed
Update tests
1 parent 3c0cbf0 commit 2d525d7

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

graphene_django/auth/mixins.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ class AuthMutationMixin():
4343

4444
@classmethod
4545
def has_permision(cls, context):
46-
user = None
46+
if context is None:
47+
return PermissionDenied('Permission Denied')
4748
if type(context) is dict:
4849
user = context.get('user', None)
4950
if user is None:

graphene_django/tests/test_auth.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import collections
12
import graphene
23
from graphene import Schema, relay, ObjectType
34
from django.test import TestCase, RequestFactory
@@ -16,6 +17,14 @@ class Meta:
1617
interfaces = (relay.Node, )
1718

1819

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+
1928
class CreatePet(AuthMutationMixin, graphene.Mutation):
2029
"""
2130
Mutation for create user
@@ -44,10 +53,42 @@ def mutate(cls, root, input, context, info):
4453
return CreatePet(pet=pet)
4554

4655

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+
4784
class PetFilterConnection(AuthDjangoFilterConnectionField):
4885
_permission = 'app.create_pet'
4986

5087

88+
class PetFilterConnectionMultiple(AuthDjangoFilterConnectionField):
89+
_permission = ('app.view_pet', 'app.add_pet')
90+
91+
5192
class QueryRoot(ObjectType):
5293
pet = relay.Node.Field(PetNode)
5394
pets = PetFilterConnection(PetNode)
@@ -205,3 +246,56 @@ def test_filter_non_permission(self):
205246
print(result.errors)
206247
self.assertNotEqual(result.errors, [])
207248
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

Comments
 (0)