test_async_related_managers.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from django.test import TestCase
  2. from .models import ManyToManyModel, RelatedModel, SimpleModel
  3. class AsyncRelatedManagersOperationTest(TestCase):
  4. @classmethod
  5. def setUpTestData(cls):
  6. cls.mtm1 = ManyToManyModel.objects.create()
  7. cls.s1 = SimpleModel.objects.create(field=0)
  8. cls.mtm2 = ManyToManyModel.objects.create()
  9. cls.mtm2.simples.set([cls.s1])
  10. async def test_acreate(self):
  11. await self.mtm1.simples.acreate(field=2)
  12. new_simple = await self.mtm1.simples.aget()
  13. self.assertEqual(new_simple.field, 2)
  14. async def test_acreate_reverse(self):
  15. await self.s1.relatedmodel_set.acreate()
  16. new_relatedmodel = await self.s1.relatedmodel_set.aget()
  17. self.assertEqual(new_relatedmodel.simple, self.s1)
  18. async def test_aget_or_create(self):
  19. new_simple, created = await self.mtm1.simples.aget_or_create(field=2)
  20. self.assertIs(created, True)
  21. self.assertEqual(await self.mtm1.simples.acount(), 1)
  22. self.assertEqual(new_simple.field, 2)
  23. new_simple, created = await self.mtm1.simples.aget_or_create(
  24. id=new_simple.id, through_defaults={"field": 3}
  25. )
  26. self.assertIs(created, False)
  27. self.assertEqual(await self.mtm1.simples.acount(), 1)
  28. self.assertEqual(new_simple.field, 2)
  29. async def test_aget_or_create_reverse(self):
  30. new_relatedmodel, created = await self.s1.relatedmodel_set.aget_or_create()
  31. self.assertIs(created, True)
  32. self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
  33. self.assertEqual(new_relatedmodel.simple, self.s1)
  34. async def test_aupdate_or_create(self):
  35. new_simple, created = await self.mtm1.simples.aupdate_or_create(field=2)
  36. self.assertIs(created, True)
  37. self.assertEqual(await self.mtm1.simples.acount(), 1)
  38. self.assertEqual(new_simple.field, 2)
  39. new_simple, created = await self.mtm1.simples.aupdate_or_create(
  40. id=new_simple.id, defaults={"field": 3}
  41. )
  42. self.assertIs(created, False)
  43. self.assertEqual(await self.mtm1.simples.acount(), 1)
  44. self.assertEqual(new_simple.field, 3)
  45. async def test_aupdate_or_create_reverse(self):
  46. new_relatedmodel, created = await self.s1.relatedmodel_set.aupdate_or_create()
  47. self.assertIs(created, True)
  48. self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
  49. self.assertEqual(new_relatedmodel.simple, self.s1)
  50. async def test_aadd(self):
  51. await self.mtm1.simples.aadd(self.s1)
  52. self.assertEqual(await self.mtm1.simples.aget(), self.s1)
  53. async def test_aadd_reverse(self):
  54. r1 = await RelatedModel.objects.acreate()
  55. await self.s1.relatedmodel_set.aadd(r1, bulk=False)
  56. self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
  57. async def test_aremove(self):
  58. self.assertEqual(await self.mtm2.simples.acount(), 1)
  59. await self.mtm2.simples.aremove(self.s1)
  60. self.assertEqual(await self.mtm2.simples.acount(), 0)
  61. async def test_aremove_reverse(self):
  62. r1 = await RelatedModel.objects.acreate(simple=self.s1)
  63. self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
  64. await self.s1.relatedmodel_set.aremove(r1)
  65. self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)
  66. async def test_aset(self):
  67. await self.mtm1.simples.aset([self.s1])
  68. self.assertEqual(await self.mtm1.simples.aget(), self.s1)
  69. await self.mtm1.simples.aset([])
  70. self.assertEqual(await self.mtm1.simples.acount(), 0)
  71. await self.mtm1.simples.aset([self.s1], clear=True)
  72. self.assertEqual(await self.mtm1.simples.aget(), self.s1)
  73. async def test_aset_reverse(self):
  74. r1 = await RelatedModel.objects.acreate()
  75. await self.s1.relatedmodel_set.aset([r1])
  76. self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
  77. await self.s1.relatedmodel_set.aset([])
  78. self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)
  79. await self.s1.relatedmodel_set.aset([r1], bulk=False, clear=True)
  80. self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
  81. async def test_aclear(self):
  82. self.assertEqual(await self.mtm2.simples.acount(), 1)
  83. await self.mtm2.simples.aclear()
  84. self.assertEqual(await self.mtm2.simples.acount(), 0)
  85. async def test_aclear_reverse(self):
  86. await RelatedModel.objects.acreate(simple=self.s1)
  87. self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
  88. await self.s1.relatedmodel_set.aclear(bulk=False)
  89. self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)