diff --git a/docs/epidata_development.md b/docs/epidata_development.md index 086a83e22..87602f8f0 100644 --- a/docs/epidata_development.md +++ b/docs/epidata_development.md @@ -143,6 +143,15 @@ The final line of output should be similar to the following: All 48 tests passed! 68% (490/711) coverage. ``` +You can also run tests using pytest like this: +``` +docker run --rm delphi_python pytest repos/delphi/delphi-epidata/tests/ +``` +and with pdb enabled like this: +``` +docker run -it --rm delphi_python pytest repos/delphi/delphi-epidata/tests/ --pdb +``` + ## manual tests You can test your changes manually by: @@ -284,6 +293,15 @@ More concretely, you can run Epidata API integration tests like this: ✔ All 3 tests passed! [coverage unavailable] ``` + You can also run tests using pytest like this: + ``` + docker run --network delphi-net --rm delphi_python pytest repos/delphi/delphi-epidata/integrations/ + ``` + and with pdb enabled like this: + ``` + docker run --network delphi-net -it --rm delphi_python pytest repos/delphi/delphi-epidata/integrations/ --pdb + ``` + 5. Bring down the servers, for example with the `docker stop` command. # rapid iteration diff --git a/docs/new_endpoint_tutorial.md b/docs/new_endpoint_tutorial.md index 6c6cbbba7..b393afcf6 100644 --- a/docs/new_endpoint_tutorial.md +++ b/docs/new_endpoint_tutorial.md @@ -267,6 +267,15 @@ If all succeeds, output should look like this: ✔ All 48 tests passed! 69% (486/704) coverage. ``` +You can also run tests using pytest like this: +``` +docker run --rm delphi_python pytest repos/delphi/delphi-epidata/tests/ +``` +and with pdb enabled like this: +``` +docker run -it --rm delphi_python pytest repos/delphi/delphi-epidata/tests/ --pdb +``` + ## integration Integration tests require more effort and take longer to set up and run. @@ -317,6 +326,14 @@ delphi.delphi-epidata.integrations.server.test_fluview_meta.FluviewMetaTests.tes ✔ All 16 tests passed! 48% (180/372) coverage. ``` +You can also run tests using pytest like this: +``` +docker run --network delphi-net --rm delphi_python pytest repos/delphi/delphi-epidata/integrations/ +``` +and with pdb enabled like this: +``` +docker run --network delphi-net -it --rm delphi_python pytest repos/delphi/delphi-epidata/integrations/ --pdb +``` # code review and submission diff --git a/integrations/__init__.py b/integrations/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/acquisition/covid_hosp/facility/__init__.py b/integrations/acquisition/covid_hosp/facility/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/acquisition/covid_hosp/facility/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/acquisition/covid_hosp/facility/test_scenarios.py b/integrations/acquisition/covid_hosp/facility/test_scenarios.py index ebc5c5a37..a7535f83b 100644 --- a/integrations/acquisition/covid_hosp/facility/test_scenarios.py +++ b/integrations/acquisition/covid_hosp/facility/test_scenarios.py @@ -8,6 +8,7 @@ from delphi.epidata.acquisition.covid_hosp.common.database import Database from delphi.epidata.acquisition.covid_hosp.common.test_utils import TestUtils from delphi.epidata.client.delphi_epidata import Epidata +from delphi.epidata.acquisition.covid_hosp.facility.update import Update import delphi.operations.secrets as secrets # py3tester coverage target (equivalent to `import *`) diff --git a/integrations/acquisition/covid_hosp/state_timeseries/__init__.py b/integrations/acquisition/covid_hosp/state_timeseries/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/acquisition/covid_hosp/state_timeseries/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/acquisition/covid_hosp/state_timeseries/test_scenarios.py b/integrations/acquisition/covid_hosp/state_timeseries/test_scenarios.py index 4487360fd..42de2a920 100644 --- a/integrations/acquisition/covid_hosp/state_timeseries/test_scenarios.py +++ b/integrations/acquisition/covid_hosp/state_timeseries/test_scenarios.py @@ -8,6 +8,7 @@ from delphi.epidata.acquisition.covid_hosp.common.database import Database from delphi.epidata.acquisition.covid_hosp.common.test_utils import TestUtils from delphi.epidata.client.delphi_epidata import Epidata +from delphi.epidata.acquisition.covid_hosp.state_timeseries.update import Update import delphi.operations.secrets as secrets # py3tester coverage target (equivalent to `import *`) diff --git a/integrations/acquisition/covidcast/__init__.py b/integrations/acquisition/covidcast/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/acquisition/covidcast/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/acquisition/covidcast/test_covidcast_meta_caching.py b/integrations/acquisition/covidcast/test_covidcast_meta_caching.py index 6058f6ca1..69ff2bd43 100644 --- a/integrations/acquisition/covidcast/test_covidcast_meta_caching.py +++ b/integrations/acquisition/covidcast/test_covidcast_meta_caching.py @@ -12,6 +12,7 @@ from delphi.epidata.client.delphi_epidata import Epidata import delphi.operations.secrets as secrets import delphi.epidata.acquisition.covidcast.database as live +from delphi.epidata.acquisition.covidcast.covidcast_meta_cache_updater import main # py3tester coverage target (equivalent to `import *`) __test_target__ = ( diff --git a/integrations/acquisition/covidcast/test_csv_uploading.py b/integrations/acquisition/covidcast/test_csv_uploading.py index 20802739c..e1b42dbb1 100644 --- a/integrations/acquisition/covidcast/test_csv_uploading.py +++ b/integrations/acquisition/covidcast/test_csv_uploading.py @@ -11,6 +11,7 @@ # first party from delphi.epidata.client.delphi_epidata import Epidata +from delphi.epidata.acquisition.covidcast.csv_to_database import main import delphi.operations.secrets as secrets # py3tester coverage target (equivalent to `import *`) diff --git a/integrations/acquisition/covidcast/test_fill_is_latest_issue.py b/integrations/acquisition/covidcast/test_fill_is_latest_issue.py index 0820888bb..2ed53692f 100644 --- a/integrations/acquisition/covidcast/test_fill_is_latest_issue.py +++ b/integrations/acquisition/covidcast/test_fill_is_latest_issue.py @@ -8,6 +8,7 @@ # first party from delphi.epidata.client.delphi_epidata import Epidata +from delphi.epidata.acquisition.covidcast.fill_is_latest_issue import main import delphi.operations.secrets as secrets # py3tester coverage target (equivalent to `import *`) diff --git a/integrations/acquisition/covidcast_nowcast/__init__.py b/integrations/acquisition/covidcast_nowcast/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/acquisition/covidcast_nowcast/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/client/__init__.py b/integrations/client/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/client/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/integrations/server/__init__.py b/integrations/server/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/integrations/server/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/covid_hosp/common/__init__.py b/tests/acquisition/covid_hosp/common/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/covid_hosp/common/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/covid_hosp/common/test_database.py b/tests/acquisition/covid_hosp/common/test_database.py index 4db0ea400..b9b2e7694 100644 --- a/tests/acquisition/covid_hosp/common/test_database.py +++ b/tests/acquisition/covid_hosp/common/test_database.py @@ -9,6 +9,8 @@ # third party import pandas as pd +from delphi.epidata.acquisition.covid_hosp.common.database import Database + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.common.database' diff --git a/tests/acquisition/covid_hosp/common/test_network.py b/tests/acquisition/covid_hosp/common/test_network.py index b8f574848..7cfb3de88 100644 --- a/tests/acquisition/covid_hosp/common/test_network.py +++ b/tests/acquisition/covid_hosp/common/test_network.py @@ -5,6 +5,8 @@ from unittest.mock import MagicMock from unittest.mock import sentinel +from delphi.epidata.acquisition.covid_hosp.common.network import Network + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.common.network' diff --git a/tests/acquisition/covid_hosp/common/test_utils.py b/tests/acquisition/covid_hosp/common/test_utils.py index 61736e767..9d2b35be3 100644 --- a/tests/acquisition/covid_hosp/common/test_utils.py +++ b/tests/acquisition/covid_hosp/common/test_utils.py @@ -7,6 +7,7 @@ # first party from delphi.epidata.acquisition.covid_hosp.common.test_utils import TestUtils +from delphi.epidata.acquisition.covid_hosp.common.utils import Utils, CovidHospException # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.common.utils' diff --git a/tests/acquisition/covid_hosp/facility/__init__.py b/tests/acquisition/covid_hosp/facility/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/covid_hosp/facility/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/covid_hosp/facility/test_database.py b/tests/acquisition/covid_hosp/facility/test_database.py index 8372aee93..71a2ac646 100644 --- a/tests/acquisition/covid_hosp/facility/test_database.py +++ b/tests/acquisition/covid_hosp/facility/test_database.py @@ -7,6 +7,7 @@ # first party from delphi.epidata.acquisition.covid_hosp.common.test_utils import TestUtils +from delphi.epidata.acquisition.covid_hosp.facility.database import Database # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.facility.database' diff --git a/tests/acquisition/covid_hosp/facility/test_network.py b/tests/acquisition/covid_hosp/facility/test_network.py index abc22f0dd..a1cd1c3f9 100644 --- a/tests/acquisition/covid_hosp/facility/test_network.py +++ b/tests/acquisition/covid_hosp/facility/test_network.py @@ -5,6 +5,8 @@ from unittest.mock import patch from unittest.mock import sentinel +from delphi.epidata.acquisition.covid_hosp.facility.network import Network + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.facility.network' diff --git a/tests/acquisition/covid_hosp/facility/test_update.py b/tests/acquisition/covid_hosp/facility/test_update.py index b30dd03ec..01fb049b8 100644 --- a/tests/acquisition/covid_hosp/facility/test_update.py +++ b/tests/acquisition/covid_hosp/facility/test_update.py @@ -7,6 +7,7 @@ # first party from delphi.epidata.acquisition.covid_hosp.common.utils import Utils +from delphi.epidata.acquisition.covid_hosp.facility.update import Update # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covid_hosp.facility.update' diff --git a/tests/acquisition/covid_hosp/state_timeseries/__init__.py b/tests/acquisition/covid_hosp/state_timeseries/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/covid_hosp/state_timeseries/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/covid_hosp/state_timeseries/test_database.py b/tests/acquisition/covid_hosp/state_timeseries/test_database.py index 83540f703..e9ceffd8b 100644 --- a/tests/acquisition/covid_hosp/state_timeseries/test_database.py +++ b/tests/acquisition/covid_hosp/state_timeseries/test_database.py @@ -7,6 +7,7 @@ # first party from delphi.epidata.acquisition.covid_hosp.common.test_utils import TestUtils +from delphi.epidata.acquisition.covid_hosp.state_timeseries.database import Database # py3tester coverage target __test_target__ = \ diff --git a/tests/acquisition/covid_hosp/state_timeseries/test_network.py b/tests/acquisition/covid_hosp/state_timeseries/test_network.py index 1840e2a54..6b2183f6e 100644 --- a/tests/acquisition/covid_hosp/state_timeseries/test_network.py +++ b/tests/acquisition/covid_hosp/state_timeseries/test_network.py @@ -5,6 +5,9 @@ from unittest.mock import patch from unittest.mock import sentinel +from delphi.epidata.acquisition.covid_hosp.state_timeseries.network import Network + + # py3tester coverage target __test_target__ = \ 'delphi.epidata.acquisition.covid_hosp.state_timeseries.network' diff --git a/tests/acquisition/covid_hosp/state_timeseries/test_update.py b/tests/acquisition/covid_hosp/state_timeseries/test_update.py index b8fc46b4f..57f6c2b54 100644 --- a/tests/acquisition/covid_hosp/state_timeseries/test_update.py +++ b/tests/acquisition/covid_hosp/state_timeseries/test_update.py @@ -7,6 +7,7 @@ # first party from delphi.epidata.acquisition.covid_hosp.common.utils import Utils +from delphi.epidata.acquisition.covid_hosp.state_timeseries.update import Update # py3tester coverage target __test_target__ = \ diff --git a/tests/acquisition/covidcast/__init__.py b/tests/acquisition/covidcast/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/covidcast/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/covidcast/test_covidcast_meta_cache_updater.py b/tests/acquisition/covidcast/test_covidcast_meta_cache_updater.py index 71e043e6a..8f43efea1 100644 --- a/tests/acquisition/covidcast/test_covidcast_meta_cache_updater.py +++ b/tests/acquisition/covidcast/test_covidcast_meta_cache_updater.py @@ -8,6 +8,8 @@ # third party import pandas +from delphi.epidata.acquisition.covidcast.covidcast_meta_cache_updater import get_argument_parser, \ + main # py3tester coverage target __test_target__ = ( 'delphi.epidata.acquisition.covidcast.' diff --git a/tests/acquisition/covidcast/test_csv_importer.py b/tests/acquisition/covidcast/test_csv_importer.py index 73152acc3..de62b93ec 100644 --- a/tests/acquisition/covidcast/test_csv_importer.py +++ b/tests/acquisition/covidcast/test_csv_importer.py @@ -3,9 +3,14 @@ # standard library import unittest from unittest.mock import MagicMock +from datetime import date # third party import pandas +import epiweeks as epi + +from delphi.epidata.acquisition.covidcast.csv_importer import CsvImporter +from delphi.utils.epiweek import delta_epiweeks # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covidcast.csv_importer' diff --git a/tests/acquisition/covidcast/test_csv_to_database.py b/tests/acquisition/covidcast/test_csv_to_database.py index a289742ef..b5bec7683 100644 --- a/tests/acquisition/covidcast/test_csv_to_database.py +++ b/tests/acquisition/covidcast/test_csv_to_database.py @@ -5,6 +5,9 @@ import unittest from unittest.mock import MagicMock +from delphi.epidata.acquisition.covidcast.csv_to_database import get_argument_parser, main, \ + collect_files, upload_archive, make_handlers + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covidcast.csv_to_database' diff --git a/tests/acquisition/covidcast/test_database.py b/tests/acquisition/covidcast/test_database.py index e5bb7f190..61c01db96 100644 --- a/tests/acquisition/covidcast/test_database.py +++ b/tests/acquisition/covidcast/test_database.py @@ -4,6 +4,8 @@ import unittest from unittest.mock import MagicMock +from delphi.epidata.acquisition.covidcast.database import Database + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covidcast.database' diff --git a/tests/acquisition/covidcast/test_file_archiver.py b/tests/acquisition/covidcast/test_file_archiver.py index 4de6cad47..57bc5c589 100644 --- a/tests/acquisition/covidcast/test_file_archiver.py +++ b/tests/acquisition/covidcast/test_file_archiver.py @@ -5,6 +5,8 @@ import unittest from unittest.mock import MagicMock +from delphi.epidata.acquisition.covidcast.file_archiver import FileArchiver + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.covidcast.file_archiver' diff --git a/tests/acquisition/covidcast_nowcast/__init__.py b/tests/acquisition/covidcast_nowcast/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/covidcast_nowcast/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/flusurv/__init__.py b/tests/acquisition/flusurv/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/flusurv/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/flusurv/test_flusurv.py b/tests/acquisition/flusurv/test_flusurv.py index 6c4971952..f75efaabc 100644 --- a/tests/acquisition/flusurv/test_flusurv.py +++ b/tests/acquisition/flusurv/test_flusurv.py @@ -5,6 +5,8 @@ from unittest.mock import MagicMock from unittest.mock import sentinel +from delphi.epidata.acquisition.flusurv.flusurv import fetch_json + # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.flusurv.flusurv' diff --git a/tests/acquisition/fluview/__init__.py b/tests/acquisition/fluview/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/acquisition/fluview/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/acquisition/fluview/test_impute_missing_values.py b/tests/acquisition/fluview/test_impute_missing_values.py index 279a33ba1..37aab2555 100644 --- a/tests/acquisition/fluview/test_impute_missing_values.py +++ b/tests/acquisition/fluview/test_impute_missing_values.py @@ -7,6 +7,8 @@ # first party from delphi.utils.geo.locations import Locations +from delphi.epidata.acquisition.fluview.impute_missing_values import get_argument_parser, \ + get_lag_and_ili, impute_missing_values, StatespaceException # py3tester coverage target __test_target__ = 'delphi.epidata.acquisition.fluview.impute_missing_values' @@ -29,7 +31,7 @@ def test_get_lag_and_ili(self): for args, expected in samples: with self.subTest(args=args): actual = get_lag_and_ili(*args) - self.assertEquals(actual, expected) + self.assertEqual(actual, expected) def test_impute_missing_values(self): """Atoms are imputed and stored.""" @@ -48,11 +50,11 @@ def test_impute_missing_values(self): impute_missing_values(db, test_mode=True) - self.assertEquals(db.connect.call_count, 1) + self.assertEqual(db.connect.call_count, 1) self.assertTrue(db.count_rows.call_count >= 1) self.assertTrue(db.find_missing_rows.call_count >= 1) - self.assertEquals(db.add_imputed_values.call_count, 1) - self.assertEquals(db.close.call_count, 1) + self.assertEqual(db.add_imputed_values.call_count, 1) + self.assertEqual(db.close.call_count, 1) self.assertFalse(db.close.call_args[0][0]) imputed = db.add_imputed_values.call_args[0][-1] @@ -60,11 +62,11 @@ def test_impute_missing_values(self): for loc, (lag, n_ili, n_pat, n_prov, ili) in imputed.items(): with self.subTest(loc=loc): num = len(Locations.region_map[loc]) - self.assertEquals(lag, 0) - self.assertEquals(n_ili, num) - self.assertEquals(n_pat, num) - self.assertEquals(n_prov, num) - self.assertEquals(ili, 100) + self.assertEqual(lag, 0) + self.assertEqual(n_ili, num) + self.assertEqual(n_pat, num) + self.assertEqual(n_prov, num) + self.assertEqual(ili, 100) def test_impute_missing_values_vipr(self): """PR and VI are imputed only when appropriate.""" diff --git a/tests/client/__init__.py b/tests/client/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/client/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd()) diff --git a/tests/server/__init__.py b/tests/server/__init__.py new file mode 100644 index 000000000..e197f3ec4 --- /dev/null +++ b/tests/server/__init__.py @@ -0,0 +1,4 @@ +import sys +import os + +sys.path.append(os.getcwd())