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 UpdateCatMutation(DjangoUpdateMutation): class Meta: model = Cat many_to_many_extras = {"enemies": {"exact": {"type": "ID"}}} class Mutations(graphene.ObjectType): update_cat = UpdateCatMutation.Field() cat = CatFactory.create() user = UserFactory.create() # Create some enemies dog = DogFactory.create_batch(5) cat.enemies.set(dog) self.assertEqual(cat.enemies.all().count(), 5) 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": "Garfield", "owner": to_global_id("UserNode", user.id), "enemies": [], }, }, context=Dict(user=user), ) self.assertIsNone(result.errors) cat.refresh_from_db() self.assertEqual(cat.enemies.all().count(), 0)
def test_many_to_many_extras__add_extra_by_id__adds_by_id(self): # This registers the UserNode type # noinspection PyUnresolvedReferences from .schema import UserNode class PatchCatMutation(DjangoPatchMutation): class Meta: model = Cat many_to_many_extras = {"enemies": {"add": {"type": "ID"}}} class Mutations(graphene.ObjectType): patch_cat = PatchCatMutation.Field() cat = CatFactory.create() user = UserFactory.create() # Create some enemies dog = DogFactory.create_batch(5) self.assertEqual(cat.enemies.all().count(), 0) 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), "input": { "name": "Garfield", "owner": to_global_id("UserNode", user.id), "enemiesAdd": [dog.id for dog in dog], }, }, context=Dict(user=user), ) self.assertIsNone(result.errors) cat.refresh_from_db() self.assertEqual(cat.enemies.all().count(), 5)