summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJon Janzen <jon@jonjanzen.com>2022-11-03 19:57:33 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-11-09 10:32:40 +0100
commit321ecb40f4da842926e1bc07e11df4aabe53ca4b (patch)
tree3a306ec0bc38c90eb95d8adceaecc3017e1b3d06 /tests
parent41e8931c2cc68d8b2de4219be930e2c305b4eba1 (diff)
Fixed #34135 -- Added async-compatible interface to related managers.
Diffstat (limited to 'tests')
-rw-r--r--tests/async/test_async_related_managers.py52
-rw-r--r--tests/generic_relations/tests.py27
2 files changed, 78 insertions, 1 deletions
diff --git a/tests/async/test_async_related_managers.py b/tests/async/test_async_related_managers.py
index dd573f5989..c475b54899 100644
--- a/tests/async/test_async_related_managers.py
+++ b/tests/async/test_async_related_managers.py
@@ -1,6 +1,6 @@
from django.test import TestCase
-from .models import ManyToManyModel, SimpleModel
+from .models import ManyToManyModel, RelatedModel, SimpleModel
class AsyncRelatedManagersOperationTest(TestCase):
@@ -8,6 +8,8 @@ class AsyncRelatedManagersOperationTest(TestCase):
def setUpTestData(cls):
cls.mtm1 = ManyToManyModel.objects.create()
cls.s1 = SimpleModel.objects.create(field=0)
+ cls.mtm2 = ManyToManyModel.objects.create()
+ cls.mtm2.simples.set([cls.s1])
async def test_acreate(self):
await self.mtm1.simples.acreate(field=2)
@@ -54,3 +56,51 @@ class AsyncRelatedManagersOperationTest(TestCase):
self.assertIs(created, True)
self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
self.assertEqual(new_relatedmodel.simple, self.s1)
+
+ async def test_aadd(self):
+ await self.mtm1.simples.aadd(self.s1)
+ self.assertEqual(await self.mtm1.simples.aget(), self.s1)
+
+ async def test_aadd_reverse(self):
+ r1 = await RelatedModel.objects.acreate()
+ await self.s1.relatedmodel_set.aadd(r1, bulk=False)
+ self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
+
+ async def test_aremove(self):
+ self.assertEqual(await self.mtm2.simples.acount(), 1)
+ await self.mtm2.simples.aremove(self.s1)
+ self.assertEqual(await self.mtm2.simples.acount(), 0)
+
+ async def test_aremove_reverse(self):
+ r1 = await RelatedModel.objects.acreate(simple=self.s1)
+ self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
+ await self.s1.relatedmodel_set.aremove(r1)
+ self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)
+
+ async def test_aset(self):
+ await self.mtm1.simples.aset([self.s1])
+ self.assertEqual(await self.mtm1.simples.aget(), self.s1)
+ await self.mtm1.simples.aset([])
+ self.assertEqual(await self.mtm1.simples.acount(), 0)
+ await self.mtm1.simples.aset([self.s1], clear=True)
+ self.assertEqual(await self.mtm1.simples.aget(), self.s1)
+
+ async def test_aset_reverse(self):
+ r1 = await RelatedModel.objects.acreate()
+ await self.s1.relatedmodel_set.aset([r1])
+ self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
+ await self.s1.relatedmodel_set.aset([])
+ self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)
+ await self.s1.relatedmodel_set.aset([r1], bulk=False, clear=True)
+ self.assertEqual(await self.s1.relatedmodel_set.aget(), r1)
+
+ async def test_aclear(self):
+ self.assertEqual(await self.mtm2.simples.acount(), 1)
+ await self.mtm2.simples.aclear()
+ self.assertEqual(await self.mtm2.simples.acount(), 0)
+
+ async def test_aclear_reverse(self):
+ await RelatedModel.objects.acreate(simple=self.s1)
+ self.assertEqual(await self.s1.relatedmodel_set.acount(), 1)
+ await self.s1.relatedmodel_set.aclear(bulk=False)
+ self.assertEqual(await self.s1.relatedmodel_set.acount(), 0)
diff --git a/tests/generic_relations/tests.py b/tests/generic_relations/tests.py
index e6bee11cdf..18e3578f60 100644
--- a/tests/generic_relations/tests.py
+++ b/tests/generic_relations/tests.py
@@ -324,6 +324,13 @@ class GenericRelationsTests(TestCase):
with self.assertRaisesMessage(TypeError, msg):
self.bacon.tags.add(self.lion)
+ async def test_aadd(self):
+ bacon = await Vegetable.objects.acreate(name="Bacon", is_yucky=False)
+ t1 = await TaggedItem.objects.acreate(content_object=self.quartz, tag="shiny")
+ t2 = await TaggedItem.objects.acreate(content_object=self.quartz, tag="fatty")
+ await bacon.tags.aadd(t1, t2, bulk=False)
+ self.assertEqual(await bacon.tags.acount(), 2)
+
def test_set(self):
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
fatty = bacon.tags.create(tag="fatty")
@@ -347,6 +354,16 @@ class GenericRelationsTests(TestCase):
bacon.tags.set([], clear=True)
self.assertSequenceEqual(bacon.tags.all(), [])
+ async def test_aset(self):
+ bacon = await Vegetable.objects.acreate(name="Bacon", is_yucky=False)
+ fatty = await bacon.tags.acreate(tag="fatty")
+ await bacon.tags.aset([fatty])
+ self.assertEqual(await bacon.tags.acount(), 1)
+ await bacon.tags.aset([])
+ self.assertEqual(await bacon.tags.acount(), 0)
+ await bacon.tags.aset([fatty], bulk=False, clear=True)
+ self.assertEqual(await bacon.tags.acount(), 1)
+
def test_assign(self):
bacon = Vegetable.objects.create(name="Bacon", is_yucky=False)
fatty = bacon.tags.create(tag="fatty")
@@ -388,6 +405,10 @@ class GenericRelationsTests(TestCase):
[self.hairy, self.yellow],
)
+ async def test_aclear(self):
+ await self.bacon.tags.aclear()
+ self.assertEqual(await self.bacon.tags.acount(), 0)
+
def test_remove(self):
self.assertSequenceEqual(
TaggedItem.objects.order_by("tag"),
@@ -400,6 +421,12 @@ class GenericRelationsTests(TestCase):
[self.hairy, self.salty, self.yellow],
)
+ async def test_aremove(self):
+ await self.bacon.tags.aremove(self.fatty)
+ self.assertEqual(await self.bacon.tags.acount(), 1)
+ await self.bacon.tags.aremove(self.salty)
+ self.assertEqual(await self.bacon.tags.acount(), 0)
+
def test_generic_relation_related_name_default(self):
# GenericRelation isn't usable from the reverse side by default.
msg = (