summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-12-05 09:54:27 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-12-05 15:50:39 +0100
commit5d674eac871a306405b0fbbaeb17bbeba9c68bf3 (patch)
tree39f827b82af94b862d9e373d30fef52226e4bcdb /tests/postgres_tests
parent664521c56aa72e7749292e4b8d92f093421463b5 (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.py16
-rw-r--r--tests/postgres_tests/models.py10
-rw-r--r--tests/postgres_tests/test_ranges.py62
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 = [