def test_get_permissions__list_with_permissions__requires_returned_permissions( self, ): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class UpdateCatMutation(DjangoUpdateMutation): class Meta: model = Cat @classmethod def get_permissions(cls, root, info, *args, **kwargs): return ["tests.change_cat"] class Mutations(graphene.ObjectType): update_cat = UpdateCatMutation.Field() user = UserFactory.create() user_with_permissions = UserWithPermissionsFactory.create( permissions=["tests.change_cat"]) cat = CatFactory.create() schema = Schema(mutation=Mutations) mutation = """ mutation UpdateCat( $id: ID!, $input: UpdateCatInput! ){ updateCat(id: $id, input: $input){ cat{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", cat.id), "input": { "name": "Name", "owner": to_global_id("UserNode", user.id) }, }, context=Dict(user=user), ) self.assertEqual(len(result.errors), 1) result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", cat.id), "input": { "name": "Name", "owner": to_global_id("UserNode", user.id) }, }, context=Dict(user=user_with_permissions), ) self.assertIsNone(result.errors)
def test_mutate__object_exists__deletes_object(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class DeleteCatMutation(DjangoDeleteMutation): class Meta: model = Cat permissions = ("tests.delete_cat", ) class Mutations(graphene.ObjectType): delete_cat = DeleteCatMutation.Field() user = UserWithPermissionsFactory.create( permissions=["tests.delete_cat"]) cat = CatFactory.create() schema = Schema(mutation=Mutations) mutation = """ mutation DeleteCat( $id: ID! ){ deleteCat(id: $id){ found deletedId deletedRawId deletedInputId } } """ result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", cat.id), }, context=Dict(user=user), ) self.assertIsNone(result.errors) data = Dict(result.data) self.assertIsNone(Cat.objects.filter(id=cat.id).first()) self.assertTrue(data.deleteCat.found) self.assertEqual(cat.id, int(disambiguate_id(data.deleteCat.deletedId)))
def test_mutate__only_supply_some_fields__changes_relevant_fields(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class PatchCatMutation(DjangoPatchMutation): class Meta: model = Cat permissions = ("tests.change_cat",) class Mutations(graphene.ObjectType): patch_cat = PatchCatMutation.Field() user = UserWithPermissionsFactory.create(permissions=["tests.change_cat"]) cat = CatFactory.create() schema = Schema(mutation=Mutations) mutation = """ mutation PatchCat( $id: ID!, $input: PatchCatInput! ){ patchCat(id: $id, input: $input){ cat{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", cat.id), # Notably, owner is omitted "input": {"name": "New name"}, }, context=Dict(user=user), ) self.assertIsNone(result.errors) cat.refresh_from_db() self.assertEqual("New name", cat.name)
def test_permissions__user_has_permission__does_not_return_error(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class UpdateCatMutation(DjangoUpdateMutation): class Meta: model = Cat permissions = ("tests.change_cat", ) class Mutations(graphene.ObjectType): update_cat = UpdateCatMutation.Field() user = UserWithPermissionsFactory.create( permissions=["tests.change_cat"]) cat = CatFactory.create() schema = Schema(mutation=Mutations) mutation = """ mutation UpdateCat( $id: ID!, $input: UpdateCatInput! ){ updateCat(id: $id, input: $input){ cat{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", cat.id), "input": { "name": "Name", "owner": to_global_id("UserNode", user.id) }, }, context=Dict(user=user), ) self.assertIsNone(result.errors)
def test_mutate__object_does_not_exist__returns_found_false_and_null_id( self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class DeleteCatMutation(DjangoDeleteMutation): class Meta: model = Cat permissions = ("tests.delete_cat", ) class Mutations(graphene.ObjectType): delete_cat = DeleteCatMutation.Field() user = UserWithPermissionsFactory.create( permissions=["tests.delete_cat"]) schema = Schema(mutation=Mutations) mutation = """ mutation DeleteCat( $id: ID! ){ deleteCat(id: $id){ found deletedId } } """ result = schema.execute( mutation, variables={ "id": to_global_id("CatNode", 1), }, context=Dict(user=user), ) self.assertIsNone(result.errors) data = Dict(result.data) self.assertFalse(data.deleteCat.found) self.assertEqual(None, data.deleteCat.deletedId)