@@ -97,6 +97,36 @@ def test_constructor_subfields(self):
97
97
self .assertEqual (field .fields [0 ], sub_field1 )
98
98
self .assertEqual (field .fields [1 ], sub_field2 )
99
99
100
+ def test_constructor_range (self ):
101
+ from google .cloud .bigquery .schema import FieldElementType
102
+
103
+ field = self ._make_one (
104
+ "test" ,
105
+ "RANGE" ,
106
+ mode = "REQUIRED" ,
107
+ description = "Testing" ,
108
+ range_element_type = FieldElementType ("DATETIME" ),
109
+ )
110
+ self .assertEqual (field .name , "test" )
111
+ self .assertEqual (field .field_type , "RANGE" )
112
+ self .assertEqual (field .mode , "REQUIRED" )
113
+ self .assertEqual (field .description , "Testing" )
114
+ self .assertEqual (field .range_element_type .element_type , "DATETIME" )
115
+
116
+ def test_constructor_range_str (self ):
117
+ field = self ._make_one (
118
+ "test" ,
119
+ "RANGE" ,
120
+ mode = "REQUIRED" ,
121
+ description = "Testing" ,
122
+ range_element_type = "DATETIME" ,
123
+ )
124
+ self .assertEqual (field .name , "test" )
125
+ self .assertEqual (field .field_type , "RANGE" )
126
+ self .assertEqual (field .mode , "REQUIRED" )
127
+ self .assertEqual (field .description , "Testing" )
128
+ self .assertEqual (field .range_element_type .element_type , "DATETIME" )
129
+
100
130
def test_to_api_repr (self ):
101
131
from google .cloud .bigquery .schema import PolicyTagList
102
132
@@ -160,6 +190,7 @@ def test_from_api_repr(self):
160
190
self .assertEqual (field .fields [0 ].name , "bar" )
161
191
self .assertEqual (field .fields [0 ].field_type , "INTEGER" )
162
192
self .assertEqual (field .fields [0 ].mode , "NULLABLE" )
193
+ self .assertEqual (field .range_element_type , None )
163
194
164
195
def test_from_api_repr_policy (self ):
165
196
field = self ._get_target_class ().from_api_repr (
@@ -178,6 +209,23 @@ def test_from_api_repr_policy(self):
178
209
self .assertEqual (field .fields [0 ].field_type , "INTEGER" )
179
210
self .assertEqual (field .fields [0 ].mode , "NULLABLE" )
180
211
212
+ def test_from_api_repr_range (self ):
213
+ field = self ._get_target_class ().from_api_repr (
214
+ {
215
+ "mode" : "nullable" ,
216
+ "description" : "test_range" ,
217
+ "name" : "foo" ,
218
+ "type" : "range" ,
219
+ "rangeElementType" : {"type" : "DATETIME" },
220
+ }
221
+ )
222
+ self .assertEqual (field .name , "foo" )
223
+ self .assertEqual (field .field_type , "RANGE" )
224
+ self .assertEqual (field .mode , "NULLABLE" )
225
+ self .assertEqual (field .description , "test_range" )
226
+ self .assertEqual (len (field .fields ), 0 )
227
+ self .assertEqual (field .range_element_type .element_type , "DATETIME" )
228
+
181
229
def test_from_api_repr_defaults (self ):
182
230
field = self ._get_target_class ().from_api_repr (
183
231
{"name" : "foo" , "type" : "record" }
@@ -192,8 +240,10 @@ def test_from_api_repr_defaults(self):
192
240
# _properties.
193
241
self .assertIsNone (field .description )
194
242
self .assertIsNone (field .policy_tags )
243
+ self .assertIsNone (field .range_element_type )
195
244
self .assertNotIn ("description" , field ._properties )
196
245
self .assertNotIn ("policyTags" , field ._properties )
246
+ self .assertNotIn ("rangeElementType" , field ._properties )
197
247
198
248
def test_name_property (self ):
199
249
name = "lemon-ness"
@@ -566,6 +616,40 @@ def test___repr__evaluable_with_policy_tags(self):
566
616
assert field == evaled_field
567
617
568
618
619
+ class TestFieldElementType (unittest .TestCase ):
620
+ @staticmethod
621
+ def _get_target_class ():
622
+ from google .cloud .bigquery .schema import FieldElementType
623
+
624
+ return FieldElementType
625
+
626
+ def _make_one (self , * args ):
627
+ return self ._get_target_class ()(* args )
628
+
629
+ def test_constructor (self ):
630
+ element_type = self ._make_one ("DATETIME" )
631
+ self .assertEqual (element_type .element_type , "DATETIME" )
632
+ self .assertEqual (element_type ._properties ["type" ], "DATETIME" )
633
+
634
+ def test_to_api_repr (self ):
635
+ element_type = self ._make_one ("DATETIME" )
636
+ self .assertEqual (element_type .to_api_repr (), {"type" : "DATETIME" })
637
+
638
+ def test_from_api_repr (self ):
639
+ api_repr = {"type" : "DATETIME" }
640
+ expected_element_type = self ._make_one ("DATETIME" )
641
+ self .assertEqual (
642
+ expected_element_type .element_type ,
643
+ self ._get_target_class ().from_api_repr (api_repr ).element_type ,
644
+ )
645
+
646
+ def test_from_api_repr_empty (self ):
647
+ self .assertEqual (None , self ._get_target_class ().from_api_repr ({}))
648
+
649
+ def test_from_api_repr_none (self ):
650
+ self .assertEqual (None , self ._get_target_class ().from_api_repr (None ))
651
+
652
+
569
653
# TODO: dedup with the same class in test_table.py.
570
654
class _SchemaBase (object ):
571
655
def _verify_field (self , field , r_field ):
0 commit comments