11"""Integration tests for the custom `covidcast/*` endpoints."""
22
33# standard library
4- from copy import copy
5- from itertools import accumulate , chain
6- from typing import Iterable , Dict , Any , List , Sequence
7- import unittest
84from io import StringIO
9-
10- # from typing import Optional
11- from dataclasses import dataclass
5+ from typing import Sequence
126
137# third party
14- import mysql .connector
15- from more_itertools import interleave_longest , windowed
8+ from more_itertools import windowed
169import requests
1710import pandas as pd
18- import numpy as np
19- from delphi_utils import Nans
2011
2112from delphi .epidata .acquisition .covidcast .covidcast_meta_cache_updater import main as update_cache
22- from delphi .epidata .acquisition .covidcast .covidcast_row import CovidcastRow
23- from delphi .epidata .acquisition .covidcast .test_utils import CovidcastBase
13+ from delphi .epidata .acquisition .covidcast .test_utils import CovidcastBase , CovidcastTestRow
2414
2515# use the local instance of the Epidata API
2616BASE_URL = "http://delphi_web_epidata/epidata/covidcast"
@@ -64,7 +54,7 @@ def _smooth_rows(self, rows: Sequence[float]):
6454
6555 def test_basic (self ):
6656 """Request a signal from the / endpoint."""
67- rows = [CovidcastRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
57+ rows = [CovidcastTestRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
6858 first = rows [0 ]
6959 self ._insert_rows (rows )
7060
@@ -78,7 +68,7 @@ def test_basic(self):
7868
7969 def test_compatibility (self ):
8070 """Request at the /api.php endpoint."""
81- rows = [CovidcastRow .make_default_row (source = "src" , signal = "sig" , time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
71+ rows = [CovidcastTestRow .make_default_row (source = "src" , signal = "sig" , time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
8272 first = rows [0 ]
8373 self ._insert_rows (rows )
8474
@@ -94,7 +84,7 @@ def test_trend(self):
9484 """Request a signal from the /trend endpoint."""
9585
9686 num_rows = 30
97- rows = [CovidcastRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (num_rows )]
87+ rows = [CovidcastTestRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (num_rows )]
9888 first = rows [0 ]
9989 last = rows [- 1 ]
10090 ref = rows [num_rows // 2 ]
@@ -130,7 +120,7 @@ def test_trendseries(self):
130120 """Request a signal from the /trendseries endpoint."""
131121
132122 num_rows = 3
133- rows = [CovidcastRow .make_default_row (time_value = 2020_04_01 + i , value = num_rows - i ) for i in range (num_rows )]
123+ rows = [CovidcastTestRow .make_default_row (time_value = 2020_04_01 + i , value = num_rows - i ) for i in range (num_rows )]
134124 first = rows [0 ]
135125 last = rows [- 1 ]
136126 self ._insert_rows (rows )
@@ -196,10 +186,10 @@ def test_correlation(self):
196186 """Request a signal from the /correlation endpoint."""
197187
198188 num_rows = 30
199- reference_rows = [CovidcastRow .make_default_row (signal = "ref" , time_value = 20200401 + i , value = i ) for i in range (num_rows )]
189+ reference_rows = [CovidcastTestRow .make_default_row (signal = "ref" , time_value = 20200401 + i , value = i ) for i in range (num_rows )]
200190 first = reference_rows [0 ]
201191 self ._insert_rows (reference_rows )
202- other_rows = [CovidcastRow .make_default_row (signal = "other" , time_value = 20200401 + i , value = i ) for i in range (num_rows )]
192+ other_rows = [CovidcastTestRow .make_default_row (signal = "other" , time_value = 20200401 + i , value = i ) for i in range (num_rows )]
203193 other = other_rows [0 ]
204194 self ._insert_rows (other_rows )
205195 max_lag = 3
@@ -222,23 +212,29 @@ def test_correlation(self):
222212 def test_csv (self ):
223213 """Request a signal from the /csv endpoint."""
224214
225- rows = [CovidcastRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
215+ rows = [CovidcastTestRow .make_default_row (time_value = 2020_04_01 + i , value = i ) for i in range (10 )]
226216 first = rows [0 ]
227217 self ._insert_rows (rows )
228218
229219 response = requests .get (
230220 f"{ BASE_URL } /csv" ,
231221 params = dict (signal = first .signal_pair (), start_day = "2020-04-01" , end_day = "2020-12-12" , geo_type = first .geo_type ),
232222 )
223+ response .raise_for_status ()
224+ out = response .text
225+ df = pd .read_csv (StringIO (out ), index_col = 0 )
226+ self .assertEqual (df .shape , (len (rows ), 10 ))
227+ self .assertEqual (list (df .columns ), ["geo_value" , "signal" , "time_value" , "issue" , "lag" , "value" , "stderr" , "sample_size" , "geo_type" , "data_source" ])
228+
233229
234230 def test_backfill (self ):
235231 """Request a signal from the /backfill endpoint."""
236232
237233 TEST_DATE_VALUE = 2020_04_01
238234 num_rows = 10
239- issue_0 = [CovidcastRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i , sample_size = 1 , lag = 0 , issue = TEST_DATE_VALUE + i ) for i in range (num_rows )]
240- issue_1 = [CovidcastRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i + 1 , sample_size = 2 , lag = 1 , issue = TEST_DATE_VALUE + i + 1 ) for i in range (num_rows )]
241- last_issue = [CovidcastRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i + 2 , sample_size = 3 , lag = 2 , issue = TEST_DATE_VALUE + i + 2 ) for i in range (num_rows )] # <-- the latest issues
235+ issue_0 = [CovidcastTestRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i , sample_size = 1 , lag = 0 , issue = TEST_DATE_VALUE + i ) for i in range (num_rows )]
236+ issue_1 = [CovidcastTestRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i + 1 , sample_size = 2 , lag = 1 , issue = TEST_DATE_VALUE + i + 1 ) for i in range (num_rows )]
237+ last_issue = [CovidcastTestRow .make_default_row (time_value = TEST_DATE_VALUE + i , value = i + 2 , sample_size = 3 , lag = 2 , issue = TEST_DATE_VALUE + i + 2 ) for i in range (num_rows )] # <-- the latest issues
242238 self ._insert_rows ([* issue_0 , * issue_1 , * last_issue ])
243239 first = issue_0 [0 ]
244240
@@ -264,7 +260,7 @@ def test_meta(self):
264260 """Request a signal from the /meta endpoint."""
265261
266262 num_rows = 10
267- rows = [CovidcastRow .make_default_row (time_value = 2020_04_01 + i , value = i , source = "fb-survey" , signal = "smoothed_cli" ) for i in range (num_rows )]
263+ rows = [CovidcastTestRow .make_default_row (time_value = 2020_04_01 + i , value = i , source = "fb-survey" , signal = "smoothed_cli" ) for i in range (num_rows )]
268264 self ._insert_rows (rows )
269265 first = rows [0 ]
270266 last = rows [- 1 ]
@@ -305,7 +301,7 @@ def test_coverage(self):
305301
306302 num_geos_per_date = [10 , 20 , 30 , 40 , 44 ]
307303 dates = [2020_04_01 + i for i in range (len (num_geos_per_date ))]
308- rows = [CovidcastRow .make_default_row (time_value = dates [i ], value = i , geo_value = str (geo_value )) for i , num_geo in enumerate (num_geos_per_date ) for geo_value in range (num_geo )]
304+ rows = [CovidcastTestRow .make_default_row (time_value = dates [i ], value = i , geo_value = str (geo_value )) for i , num_geo in enumerate (num_geos_per_date ) for geo_value in range (num_geo )]
309305 self ._insert_rows (rows )
310306 first = rows [0 ]
311307
0 commit comments