@@ -191,6 +191,75 @@ def test_basic(self):
191
191
expected_values = [float (row .value ) for row in rows ]
192
192
self .assertEqual (out_values , expected_values )
193
193
194
+ def test_derived_signals (self ):
195
+ time_value_pairs = [(20200401 + i , i ** 2 ) for i in range (10 )]
196
+ rows01 = [CovidcastRow (source = "jhu-csse" , signal = "confirmed_cumulative_num" , time_value = time_value , value = value , geo_value = "01" ) for time_value , value in time_value_pairs ]
197
+ rows02 = [CovidcastRow (source = "jhu-csse" , signal = "confirmed_cumulative_num" , time_value = time_value , value = 2 * value , geo_value = "02" ) for time_value , value in time_value_pairs ]
198
+ first = rows01 [0 ]
199
+ self ._insert_rows (rows01 + rows02 )
200
+
201
+ with self .subTest ("diffed signal" ):
202
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = first .geo_pair , time = "day:*" )
203
+ assert out ['result' ] == - 2
204
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = first .geo_pair , time = "day:20200401-20200410" )
205
+ self .assertEqual (len (out ["epidata" ]), len (rows01 ))
206
+ out_values = [row ["value" ] for row in out ["epidata" ]]
207
+ values = [None ] + [value for _ , value in time_value_pairs ]
208
+ expected_values = self ._diff_rows (values )
209
+ self .assertAlmostEqual (out_values , expected_values )
210
+
211
+ with self .subTest ("diffed signal, multiple geos" ):
212
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = "county:01,02" , time = "day:20200401-20200410" )
213
+ self .assertEqual (len (out ["epidata" ]), 2 * (len (rows01 )))
214
+ out_values = [row ["value" ] for row in out ["epidata" ]]
215
+ values1 = [None ] + [value for _ , value in time_value_pairs ]
216
+ values2 = [None ] + [2 * value for _ , value in time_value_pairs ]
217
+ expected_values = self ._diff_rows (values1 ) + self ._diff_rows (values2 )
218
+ self .assertAlmostEqual (out_values , expected_values )
219
+
220
+ with self .subTest ("diffed signal, multiple geos using geo:*" ):
221
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = "county:*" , time = "day:20200401-20200410" )
222
+ self .assertEqual (len (out ["epidata" ]), 2 * (len (rows01 )))
223
+ values1 = [None ] + [value for _ , value in time_value_pairs ]
224
+ values2 = [None ] + [2 * value for _ , value in time_value_pairs ]
225
+ expected_values = self ._diff_rows (values1 ) + self ._diff_rows (values2 )
226
+ self .assertAlmostEqual (out_values , expected_values )
227
+
228
+
229
+ with self .subTest ("diffing with time window resizing" ):
230
+ # should fetch 1 extra day
231
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = first .geo_pair , time = "day:20200402-20200410" )
232
+ self .assertEqual (len (out ["epidata" ]), len (rows01 ) - 1 )
233
+ out_values = [row ["value" ] for row in out ["epidata" ]]
234
+ values = [value for _ , value in time_value_pairs ]
235
+ expected_values = self ._diff_rows (values )
236
+ self .assertAlmostEqual (out_values , expected_values )
237
+
238
+ time_value_pairs = [(20200401 + i , i ** 2 ) for i in chain (range (10 ), range (15 , 20 ))]
239
+ rows = [CovidcastRow (source = "jhu-csse" , signal = "confirmed_cumulative_num" , geo_value = "03" , time_value = time_value , value = value ) for time_value , value in time_value_pairs ]
240
+ first = rows [0 ]
241
+ self ._insert_rows (rows )
242
+
243
+ with self .subTest ("diffing with a time gap" ):
244
+ # should fetch 1 extra day
245
+ out = self ._fetch ("/" , signal = "jhu-csse:confirmed_incidence_num" , geo = first .geo_pair , time = "day:20200401-20200420" )
246
+ self .assertEqual (len (out ["epidata" ]), len (rows ) + 5 )
247
+ out_values = [row ["value" ] for row in out ["epidata" ]]
248
+ values = [None ] + [value for _ , value in time_value_pairs ][:10 ] + [None ] * 5 + [value for _ , value in time_value_pairs ][10 :]
249
+ expected_values = self ._diff_rows (values )
250
+ self .assertAlmostEqual (out_values , expected_values )
251
+
252
+
253
+ def test_compatibility (self ):
254
+ """Request at the /api.php endpoint."""
255
+ rows = [CovidcastRow (source = "src" , signal = "sig" , time_value = 20200401 + i , value = i ) for i in range (10 )]
256
+ first = rows [0 ]
257
+ self ._insert_rows (rows )
258
+
259
+ with self .subTest ("simple" ):
260
+ out = self ._fetch (is_compatibility = True , source = first .source , signal = first .signal , geo = first .geo_pair , time = "day:*" )
261
+ self .assertEqual (len (out ["epidata" ]), len (rows ))
262
+
194
263
def test_trend (self ):
195
264
"""Request a signal the /trend endpoint."""
196
265
0 commit comments