diff --git a/graphene_django/tests/test_fields.py b/graphene_django/tests/test_fields.py index e0478bd..8abd9b3 100644 --- a/graphene_django/tests/test_fields.py +++ b/graphene_django/tests/test_fields.py @@ -1,15 +1,26 @@ +from mock import mock from unittest import TestCase from django.core.exceptions import PermissionDenied -from graphene_django.fields import DjangoField +from graphene_django.fields import DjangoField, DataLoaderField +from promise.dataloader import DataLoader +from promise import Promise class MyInstance(object): value = "value" + key = 1 def resolver(self): return "resolver method" +def batch_load_fn(keys): + return Promise.all(keys) + + +data_loader = DataLoader(batch_load_fn=batch_load_fn) + + class PermissionFieldTests(TestCase): def test_permission_field(self): @@ -21,12 +32,9 @@ class PermissionFieldTests(TestCase): def has_perm(self, perm): return perm == 'perm2' - class Info(object): - class Context(object): - user = Viewer() - context = Context() + info = mock.Mock(context=mock.Mock(user=Viewer())) - self.assertEqual(resolver(MyInstance(), Info()), MyInstance().resolver()) + self.assertEqual(resolver(MyInstance(), info), MyInstance().resolver()) def test_permission_field_without_permission(self): MyType = object() @@ -37,10 +45,51 @@ class PermissionFieldTests(TestCase): def has_perm(self, perm): return False - class Info(object): - class Context(object): - user = Viewer() - context = Context() + info = mock.Mock(context=mock.Mock(user=Viewer())) with self.assertRaises(PermissionDenied): - resolver(MyInstance(), Info()) + resolver(MyInstance(), info) + + +class DataLoaderFieldTests(TestCase): + + def test_dataloaderfield(self): + MyType = object() + data_loader_field = DataLoaderField(data_loader=data_loader, source_loader='key', type=MyType) + + resolver = data_loader_field.get_resolver(None) + instance = MyInstance() + + self.assertEqual(resolver(instance, None).get(), instance.key) + + def test_dataloaderfield_permissions(self): + MyType = object() + data_loader_field = DataLoaderField(data_loader=data_loader, source_loader='key', type=MyType, + permissions=['perm1', 'perm2']) + + resolver = data_loader_field.get_resolver(None) + instance = MyInstance() + + class Viewer(object): + def has_perm(self, perm): + return perm == 'perm2' + + info = mock.Mock(context=mock.Mock(user=Viewer())) + + self.assertEqual(resolver(instance, info).get(), instance.key) + + def test_dataloaderfield_without_permissions(self): + MyType = object() + data_loader_field = DataLoaderField(data_loader=data_loader, source_loader='key', type=MyType, + permissions=['perm1', 'perm2']) + + resolver = data_loader_field.get_resolver(None) + instance = MyInstance() + + class Viewer(object): + def has_perm(self, perm): + return False + + info = mock.Mock(context=mock.Mock(user=Viewer())) + with self.assertRaises(PermissionDenied): + resolver(instance, info)