1. from django.test import TestCase
    
  2. 
    
  3. from .models import ManyToManyModel, SimpleModel
    
  4. 
    
  5. 
    
  6. class AsyncRelatedManagersOperationTest(TestCase):
    
  7.     @classmethod
    
  8.     def setUpTestData(cls):
    
  9.         cls.mtm1 = ManyToManyModel.objects.create()
    
  10.         cls.s1 = SimpleModel.objects.create(field=0)
    
  11. 
    
  12.     async def test_acreate(self):
    
  13.         await self.mtm1.simples.acreate(field=2)
    
  14.         new_simple = await self.mtm1.simples.aget()
    
  15.         self.assertEqual(new_simple.field, 2)
    
  16. 
    
  17.     async def test_acreate_reverse(self):
    
  18.         await self.s1.relatedmodel_set.acreate()
    
  19.         new_relatedmodel = await self.s1.relatedmodel_set.aget()
    
  20.         self.assertEqual(new_relatedmodel.simple, self.s1)
    
  21. 
    
  22.     async def test_aget_or_create(self):
    
  23.         new_simple, created = await self.mtm1.simples.aget_or_create(field=2)
    
  24.         self.assertIs(created, True)
    
  25.         self.assertEqual(await self.mtm1.simples.acount(), 1)
    
  26.         self.assertEqual(new_simple.field, 2)
    
  27.         new_simple, created = await self.mtm1.simples.aget_or_create(
    
  28.             id=new_simple.id, through_defaults={"field": 3}
    
  29.         )
    
  30.         self.assertIs(created, False)
    
  31.         self.assertEqual(await self.mtm1.simples.acount(), 1)
    
  32.         self.assertEqual(new_simple.field, 2)
    
  33. 
    
  34.     async def test_aget_or_create_reverse(self):
    
  35.         new_relatedmodel, created = await self.s1.relatedmodel_set.aget_or_create()
    
  36.         self.assertIs(created, True)
    
  37.         self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
    
  38.         self.assertEqual(new_relatedmodel.simple, self.s1)
    
  39. 
    
  40.     async def test_aupdate_or_create(self):
    
  41.         new_simple, created = await self.mtm1.simples.aupdate_or_create(field=2)
    
  42.         self.assertIs(created, True)
    
  43.         self.assertEqual(await self.mtm1.simples.acount(), 1)
    
  44.         self.assertEqual(new_simple.field, 2)
    
  45.         new_simple, created = await self.mtm1.simples.aupdate_or_create(
    
  46.             id=new_simple.id, defaults={"field": 3}
    
  47.         )
    
  48.         self.assertIs(created, False)
    
  49.         self.assertEqual(await self.mtm1.simples.acount(), 1)
    
  50.         self.assertEqual(new_simple.field, 3)
    
  51. 
    
  52.     async def test_aupdate_or_create_reverse(self):
    
  53.         new_relatedmodel, created = await self.s1.relatedmodel_set.aupdate_or_create()
    
  54.         self.assertIs(created, True)
    
  55.         self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
    
  56.         self.assertEqual(new_relatedmodel.simple, self.s1)