44import django
55import imghdr
66import os
7+ from decimal import Decimal
78
89import pytest
910import pytz
@@ -445,6 +446,7 @@ class FieldValues:
445446 """
446447 Base class for testing valid and invalid input values.
447448 """
449+
448450 def test_valid_inputs (self ):
449451 """
450452 Ensure that valid values return the expected validated data.
@@ -479,7 +481,6 @@ class TestIntegerRangeField(FieldValues):
479481 Values for `ListField` with CharField as child.
480482 """
481483 serializer_class = IntegerRangeSerializer
482-
483484 valid_inputs = [
484485 ({'lower' : '1' , 'upper' : 2 , 'bounds' : '[)' },
485486 NumericRange (** {'lower' : 1 , 'upper' : 2 , 'bounds' : '[)' })),
@@ -504,6 +505,15 @@ class TestIntegerRangeField(FieldValues):
504505 {'lower' : 1 , 'upper' : 2 , 'bounds' : '[)' }),
505506 (NumericRange (** {'empty' : True }), {'empty' : True }),
506507 (NumericRange (), {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
508+ ({'lower' : '1' , 'upper' : 2 , 'bounds' : '[)' },
509+ {'lower' : 1 , 'upper' : 2 , 'bounds' : '[)' }),
510+ ({'lower' : 1 , 'upper' : 2 },
511+ {'lower' : 1 , 'upper' : 2 , 'bounds' : None }),
512+ ({'lower' : 1 },
513+ {'lower' : 1 , 'upper' : None , 'bounds' : None }),
514+ ({'upper' : 1 },
515+ {'lower' : None , 'upper' : 1 , 'bounds' : None }),
516+ ({}, {}),
507517 ]
508518 field = IntegerRangeField ()
509519
@@ -543,6 +553,15 @@ class TestDecimalRangeField(FieldValues):
543553 {'lower' : '1.1' , 'upper' : '2' , 'bounds' : '[)' }),
544554 (NumericRange (** {'empty' : True }), {'empty' : True }),
545555 (NumericRange (), {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
556+ ({'lower' : Decimal ('1.1' ), 'upper' : "2.3" , 'bounds' : '[)' },
557+ {'lower' : "1.1" , 'upper' : "2.3" , 'bounds' : '[)' }),
558+ ({'lower' : Decimal ('1.1' ), 'upper' : "2.3" },
559+ {'lower' : "1.1" , 'upper' : "2.3" , 'bounds' : None }),
560+ ({'lower' : 1 },
561+ {'lower' : "1" , 'upper' : None , 'bounds' : None }),
562+ ({'upper' : 1 },
563+ {'lower' : None , 'upper' : "1" , 'bounds' : None }),
564+ ({}, {}),
546565 ]
547566 field = DecimalRangeField ()
548567
@@ -585,6 +604,15 @@ class TestDecimalRangeFieldWithChildAttribute(FieldValues):
585604 {'lower' : '1.10' , 'upper' : '2.00' , 'bounds' : '[)' }),
586605 (NumericRange (** {'empty' : True }), {'empty' : True }),
587606 (NumericRange (), {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
607+ ({'lower' : Decimal ('1.1' ), 'upper' : "2.3" , 'bounds' : '[)' },
608+ {'lower' : "1.10" , 'upper' : "2.30" , 'bounds' : '[)' }),
609+ ({'lower' : Decimal ('1.1' ), 'upper' : "2.3" },
610+ {'lower' : "1.10" , 'upper' : "2.30" , 'bounds' : None }),
611+ ({'lower' : 1 },
612+ {'lower' : "1.00" , 'upper' : None , 'bounds' : None }),
613+ ({'upper' : 1 },
614+ {'lower' : None , 'upper' : "1.00" , 'bounds' : None }),
615+ ({}, {}),
588616 ]
589617
590618
@@ -619,6 +647,15 @@ class TestFloatRangeField(FieldValues):
619647 {'lower' : 1.1 , 'upper' : 2 , 'bounds' : '[)' }),
620648 (NumericRange (** {'empty' : True }), {'empty' : True }),
621649 (NumericRange (), {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
650+ ({'lower' : '1' , 'upper' : 2. , 'bounds' : '[)' },
651+ {'lower' : 1. , 'upper' : 2. , 'bounds' : '[)' }),
652+ ({'lower' : 1. , 'upper' : 2. },
653+ {'lower' : 1 , 'upper' : 2 , 'bounds' : None }),
654+ ({'lower' : 1 },
655+ {'lower' : 1 , 'upper' : None , 'bounds' : None }),
656+ ({'upper' : 1 },
657+ {'lower' : None , 'upper' : 1 , 'bounds' : None }),
658+ ({}, {}),
622659 ]
623660 field = FloatRangeField ()
624661
@@ -681,6 +718,23 @@ class TestDateTimeRangeField(TestCase, FieldValues):
681718 {'empty' : True }),
682719 (DateTimeTZRange (),
683720 {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
721+ ({'lower' : '2001-01-01T13:00:00Z' ,
722+ 'upper' : '2001-02-02T13:00:00Z' ,
723+ 'bounds' : '[)' },
724+ {'lower' : '2001-01-01T13:00:00Z' ,
725+ 'upper' : '2001-02-02T13:00:00Z' ,
726+ 'bounds' : '[)' }),
727+ ({'lower' : datetime .datetime (2001 , 1 , 1 , 13 , 00 , tzinfo = pytz .utc ),
728+ 'upper' : datetime .datetime (2001 , 2 , 2 , 13 , 00 , tzinfo = pytz .utc ),
729+ 'bounds' : '[)' },
730+ {'lower' : '2001-01-01T13:00:00Z' ,
731+ 'upper' : '2001-02-02T13:00:00Z' ,
732+ 'bounds' : '[)' }),
733+ ({'upper' : '2001-02-02T13:00:00Z' , 'bounds' : '[)' },
734+ {'lower' : None , 'upper' : '2001-02-02T13:00:00Z' , 'bounds' : '[)' }),
735+ ({'lower' : '2001-01-01T13:00:00Z' , 'bounds' : '[)' },
736+ {'lower' : '2001-01-01T13:00:00Z' , 'upper' : None , 'bounds' : '[)' }),
737+ ({}, {}),
684738 ]
685739 field = DateTimeRangeField ()
686740
@@ -741,6 +795,23 @@ class TestDateRangeField(FieldValues):
741795 (DateRange (** {'empty' : True }),
742796 {'empty' : True }),
743797 (DateRange (), {'bounds' : '[)' , 'lower' : None , 'upper' : None }),
798+ ({'lower' : '2001-01-01' ,
799+ 'upper' : '2001-02-02' ,
800+ 'bounds' : '[)' },
801+ {'lower' : '2001-01-01' ,
802+ 'upper' : '2001-02-02' ,
803+ 'bounds' : '[)' }),
804+ ({'lower' : datetime .date (2001 , 1 , 1 ),
805+ 'upper' : datetime .date (2001 , 2 , 2 ),
806+ 'bounds' : '[)' },
807+ {'lower' : '2001-01-01' ,
808+ 'upper' : '2001-02-02' ,
809+ 'bounds' : '[)' }),
810+ ({'upper' : '2001-02-02' , 'bounds' : '[)' },
811+ {'lower' : None , 'upper' : '2001-02-02' , 'bounds' : '[)' }),
812+ ({'lower' : '2001-01-01' , 'bounds' : '[)' },
813+ {'lower' : '2001-01-01' , 'upper' : None , 'bounds' : '[)' }),
814+ ({}, {}),
744815 ]
745816 field = DateRangeField ()
746817
0 commit comments