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)))
예제 #3
0
    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)
예제 #5
0
    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)