diff options
Diffstat (limited to 'tests/postgres_tests/test_ranges.py')
| -rw-r--r-- | tests/postgres_tests/test_ranges.py | 93 |
1 files changed, 92 insertions, 1 deletions
diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py index 7cd8a60b2f..2461130b35 100644 --- a/tests/postgres_tests/test_ranges.py +++ b/tests/postgres_tests/test_ranges.py @@ -5,11 +5,12 @@ import unittest from django import forms from django.core import exceptions, serializers from django.db import connection +from django.db.models import F from django.test import TestCase, override_settings from django.utils import timezone from . import PostgreSQLTestCase -from .models import RangesModel +from .models import RangeLookupsModel, RangesModel try: from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange @@ -198,6 +199,96 @@ class TestQuerying(TestCase): @skipUnlessPG92 +class TestQueringWithRanges(TestCase): + def test_date_range(self): + objs = [ + RangeLookupsModel.objects.create(date='2015-01-01'), + RangeLookupsModel.objects.create(date='2015-05-05'), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(date__contained_by=DateRange('2015-01-01', '2015-05-04')), + [objs[0]], + ) + + def test_date_range_datetime_field(self): + objs = [ + RangeLookupsModel.objects.create(timestamp='2015-01-01'), + RangeLookupsModel.objects.create(timestamp='2015-05-05'), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(timestamp__date__contained_by=DateRange('2015-01-01', '2015-05-04')), + [objs[0]], + ) + + def test_datetime_range(self): + objs = [ + RangeLookupsModel.objects.create(timestamp='2015-01-01T09:00:00'), + RangeLookupsModel.objects.create(timestamp='2015-05-05T17:00:00'), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter( + timestamp__contained_by=DateTimeTZRange('2015-01-01T09:00', '2015-05-04T23:55') + ), + [objs[0]], + ) + + def test_integer_range(self): + objs = [ + RangeLookupsModel.objects.create(integer=5), + RangeLookupsModel.objects.create(integer=99), + RangeLookupsModel.objects.create(integer=-1), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(integer__contained_by=NumericRange(1, 98)), + [objs[0]] + ) + + def test_biginteger_range(self): + objs = [ + RangeLookupsModel.objects.create(big_integer=5), + RangeLookupsModel.objects.create(big_integer=99), + RangeLookupsModel.objects.create(big_integer=-1), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(big_integer__contained_by=NumericRange(1, 98)), + [objs[0]] + ) + + def test_float_range(self): + objs = [ + RangeLookupsModel.objects.create(float=5), + RangeLookupsModel.objects.create(float=99), + RangeLookupsModel.objects.create(float=-1), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(float__contained_by=NumericRange(1, 98)), + [objs[0]] + ) + + def test_f_ranges(self): + parent = RangesModel.objects.create(floats=NumericRange(0, 10)) + objs = [ + RangeLookupsModel.objects.create(float=5, parent=parent), + RangeLookupsModel.objects.create(float=99, parent=parent), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.filter(float__contained_by=F('parent__floats')), + [objs[0]] + ) + + def test_exclude(self): + objs = [ + RangeLookupsModel.objects.create(float=5), + RangeLookupsModel.objects.create(float=99), + RangeLookupsModel.objects.create(float=-1), + ] + self.assertSequenceEqual( + RangeLookupsModel.objects.exclude(float__contained_by=NumericRange(0, 100)), + [objs[2]] + ) + + +@skipUnlessPG92 class TestSerialization(TestCase): test_data = ( '[{"fields": {"ints": "{\\"upper\\": 10, \\"lower\\": 0, ' |
