2
2
3
3
# standard library
4
4
import unittest
5
- from unittest .mock import MagicMock
5
+ from unittest .mock import patch
6
6
7
7
# first party
8
- from delphi .epidata .acquisition .covid_hosp .common .database import Database
9
- from delphi .epidata .acquisition .covid_hosp .common .test_utils import UnitTestUtils
8
+ from delphi .epidata .acquisition .covid_hosp .facility .database import Database
9
+ from delphi .epidata .acquisition .covid_hosp .common .network import Network
10
+ from delphi .epidata .acquisition .covid_hosp .common .test_utils import CovidHospTestCase , UnitTestUtils
10
11
from delphi .epidata .client .delphi_epidata import Epidata
11
- from delphi .epidata .acquisition .covid_hosp .facility .update import Update
12
- import delphi .operations .secrets as secrets
12
+ from delphi .epidata .common .covid_hosp .covid_hosp_schema_io import CovidHospSomething
13
13
14
14
# third party
15
15
from freezegun import freeze_time
19
19
20
20
NEWLINE = "\n "
21
21
22
- class AcquisitionTests (unittest . TestCase ):
22
+ class AcquisitionTests (CovidHospTestCase ):
23
23
24
- def setUp (self ):
25
- """Perform per-test setup."""
26
-
27
- # configure test data
28
- self .test_utils = UnitTestUtils (__file__ )
29
-
30
- # use the local instance of the Epidata API
31
- Epidata .BASE_URL = 'http://delphi_web_epidata/epidata/api.php'
32
-
33
- # use the local instance of the epidata database
34
- secrets .db .host = 'delphi_database_epidata'
35
- secrets .db .epi = ('user' , 'pass' )
36
-
37
- # clear relevant tables
38
- with Database .connect () as db :
39
- with db .new_cursor () as cur :
40
- cur .execute ('truncate table covid_hosp_facility' )
41
- cur .execute ('truncate table covid_hosp_facility_key' )
42
- cur .execute ('truncate table covid_hosp_meta' )
24
+ db_class = Database
25
+ test_util_context = __file__
43
26
44
27
@freeze_time ("2021-03-16" )
45
28
def test_acquire_dataset (self ):
46
29
"""Acquire a new dataset."""
47
30
48
- # only mock out network calls to external hosts
49
- mock_network = MagicMock ()
50
- mock_network .fetch_metadata .return_value = \
51
- self .test_utils .load_sample_metadata ()
52
- mock_network .fetch_dataset .return_value = \
53
- self .test_utils .load_sample_dataset ()
54
-
55
31
# make sure the data does not yet exist
56
32
with self .subTest (name = 'no data yet' ):
57
33
response = Epidata .covid_hosp_facility (
58
34
'450822' , Epidata .range (20200101 , 20210101 ))
59
35
self .assertEqual (response ['result' ], - 2 , response )
60
36
61
37
# acquire sample data into local database
62
- with self .subTest (name = 'first acquisition' ):
63
- acquired = Update .run (network = mock_network )
38
+ with self .subTest (name = 'first acquisition' ), \
39
+ patch .object (Network , 'fetch_metadata' , return_value = self .test_utils .load_sample_metadata ()), \
40
+ patch .object (Network , 'fetch_dataset' , return_value = self .test_utils .load_sample_dataset ()):
41
+ acquired = Database ().update_dataset ()
64
42
self .assertTrue (acquired )
65
43
66
44
# make sure the data now exists
@@ -89,12 +67,14 @@ def test_acquire_dataset(self):
89
67
else :
90
68
self .assertEqual (row [k ], v , f"row[{ k } ] is { row [k ]} not { v } " )
91
69
92
- # expect 113 fields per row (114 database columns, except `id`)
93
- self .assertEqual (len (row ), 113 )
70
+ # Expect len(row) to equal the amount of dynamic columns + one extra issue column
71
+ self .assertEqual (len (row ), len ( list ( CovidHospSomething (). columns ( 'covid_hosp_facility' ))) + 1 )
94
72
95
73
# re-acquisition of the same dataset should be a no-op
96
- with self .subTest (name = 'second acquisition' ):
97
- acquired = Update .run (network = mock_network )
74
+ with self .subTest (name = 'second acquisition' ), \
75
+ patch .object (Network , 'fetch_metadata' , return_value = self .test_utils .load_sample_metadata ()), \
76
+ patch .object (Network , 'fetch_dataset' , return_value = self .test_utils .load_sample_dataset ()):
77
+ acquired = Database ().update_dataset ()
98
78
self .assertFalse (acquired )
99
79
100
80
# make sure the data still exists
@@ -108,16 +88,11 @@ def test_acquire_dataset(self):
108
88
def test_facility_lookup (self ):
109
89
"""Lookup facilities using various filters."""
110
90
111
- # only mock out network calls to external hosts
112
- mock_network = MagicMock ()
113
- mock_network .fetch_metadata .return_value = \
114
- self .test_utils .load_sample_metadata ()
115
- mock_network .fetch_dataset .return_value = \
116
- self .test_utils .load_sample_dataset ()
117
-
118
91
# acquire sample data into local database
119
- with self .subTest (name = 'first acquisition' ):
120
- acquired = Update .run (network = mock_network )
92
+ with self .subTest (name = 'first acquisition' ), \
93
+ patch .object (Network , 'fetch_metadata' , return_value = self .test_utils .load_sample_metadata ()), \
94
+ patch .object (Network , 'fetch_dataset' , return_value = self .test_utils .load_sample_dataset ()):
95
+ acquired = Database ().update_dataset ()
121
96
self .assertTrue (acquired )
122
97
123
98
# texas ground truth, sorted by `hospital_pk`
@@ -181,16 +156,11 @@ def test_facility_lookup(self):
181
156
response = Epidata .covid_hosp_facility_lookup (state = 'not a state' )
182
157
self .assertEqual (response ['result' ], - 2 )
183
158
184
- # update facility info
185
- mock_network = MagicMock ()
186
- mock_network .fetch_metadata .return_value = \
187
- self .test_utils .load_sample_metadata ('metadata_update_facility.csv' )
188
- mock_network .fetch_dataset .return_value = \
189
- self .test_utils .load_sample_dataset ('dataset_update_facility.csv' )
190
-
191
- # acquire sample data into local database
192
- with self .subTest (name = 'second acquisition' ):
193
- acquired = Update .run (network = mock_network )
159
+ # acquire sample data into local database with updated facility info
160
+ with self .subTest (name = 'second acquisition' ), \
161
+ patch .object (Network , 'fetch_metadata' , return_value = self .test_utils .load_sample_metadata ('metadata_update_facility.csv' )), \
162
+ patch .object (Network , 'fetch_dataset' , return_value = self .test_utils .load_sample_dataset ('dataset_update_facility.csv' )):
163
+ acquired = Database ().update_dataset ()
194
164
self .assertTrue (acquired )
195
165
196
166
texas_hospitals [1 ]['zip' ] = '88888'
0 commit comments