Skip to content

Commit bc3e01a

Browse files
author
Andy Babic
committed
Update tests
1 parent ba498c3 commit bc3e01a

File tree

3 files changed

+77
-2
lines changed

3 files changed

+77
-2
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Generated by Django 4.2.9 on 2024-02-04 06:59
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
import modelcluster.fields
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("taggit", "0005_auto_20220424_2025"),
12+
("tests", "0011_add_room_features"),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name="RecordLabel",
18+
fields=[
19+
(
20+
"id",
21+
models.AutoField(
22+
auto_created=True,
23+
primary_key=True,
24+
serialize=False,
25+
verbose_name="ID",
26+
),
27+
),
28+
("name", models.CharField(max_length=200)),
29+
("range", models.SmallIntegerField(blank=True, default=5)),
30+
],
31+
),
32+
migrations.AddField(
33+
model_name="album",
34+
name="label",
35+
field=models.ForeignKey(
36+
blank=True,
37+
null=True,
38+
on_delete=django.db.models.deletion.SET_NULL,
39+
to="tests.recordlabel",
40+
),
41+
),
42+
]

tests/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Album(ClusterableModel):
3636
name = models.CharField(max_length=255)
3737
release_date = models.DateField(null=True, blank=True)
3838
sort_order = models.IntegerField(null=True, blank=True, editable=False)
39+
label = models.ForeignKey("RecordLabel", blank=True, null=True, on_delete=models.SET_NULL)
3940

4041
sort_order_field = 'sort_order'
4142

@@ -60,6 +61,14 @@ class Meta:
6061
ordering = ['sort_order']
6162

6263

64+
class RecordLabel(models.Model):
65+
name = models.CharField(max_length=200)
66+
range = models.SmallIntegerField(default=5, blank=True)
67+
68+
def __str__(self):
69+
return self.name
70+
71+
6372
class TaggedPlace(TaggedItemBase):
6473
content_object = ParentalKey('Place', related_name='tagged_items', on_delete=models.CASCADE)
6574

tests/tests/test_cluster.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
from modelcluster.queryset import FakeQuerySet
1212
from modelcluster.utils import ManyToManyTraversalError
1313

14-
from tests.models import Band, BandMember, Chef, Feature, Place, Restaurant, SeafoodRestaurant, \
15-
Review, Album, Article, Author, Category, Person, Room, House, Log, Dish, MenuItem, Wine
14+
from tests.models import Band, BandMember, Chef, Feature, Place, Restaurant, \
15+
Review, Album, Song, RecordLabel, Article, Author, Category, Person, \
16+
Room, House, Log, Dish, MenuItem, Wine
1617

1718

1819
class ClusterTest(TestCase):
@@ -142,6 +143,29 @@ def test_can_create_cluster(self):
142143
# queries on beatles.members should now revert to SQL
143144
self.assertTrue(beatles.members.extra(where=["tests_bandmember.name='John Lennon'"]).exists())
144145

146+
def test_filter_expression_token_clash_handling(self):
147+
"""
148+
This tests ensures that the field name 'range' should not be mistaken
149+
for the 'range' from FILTER_EXPRESSION_TOKENS when used in filter()
150+
or exclude().
151+
152+
Plus, extract_field_value() should not crash when encountering albums
153+
without a 'label' value specified (they should be classed as automatic
154+
test failures and excluded from the result).
155+
"""
156+
label = RecordLabel.objects.create(name="Parlophone", range=7)
157+
beatles = Band(
158+
name="The Beatles",
159+
albums=[
160+
Album(name='Please Please Me', label=label, sort_order=1),
161+
Album(name='With The Beatles', sort_order=2),
162+
Album(name='A Hard Day\'s Night', sort_order=3),
163+
],
164+
)
165+
166+
self.assertEqual(beatles.albums.filter(label__range=7).count(), 1)
167+
self.assertEqual(beatles.albums.exclude(label__range=7).count(), 2)
168+
145169
def test_values_list(self):
146170
beatles = Band(
147171
name="The Beatles",

0 commit comments

Comments
 (0)