diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-12-05 09:54:27 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-05 15:50:39 +0100 |
| commit | 5d674eac871a306405b0fbbaeb17bbeba9c68bf3 (patch) | |
| tree | 39f827b82af94b862d9e373d30fef52226e4bcdb /tests/postgres_tests | |
| parent | 664521c56aa72e7749292e4b8d92f093421463b5 (diff) | |
Fixed #31039 -- Added support for contained_by lookup with AutoFields, SmallIntegerField, and DecimalField.
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/migrations/0002_create_test_models.py | 16 | ||||
| -rw-r--r-- | tests/postgres_tests/models.py | 10 | ||||
| -rw-r--r-- | tests/postgres_tests/test_ranges.py | 62 |
3 files changed, 87 insertions, 1 deletions
diff --git a/tests/postgres_tests/migrations/0002_create_test_models.py b/tests/postgres_tests/migrations/0002_create_test_models.py index 0e36cd1256..12d94e348a 100644 --- a/tests/postgres_tests/migrations/0002_create_test_models.py +++ b/tests/postgres_tests/migrations/0002_create_test_models.py @@ -125,6 +125,20 @@ class Migration(migrations.Migration): bases=None, ), migrations.CreateModel( + name='SmallAutoFieldModel', + fields=[ + ('id', models.SmallAutoField(verbose_name='ID', serialize=False, primary_key=True)), + ], + options=None, + ), + migrations.CreateModel( + name='BigAutoFieldModel', + fields=[ + ('id', models.BigAutoField(verbose_name='ID', serialize=False, primary_key=True)), + ], + options=None, + ), + migrations.CreateModel( name='Scene', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), @@ -237,6 +251,8 @@ class Migration(migrations.Migration): ('float', models.FloatField(blank=True, null=True)), ('timestamp', models.DateTimeField(blank=True, null=True)), ('date', models.DateField(blank=True, null=True)), + ('small_integer', models.SmallIntegerField(blank=True, null=True)), + ('decimal_field', models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)), ], options={ 'required_db_vendor': 'postgresql', diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py index 2cf47b88c7..8528c59da1 100644 --- a/tests/postgres_tests/models.py +++ b/tests/postgres_tests/models.py @@ -93,6 +93,14 @@ class TextFieldModel(models.Model): return self.field +class SmallAutoFieldModel(models.Model): + id = models.SmallAutoField(primary_key=True) + + +class BigAutoFieldModel(models.Model): + id = models.BigAutoField(primary_key=True) + + # Scene/Character/Line models are used to test full text search. They're # populated with content from Monty Python and the Holy Grail. class Scene(models.Model): @@ -148,6 +156,8 @@ class RangeLookupsModel(PostgreSQLModel): float = models.FloatField(blank=True, null=True) timestamp = models.DateTimeField(blank=True, null=True) date = models.DateField(blank=True, null=True) + small_integer = models.SmallIntegerField(blank=True, null=True) + decimal_field = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True) class JSONModel(PostgreSQLModel): diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py index 789ff3d546..7257d66505 100644 --- a/tests/postgres_tests/test_ranges.py +++ b/tests/postgres_tests/test_ranges.py @@ -11,7 +11,10 @@ from django.test.utils import isolate_apps from django.utils import timezone from . import PostgreSQLSimpleTestCase, PostgreSQLTestCase -from .models import PostgreSQLModel, RangeLookupsModel, RangesModel +from .models import ( + BigAutoFieldModel, PostgreSQLModel, RangeLookupsModel, RangesModel, + SmallAutoFieldModel, +) try: from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange @@ -354,6 +357,17 @@ class TestQueryingWithRanges(PostgreSQLTestCase): [objs[0]], ) + def test_small_integer_field_contained_by(self): + objs = [ + RangeLookupsModel.objects.create(small_integer=8), + RangeLookupsModel.objects.create(small_integer=4), + RangeLookupsModel.objects.create(small_integer=-1), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(small_integer__contained_by=NumericRange(4, 6)), + [objs[1]], + ) + def test_integer_range(self): objs = [ RangeLookupsModel.objects.create(integer=5), @@ -376,6 +390,19 @@ class TestQueryingWithRanges(PostgreSQLTestCase): [objs[0]] ) + def test_decimal_field_contained_by(self): + objs = [ + RangeLookupsModel.objects.create(decimal_field=Decimal('1.33')), + RangeLookupsModel.objects.create(decimal_field=Decimal('2.88')), + RangeLookupsModel.objects.create(decimal_field=Decimal('99.17')), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter( + decimal_field__contained_by=NumericRange(Decimal('1.89'), Decimal('7.91')), + ), + [objs[1]], + ) + def test_float_range(self): objs = [ RangeLookupsModel.objects.create(float=5), @@ -387,6 +414,39 @@ class TestQueryingWithRanges(PostgreSQLTestCase): [objs[0]] ) + def test_small_auto_field_contained_by(self): + objs = SmallAutoFieldModel.objects.bulk_create([ + SmallAutoFieldModel() for i in range(1, 5) + ]) + self.assertSequenceEqual( + SmallAutoFieldModel.objects.filter( + id__contained_by=NumericRange(objs[1].pk, objs[3].pk), + ), + objs[1:3], + ) + + def test_auto_field_contained_by(self): + objs = RangeLookupsModel.objects.bulk_create([ + RangeLookupsModel() for i in range(1, 5) + ]) + self.assertSequenceEqual( + RangeLookupsModel.objects.filter( + id__contained_by=NumericRange(objs[1].pk, objs[3].pk), + ), + objs[1:3], + ) + + def test_big_auto_field_contained_by(self): + objs = BigAutoFieldModel.objects.bulk_create([ + BigAutoFieldModel() for i in range(1, 5) + ]) + self.assertSequenceEqual( + BigAutoFieldModel.objects.filter( + id__contained_by=NumericRange(objs[1].pk, objs[3].pk), + ), + objs[1:3], + ) + def test_f_ranges(self): parent = RangesModel.objects.create(decimals=NumericRange(0, 10)) objs = [ |
