def test_many_to_one_extras__add_by_id__adds_by_id(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class UpdateUserMutation(DjangoUpdateMutation): class Meta: model = User exclude_fields = ("password",) many_to_one_extras = {"cats": {"add": {"type": "ID"}}} class Mutations(graphene.ObjectType): update_user = UpdateUserMutation.Field() user = UserFactory.create() # Create some enemies cats = CatFactory.create_batch(5, owner=user) other_cats = CatFactory.create_batch(5) self.assertEqual(user.cats.all().count(), 5) schema = Schema(mutation=Mutations) mutation = """ mutation UpdateUser( $id: ID!, $input: UpdateUserInput! ){ updateUser(id: $id, input: $input){ user{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("UserNode", user.id), "input": { "username": user.username, "firstName": user.first_name, "lastName": user.last_name, "email": user.email, "catsAdd": [cat.id for cat in other_cats], }, }, context=Dict(user=user), ) self.assertIsNone(result.errors) user.refresh_from_db() self.assertEqual(user.cats.all().count(), 10)
def test_many_to_many_extras__add_extra_by_input__adds_by_input(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class CreateCatMutation(DjangoCreateMutation): class Meta: model = Cat class UpdateDogMutation(DjangoUpdateMutation): class Meta: model = Dog many_to_many_extras = {"enemies": {"exact": {"type": "CreateCatInput"}}} class Mutations(graphene.ObjectType): create_cat = CreateCatMutation.Field() update_dog = UpdateDogMutation.Field() dog = DogFactory.create() user = UserFactory.create() # Create some enemies cats = CatFactory.create_batch(5) self.assertEqual(dog.enemies.all().count(), 0) schema = Schema(mutation=Mutations) mutation = """ mutation UpdateDog( $id: ID!, $input: UpdateDogInput! ){ updateDog(id: $id, input: $input){ dog{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("DogNode", dog.id), "input": { "name": "Sparky", "tag": "tag", "breed": "HUSKY", "owner": to_global_id("UserNode", user.id), "enemies": [ {"name": cat.name, "owner": cat.owner.id} for cat in cats ], }, }, context=Dict(user=user), ) self.assertIsNone(result.errors) dog.refresh_from_db() self.assertEqual(dog.enemies.all().count(), 5)
def test_many_to_many_extras__calling_exact_with_empty_list__resets_relation(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class PatchDogMutation(DjangoPatchMutation): class Meta: model = Dog many_to_many_extras = {"enemies": {"exact": {"type": "ID"}}} class Mutations(graphene.ObjectType): patch_dog = PatchDogMutation.Field() dog = DogFactory.create() user = UserFactory.create() # Create some enemies cats = CatFactory.create_batch(5) dog.enemies.set(cats) self.assertEqual(dog.enemies.all().count(), 5) schema = Schema(mutation=Mutations) mutation = """ mutation PatchDog( $id: ID!, $input: PatchDogInput! ){ patchDog(id: $id, input: $input){ dog{ id } } } """ result = schema.execute( mutation, variables={ "id": to_global_id("DogNode", dog.id), "input": { "name": "Sparky", "tag": "tag", "breed": "HUSKY", "owner": to_global_id("UserNode", user.id), "enemies": [], }, }, context=Dict(user=user), ) self.assertIsNone(result.errors) dog.refresh_from_db() self.assertEqual(dog.enemies.all().count(), 0)
def test_many_to_one_extras__set_exact_by_id__sets_by_id(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class CreateUserMutation(DjangoCreateMutation): class Meta: model = User exclude_fields = ("password", ) many_to_one_extras = {"cats": {"exact": {"type": "ID"}}} class Mutations(graphene.ObjectType): create_user = CreateUserMutation.Field() user = UserFactory.build() other_cats = CatFactory.create_batch(5) schema = Schema(mutation=Mutations) mutation = """ mutation CreateUser( $input: CreateUserInput! ){ createUser(input: $input){ user{ id } } } """ result = schema.execute( mutation, variables={ "input": { "username": user.username, "firstName": user.first_name, "lastName": user.last_name, "email": user.email, "cats": [cat.id for cat in other_cats], } }, context=Dict(user=user), ) self.assertIsNone(result.errors) data = Dict(result.data) user = User.objects.get(pk=disambiguate_id(data.createUser.user.id)) self.assertEqual(user.cats.all().count(), 5)