Skip to content

Commit 5bee9c7

Browse files
committed
test: Add test case to show set() many update
1 parent f322798 commit 5bee9c7

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

example/test_full/models.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import Counter
12
from django.db import models
23
import sys
34
from computedfields.models import ComputedFieldsModel, computed, precomputed, ComputedField
@@ -1107,3 +1108,46 @@ class Meta:
11071108
class HaProxy(Ha):
11081109
class Meta:
11091110
proxy = True
1111+
1112+
1113+
class Tag(ComputedFieldsModel):
1114+
name = models.CharField(max_length=32, unique=True)
1115+
1116+
1117+
run_counters = Counter()
1118+
1119+
1120+
class Advert(ComputedFieldsModel):
1121+
name = models.CharField(max_length=32)
1122+
1123+
tags = models.ManyToManyField(Tag, related_name="adverts")
1124+
1125+
@computed(
1126+
field=models.CharField(max_length=500),
1127+
depends=[("tags", ["name"])],
1128+
)
1129+
def all_tags(self) -> str:
1130+
run_counters.update(["all_tags"])
1131+
if not self.pk:
1132+
return ""
1133+
return ", ".join(self.tags.values_list("name", flat=True))
1134+
1135+
def __str__(self) -> str:
1136+
return f"{self.name}"
1137+
1138+
class Room(ComputedFieldsModel):
1139+
name = models.CharField(max_length=32)
1140+
advert = models.ForeignKey(Advert, related_name="rooms", on_delete=models.CASCADE)
1141+
1142+
@computed(
1143+
field=models.BooleanField(),
1144+
depends=[("advert.tags", ["name"])],
1145+
)
1146+
def is_ready(self) -> bool:
1147+
run_counters.update(["is_ready"])
1148+
if not self.pk:
1149+
return False
1150+
return self.advert.tags.filter(name="ready").exists()
1151+
1152+
def __str__(self) -> str:
1153+
return f"{self.name}"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django.test import TestCase
2+
from .. import models
3+
4+
5+
class TestAdvertTags(TestCase):
6+
def test(self):
7+
tag_ready = models.Tag.objects.create(name="ready")
8+
advert_1 = models.Advert.objects.create(name="A1")
9+
room_11 = models.Room.objects.create(name="R11", advert=advert_1)
10+
advert_1.tags.add(tag_ready)
11+
advert_2 = models.Advert.objects.create(name="A2")
12+
room_21 = models.Room.objects.create(name="R21", advert=advert_2)
13+
assert models.run_counters["all_tags"] == 3
14+
assert models.run_counters["is_ready"] == 3
15+
16+
advert_2.tags.add(tag_ready)
17+
assert models.run_counters["all_tags"] == 4
18+
assert models.run_counters["is_ready"] == 4

0 commit comments

Comments
 (0)