1
1
"""Integration tests for the custom `covidcast/*` endpoints."""
2
2
3
3
# 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
8
4
from io import StringIO
9
-
10
- # from typing import Optional
11
- from dataclasses import dataclass
5
+ from typing import Sequence
12
6
13
7
# third party
14
- import mysql .connector
15
- from more_itertools import interleave_longest , windowed
8
+ from more_itertools import windowed
16
9
import requests
17
10
import pandas as pd
18
- import numpy as np
19
- from delphi_utils import Nans
20
11
21
12
from 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
24
14
25
15
# use the local instance of the Epidata API
26
16
BASE_URL = "http://delphi_web_epidata/epidata/covidcast"
@@ -64,7 +54,7 @@ def _smooth_rows(self, rows: Sequence[float]):
64
54
65
55
def test_basic (self ):
66
56
"""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 )]
68
58
first = rows [0 ]
69
59
self ._insert_rows (rows )
70
60
@@ -78,7 +68,7 @@ def test_basic(self):
78
68
79
69
def test_compatibility (self ):
80
70
"""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 )]
82
72
first = rows [0 ]
83
73
self ._insert_rows (rows )
84
74
@@ -94,7 +84,7 @@ def test_trend(self):
94
84
"""Request a signal from the /trend endpoint."""
95
85
96
86
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 )]
98
88
first = rows [0 ]
99
89
last = rows [- 1 ]
100
90
ref = rows [num_rows // 2 ]
@@ -130,7 +120,7 @@ def test_trendseries(self):
130
120
"""Request a signal from the /trendseries endpoint."""
131
121
132
122
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 )]
134
124
first = rows [0 ]
135
125
last = rows [- 1 ]
136
126
self ._insert_rows (rows )
@@ -196,10 +186,10 @@ def test_correlation(self):
196
186
"""Request a signal from the /correlation endpoint."""
197
187
198
188
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 )]
200
190
first = reference_rows [0 ]
201
191
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 )]
203
193
other = other_rows [0 ]
204
194
self ._insert_rows (other_rows )
205
195
max_lag = 3
@@ -222,23 +212,29 @@ def test_correlation(self):
222
212
def test_csv (self ):
223
213
"""Request a signal from the /csv endpoint."""
224
214
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 )]
226
216
first = rows [0 ]
227
217
self ._insert_rows (rows )
228
218
229
219
response = requests .get (
230
220
f"{ BASE_URL } /csv" ,
231
221
params = dict (signal = first .signal_pair (), start_day = "2020-04-01" , end_day = "2020-12-12" , geo_type = first .geo_type ),
232
222
)
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
+
233
229
234
230
def test_backfill (self ):
235
231
"""Request a signal from the /backfill endpoint."""
236
232
237
233
TEST_DATE_VALUE = 2020_04_01
238
234
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
242
238
self ._insert_rows ([* issue_0 , * issue_1 , * last_issue ])
243
239
first = issue_0 [0 ]
244
240
@@ -264,7 +260,7 @@ def test_meta(self):
264
260
"""Request a signal from the /meta endpoint."""
265
261
266
262
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 )]
268
264
self ._insert_rows (rows )
269
265
first = rows [0 ]
270
266
last = rows [- 1 ]
@@ -305,7 +301,7 @@ def test_coverage(self):
305
301
306
302
num_geos_per_date = [10 , 20 , 30 , 40 , 44 ]
307
303
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 )]
309
305
self ._insert_rows (rows )
310
306
first = rows [0 ]
311
307
0 commit comments