@@ -296,6 +296,14 @@ def test_compatibility(self):
296296 out = self ._fetch (is_compatibility = True , source = first .source , signal = first .signal , geo = first .geo_pair , time = "day:*" )
297297 self .assertEqual (len (out ["epidata" ]), len (rows ))
298298
299+ def _diff_covidcast_rows (self , rows : List [CovidcastRow ]) -> List [CovidcastRow ]:
300+ new_rows = list ()
301+ for x , y in zip (rows [1 :], rows [:- 1 ]):
302+ new_row = copy (x )
303+ new_row .value = x .value - y .value
304+ new_rows .append (new_row )
305+ return new_rows
306+
299307 def test_trend (self ):
300308 """Request a signal the /trend endpoint."""
301309
@@ -306,29 +314,66 @@ def test_trend(self):
306314 ref = rows [num_rows // 2 ]
307315 self ._insert_rows (rows )
308316
309- out = self ._fetch ("/trend" , signal = first .signal_pair , geo = first .geo_pair , date = last .time_value , window = "20200401-20201212" , basis = ref .time_value )
317+ with self .subTest ("no server-side compute" ):
318+ out = self ._fetch ("/trend" , signal = first .signal_pair , geo = first .geo_pair , date = last .time_value , window = "20200401-20201212" , basis = ref .time_value )
319+
320+ self .assertEqual (out ["result" ], 1 )
321+ self .assertEqual (len (out ["epidata" ]), 1 )
322+ trend = out ["epidata" ][0 ]
323+ self .assertEqual (trend ["geo_type" ], last .geo_type )
324+ self .assertEqual (trend ["geo_value" ], last .geo_value )
325+ self .assertEqual (trend ["signal_source" ], last .source )
326+ self .assertEqual (trend ["signal_signal" ], last .signal )
327+
328+ self .assertEqual (trend ["date" ], last .time_value )
329+ self .assertEqual (trend ["value" ], last .value )
330+
331+ self .assertEqual (trend ["basis_date" ], ref .time_value )
332+ self .assertEqual (trend ["basis_value" ], ref .value )
333+ self .assertEqual (trend ["basis_trend" ], "increasing" )
334+
335+ self .assertEqual (trend ["min_date" ], first .time_value )
336+ self .assertEqual (trend ["min_value" ], first .value )
337+ self .assertEqual (trend ["min_trend" ], "increasing" )
338+ self .assertEqual (trend ["max_date" ], last .time_value )
339+ self .assertEqual (trend ["max_value" ], last .value )
340+ self .assertEqual (trend ["max_trend" ], "steady" )
341+
342+ num_rows = 30
343+ time_value_pairs = [(20200331 , 0 )] + [(20200401 + i , v ) for i , v in enumerate (accumulate (range (num_rows )))]
344+ rows = [CovidcastRow (source = "jhu-csse" , signal = "confirmed_cumulative_num" , time_value = t , value = v ) for t , v in time_value_pairs ]
345+ self ._insert_rows (rows )
346+ diffed_rows = self ._diff_covidcast_rows (rows )
347+ for row in diffed_rows :
348+ row .signal = "confirmed_incidence_num"
349+ first = diffed_rows [0 ]
350+ last = diffed_rows [- 1 ]
351+ ref = diffed_rows [num_rows // 2 ]
352+ with self .subTest ("use server-side compute" ):
353+ out = self ._fetch ("/trend" , signal = "jhu-csse:confirmed_incidence_num" , geo = first .geo_pair , date = last .time_value , window = "20200401-20201212" , basis = ref .time_value )
354+
355+ self .assertEqual (out ["result" ], 1 )
356+ self .assertEqual (len (out ["epidata" ]), 1 )
357+ trend = out ["epidata" ][0 ]
358+ self .assertEqual (trend ["geo_type" ], last .geo_type )
359+ self .assertEqual (trend ["geo_value" ], last .geo_value )
360+ self .assertEqual (trend ["signal_source" ], last .source )
361+ self .assertEqual (trend ["signal_signal" ], last .signal )
362+
363+ self .assertEqual (trend ["date" ], last .time_value )
364+ self .assertEqual (trend ["value" ], last .value )
365+
366+ self .assertEqual (trend ["basis_date" ], ref .time_value )
367+ self .assertEqual (trend ["basis_value" ], ref .value )
368+ self .assertEqual (trend ["basis_trend" ], "increasing" )
369+
370+ self .assertEqual (trend ["min_date" ], first .time_value )
371+ self .assertEqual (trend ["min_value" ], first .value )
372+ self .assertEqual (trend ["min_trend" ], "increasing" )
373+ self .assertEqual (trend ["max_date" ], last .time_value )
374+ self .assertEqual (trend ["max_value" ], last .value )
375+ self .assertEqual (trend ["max_trend" ], "steady" )
310376
311- self .assertEqual (out ["result" ], 1 )
312- self .assertEqual (len (out ["epidata" ]), 1 )
313- trend = out ["epidata" ][0 ]
314- self .assertEqual (trend ["geo_type" ], last .geo_type )
315- self .assertEqual (trend ["geo_value" ], last .geo_value )
316- self .assertEqual (trend ["signal_source" ], last .source )
317- self .assertEqual (trend ["signal_signal" ], last .signal )
318-
319- self .assertEqual (trend ["date" ], last .time_value )
320- self .assertEqual (trend ["value" ], last .value )
321-
322- self .assertEqual (trend ["basis_date" ], ref .time_value )
323- self .assertEqual (trend ["basis_value" ], ref .value )
324- self .assertEqual (trend ["basis_trend" ], "increasing" )
325-
326- self .assertEqual (trend ["min_date" ], first .time_value )
327- self .assertEqual (trend ["min_value" ], first .value )
328- self .assertEqual (trend ["min_trend" ], "increasing" )
329- self .assertEqual (trend ["max_date" ], last .time_value )
330- self .assertEqual (trend ["max_value" ], last .value )
331- self .assertEqual (trend ["max_trend" ], "steady" )
332377
333378 def test_trendseries (self ):
334379 """Request a signal the /trendseries endpoint."""
0 commit comments