diff --git a/tests/integration/full/full_test_deposition.py b/tests/integration/full/full_test_deposition.py index 33f942acb8c0a2fafe36ee4890f786093807c5e0..892364a3d5619d90c051a0b5f5a53b98dcd10903 100644 --- a/tests/integration/full/full_test_deposition.py +++ b/tests/integration/full/full_test_deposition.py @@ -10,16 +10,11 @@ from integration.test_suites.depo_test_suite import BaseDepoTestSuite class FullTestDeposition(BaseDepoTestSuite.DepoTestSuite): - def set_expected_values(self, - ea_csv_count: int = 9, - eth_csv_count: int = 9, - ea_png_count: int = 3, - eth_png_count: int = 3): - - self.EA_CSV_COUNT = ea_csv_count - self.ETH_CSV_COUNT = eth_csv_count - self.EA_PNG_COUNT = ea_png_count - self.ETH_PNG_COUNT = eth_png_count + def set_expected_values(self): + self.EA_CSV_COUNT = 9 + self.ETH_CSV_COUNT = 9 + self.EA_PNG_COUNT = 3 + self.ETH_PNG_COUNT = 3 def setUp(self) -> None: @@ -76,8 +71,8 @@ if __name__ == '__main__': IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH = _config_file nowstring: str = IntegrationTestUtils.get_now_string() - prefix: str = "temp_depo_" + nowstring - # prefix: str = "temp_depo" + # prefix: str = "temp_depo_" + nowstring + prefix: str = "temp_depo" BaseDepoTestSuite.DepoTestSuite.TEST_OUT_PATH = _outdir + prefix + os.sep IntegrationTestUtils.EMAIL_CRED_PATH = _email_cred_path diff --git a/tests/integration/full/full_test_env_suit.py b/tests/integration/full/full_test_env_suit.py index 9bee81516c75d2e5983d7f0d23313e70bcc7789f..9d728d7136150c445d009106379a94617b758e14 100644 --- a/tests/integration/full/full_test_env_suit.py +++ b/tests/integration/full/full_test_env_suit.py @@ -6,25 +6,27 @@ import sys import unittest from integration.partial.integration_test_utils import IntegrationTestUtils +from integration.test_suites.env_suit_test_suite import BaseEnvSuitTestSuite -class FullTestEnvSuit(unittest.TestCase): +class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): - TEST_OUT_PATH: str = "NOT_SET" - TEST_START_DATE: str = 'NOT_SET' - TEST_JOB_DIR: str = "NOT_SET" - - @classmethod - def setUpClass(cls) -> None: - FullTestEnvSuit.write_temp_run_config_file() - FullTestEnvSuit.run_env_pipeline() - status_file_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR) - status_file = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, "STATUS_SUCCESS") - #os.makedirs(status_file_path, exist_ok = True) - #os.mknod(status_file) + def set_expected_values(self): pass + def setUp(self) -> None: + + self.set_expected_values() + + if BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH is None or not os.path.isdir( + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH): + FullTestEnvSuit.write_temp_run_config_file() + FullTestEnvSuit.run_env_pipeline() + else: + print(f"output in {BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH} already written, skipping rerun") + + @staticmethod def write_temp_run_config_file(): default_config = IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH @@ -36,7 +38,8 @@ class FullTestEnvSuit(unittest.TestCase): run_dict['Environment']['INPUT_PATH'] = FullTestEnvSuit.TEST_OUT_PATH run_dict['Environment']['OUTPUT_PATH'] = FullTestEnvSuit.TEST_OUT_PATH - IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = FullTestEnvSuit.TEST_OUT_PATH + "temp_config.json" + os.makedirs(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH) + IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + "temp_config.json" IntegrationTestUtils.write_json_file(run_dict, IntegrationTestUtils.TEMP_CONFIG_FILE_NAME) @@ -48,54 +51,54 @@ class FullTestEnvSuit(unittest.TestCase): IntegrationTestUtils.EMAIL_CRED_PATH) - def test_standard_run_input_status_success(self): - status_file_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, "STATUS_SUCCESS") - print(f"looking for {status_file_path}") - success_file_exists: bool = os.path.isfile(status_file_path) - self.assertTrue(success_file_exists) - - - def test_standard_run_input_all_regions_ran(self): - """ - working on the assumption that if there are images for each region, it must have run through - (at least past the region iteration) - """ - - east_africa_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "images", "Weekly", - "suitability_eastafrica_leaf_rust_total_*_map.png") - ethiopia_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "images", "Weekly", - "suitability_ethiopia_leaf_rust_total_*_map.png") - - ea_file_exists: bool = len(glob.glob(east_africa_image_path)) > 0 - eth_file_exists: bool = len(glob.glob(ethiopia_image_path)) > 0 - self.assertTrue(ea_file_exists) - self.assertTrue(eth_file_exists) - - - def test_standard_run_all_input_csvs_produced(self): - east_africa_csv_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "input_csvs", "*.csv") - ethiopia_csv_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "input_csvs", "*.csv") - - ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_csv_path) - eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_csv_path) - self.assertEqual(18, ea_csv_count) - self.assertEqual(18, eth_csv_count) - - - def test_standard_run_all_images_produced(self): - east_africa_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "images", "Weekly", "*.png") - ethiopia_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "images", "Weekly", "*.png") - - ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_image_path) - eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_image_path) - self.assertEqual(6, ea_csv_count) - self.assertEqual(6, eth_csv_count) + # def test_standard_run_input_status_success(self): + # status_file_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, "STATUS_SUCCESS") + # print(f"looking for {status_file_path}") + # success_file_exists: bool = os.path.isfile(status_file_path) + # self.assertTrue(success_file_exists) + # + # + # def test_standard_run_input_all_regions_ran(self): + # """ + # working on the assumption that if there are images for each region, it must have run through + # (at least past the region iteration) + # """ + # + # east_africa_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "eastafrica", "images", "Weekly", + # "suitability_eastafrica_leaf_rust_total_*_map.png") + # ethiopia_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "ethiopia", "images", "Weekly", + # "suitability_ethiopia_leaf_rust_total_*_map.png") + # + # ea_file_exists: bool = len(glob.glob(east_africa_image_path)) > 0 + # eth_file_exists: bool = len(glob.glob(ethiopia_image_path)) > 0 + # self.assertTrue(ea_file_exists) + # self.assertTrue(eth_file_exists) + # + # + # def test_standard_run_all_input_csvs_produced(self): + # east_africa_csv_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "eastafrica", "input_csvs", "*.csv") + # ethiopia_csv_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "ethiopia", "input_csvs", "*.csv") + # + # ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_csv_path) + # eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_csv_path) + # self.assertEqual(18, ea_csv_count) + # self.assertEqual(18, eth_csv_count) + # + # + # def test_standard_run_all_images_produced(self): + # east_africa_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "eastafrica", "images", "Weekly", "*.png") + # ethiopia_image_path = os.path.join(FullTestEnvSuit.TEST_OUT_PATH, FullTestEnvSuit.TEST_JOB_DIR, + # "plotting", "ethiopia", "images", "Weekly", "*.png") + # + # ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_image_path) + # eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_image_path) + # self.assertEqual(6, ea_csv_count) + # self.assertEqual(6, eth_csv_count) if __name__ == '__main__': @@ -116,14 +119,15 @@ if __name__ == '__main__': IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH = _config_file - FullTestEnvSuit.TEST_OUT_PATH = _outdir + nowstring: str = IntegrationTestUtils.get_now_string() + # prefix: str = "temp_env_" + nowstring + prefix: str = "temp_env" + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH = _outdir + prefix + os.sep IntegrationTestUtils.EMAIL_CRED_PATH = _email_cred_path - # FullTestEnvSuit.TEST_START_DATE = "20230227" - FullTestEnvSuit.TEST_START_DATE = IntegrationTestUtils.generate_run_date(_run_date_type, _custom_run_date) - - FullTestEnvSuit.TEST_JOB_DIR = "ENVIRONMENT_2.0" \ - "_" + FullTestEnvSuit.TEST_START_DATE + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_START_DATE = IntegrationTestUtils.generate_run_date(_run_date_type, + _custom_run_date) + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR = "ENVIRONMENT_2.0_" + FullTestEnvSuit.TEST_START_DATE # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone) sys.argv[1:] = _args.unittest_args diff --git a/tests/integration/partial/integration_test_utils.py b/tests/integration/partial/integration_test_utils.py index 1bde5ac2a7030256764c0bac6319a422877c56d4..6aef1ba3b7f81ffd0d0596364a5af21b664ac5f0 100644 --- a/tests/integration/partial/integration_test_utils.py +++ b/tests/integration/partial/integration_test_utils.py @@ -98,7 +98,7 @@ class IntegrationTestUtils: args_dict['component'] = component args_dict['config_paths'] = [IntegrationTestUtils.TEMP_CONFIG_FILE_NAME] args_dict['log_level'] = 'info' - args_dict['clearup'] = False + args_dict['clearup'] = True for key, value in kwargs.items(): args_dict[key] = value diff --git a/tests/integration/partial/run_tests.sh b/tests/integration/partial/run_test_suite.sh similarity index 100% rename from tests/integration/partial/run_tests.sh rename to tests/integration/partial/run_test_suite.sh diff --git a/tests/integration/partial/test_deposition.py b/tests/integration/partial/test_deposition.py index a11d91f90d01d69f09237aa9b6e5cb1ea3095b36..90f9c06daa9fa0094d9db9861d30a2e359cf68da 100644 --- a/tests/integration/partial/test_deposition.py +++ b/tests/integration/partial/test_deposition.py @@ -9,6 +9,10 @@ from integration.test_suites.depo_test_suite import BaseDepoTestSuite class TestDeposition(BaseDepoTestSuite.DepoTestSuite): def set_expected_values(self): + + BaseDepoTestSuite.DepoTestSuite.TEST_START_DATE = "20221001" + BaseDepoTestSuite.DepoTestSuite.TEST_JOB_DIR = "DEPOSITION_" + self.TEST_START_DATE + self.EA_CSV_COUNT = 9 self.ETH_CSV_COUNT = 27 self.EA_PNG_COUNT = 3 @@ -28,8 +32,8 @@ class TestDeposition(BaseDepoTestSuite.DepoTestSuite): @staticmethod def write_temp_run_config_file(): nowstring: str = IntegrationTestUtils.get_now_string() - prefix: str = "temp_depo_" + nowstring - # prefix: str = "temp_depo" + # prefix: str = "temp_depo_" + nowstring + prefix: str = "temp_depo" default_config = IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH default_config_dict: dict = IntegrationTestUtils.load_json_file(default_config) diff --git a/tests/integration/partial/test_env_suit.py b/tests/integration/partial/test_env_suit.py index c414af6bc7096e64a988489b49c2017e83d1c230..010f240473ce51555f00ab873b72309c6dca008e 100644 --- a/tests/integration/partial/test_env_suit.py +++ b/tests/integration/partial/test_env_suit.py @@ -3,96 +3,61 @@ import os import unittest from integration.partial.integration_test_utils import IntegrationTestUtils +from integration.test_suites.env_suit_test_suite import BaseEnvSuitTestSuite -class TestEnvSuit(unittest.TestCase): +class TestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite): - TEST_OUT_PATH: str = "not_set" - TEST_START_DATE: str = '20221001' - TEST_JOB_DIR: str = "ENVIRONMENT_2.0_" + TEST_START_DATE + def set_expected_values(self): + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_START_DATE = "20221001" + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR = "ENVIRONMENT_2.0_" + self.TEST_START_DATE - @classmethod - def setUpClass(cls) -> None: - TestEnvSuit.write_temp_run_config_file() - TestEnvSuit.run_env_pipeline() + self.EA_CSV_COUNT = 18 + self.ETH_CSV_COUNT = 18 + self.EA_PNG_COUNT = 6 + self.ETH_PNG_COUNT = 6 + + def setUp(self) -> None: + + self.set_expected_values() + + if BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH is None or not os.path.isdir( + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH): + TestEnvSuit.write_temp_run_config_file() + TestEnvSuit.run_env_pipeline() + else: + print(f"output in {BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH} already written, skipping rerun") @staticmethod def write_temp_run_config_file(): nowstring: str = IntegrationTestUtils.get_now_string() - prefix: str = "temp_env_" + nowstring - # prefix: str = "" + # prefix: str = "temp_env_" + nowstring + prefix: str = "temp_env" default_config = IntegrationTestUtils.DEFAULT_CONFIG_FILE_PATH default_config_dict: dict = IntegrationTestUtils.load_json_file(default_config) run_dict: dict = copy.deepcopy(default_config_dict) - TestEnvSuit.TEST_OUT_PATH = run_dict['WorkspacePathout'] + prefix + os.sep - run_dict['WorkspacePathout'] = TestEnvSuit.TEST_OUT_PATH - run_dict['WorkspacePath'] = TestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['WORK_PATH'] = TestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['INPUT_PATH'] = TestEnvSuit.TEST_OUT_PATH - run_dict['Environment']['OUTPUT_PATH'] = TestEnvSuit.TEST_OUT_PATH + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH = IntegrationTestUtils.TEST_WORKSPACE_PATH + prefix + os.sep + run_dict['WorkspacePathout'] = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + run_dict['WorkspacePath'] = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + run_dict['Environment']['WORK_PATH'] = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + run_dict['Environment']['INPUT_PATH'] = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + run_dict['Environment']['OUTPUT_PATH'] = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH run_dict['ServerName'] = '' # nothing, as local machine - full_server_path = os.path.abspath( - "../../test_data/test_deployment/regions/EastAfrica/resources/coordinator/assets/") + full_server_path = os.path.abspath(IntegrationTestUtils.TEST_ASSETS_PATH) run_dict['Environment']['ServerPathTemplate'] = full_server_path + # may be reusing a non-timestamped output file during development, so allow extant TEST_OUT_PATH + os.makedirs(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, exist_ok = True) + IntegrationTestUtils.TEMP_CONFIG_FILE_NAME = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH + "temp_config.json" IntegrationTestUtils.write_json_file(run_dict, IntegrationTestUtils.TEMP_CONFIG_FILE_NAME) @staticmethod def run_env_pipeline(): component = 'Environment' - IntegrationTestUtils.run_unittest_pipeline(component, TestEnvSuit.TEST_START_DATE) - - - def test_standard_run_input_status_success(self): - status_file_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, "STATUS_SUCCESS") - success_file_exists: bool = os.path.isfile(status_file_path) - self.assertTrue(success_file_exists) - - - def test_standard_run_input_all_regions_ran(self): - """ - working on the assumption that if there are images for each region, it must have run through - (at least past the region iteration) - """ - - east_africa_image_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "images", "Weekly", - "suitability_eastafrica_leaf_rust_total_202210010000_202210070000_map.png") - ethiopia_image_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "images", "Weekly", - "suitability_ethiopia_leaf_rust_total_202210010000_202210070000_map.png") - - ea_file_exists: bool = os.path.isfile(east_africa_image_path) - eth_file_exists: bool = os.path.isfile(ethiopia_image_path) - self.assertTrue(ea_file_exists) - self.assertTrue(eth_file_exists) - - - def test_standard_run_all_input_csvs_produced(self): - east_africa_csv_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "input_csvs", "*.csv") - ethiopia_csv_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "input_csvs", "*.csv") - - ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_csv_path) - eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_csv_path) - self.assertEqual(18, ea_csv_count) - self.assertEqual(18, eth_csv_count) - - - def test_standard_run_all_images_produced(self): - east_africa_image_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "eastafrica", "images", "Weekly", "*.png") - ethiopia_image_path = os.path.join(TestEnvSuit.TEST_OUT_PATH, TestEnvSuit.TEST_JOB_DIR, - "plotting", "ethiopia", "images", "Weekly", "*.png") - - ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_image_path) - eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_image_path) - self.assertEqual(6, ea_csv_count) - self.assertEqual(6, eth_csv_count) + IntegrationTestUtils.run_unittest_pipeline(component, BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_START_DATE) if __name__ == '__main__': diff --git a/tests/integration/test_suites/depo_test_suite.py b/tests/integration/test_suites/depo_test_suite.py index ec691bb4a77fe64d14cf62f3cfb6fe96ba2cd422..b81bbe1b1ab5283e9ef9b0a254ad0e06cc5ead90 100644 --- a/tests/integration/test_suites/depo_test_suite.py +++ b/tests/integration/test_suites/depo_test_suite.py @@ -11,22 +11,27 @@ class BaseDepoTestSuite: """ to prevent the full integrations tests that extend the partial integrations tests running the tests twice, the test suite is nested in a base class, to keep it at a separate package-level + https://stackoverflow.com/questions/1323455/python-unit-test-with-base-and-sub-class """ class DepoTestSuite(unittest.TestCase): TEST_OUT_PATH: str = None - TEST_START_DATE: str = '20221001' # default - TEST_JOB_DIR: str = "DEPOSITION_" + TEST_START_DATE - - """ - these fields need to be overridden in the tests that use this test suite, override the - 'set_expected_values' function below - """ - EA_CSV_COUNT: int = None - ETH_CSV_COUNT: int = None - EA_PNG_COUNT: int = None - ETH_PNG_COUNT: int = None + TEST_START_DATE: str = None + TEST_JOB_DIR: str = None + + + def __init__(self, methodName: str = ...) -> None: + super().__init__(methodName) + + """ + these fields need to be overridden in the tests that use this test suite, override the + 'set_expected_values' function below + """ + self.EA_CSV_COUNT: int = 0 + self.ETH_CSV_COUNT: int = 0 + self.EA_PNG_COUNT: int = 0 + self.ETH_PNG_COUNT: int = 0 @abc.abstractmethod diff --git a/tests/integration/test_suites/env_suit_test_suite.py b/tests/integration/test_suites/env_suit_test_suite.py new file mode 100644 index 0000000000000000000000000000000000000000..b6a20d878e28e021a601c00823201cf445d9a985 --- /dev/null +++ b/tests/integration/test_suites/env_suit_test_suite.py @@ -0,0 +1,91 @@ +import abc +import glob +import os +import unittest + +from integration.partial.integration_test_utils import IntegrationTestUtils + + +class BaseEnvSuitTestSuite: + + """ + to prevent the full integrations tests that extend the partial integrations tests running the tests twice, + the test suite is nested in a base class, to keep it at a separate package-level + https://stackoverflow.com/questions/1323455/python-unit-test-with-base-and-sub-class + """ + + class EnvSuitTestSuite(unittest.TestCase): + + TEST_OUT_PATH: str = None + TEST_START_DATE: str = None + TEST_JOB_DIR: str = None + + """ + these fields need to be overridden in the tests that use this test suite, override the + 'set_expected_values' function below + """ + EA_CSV_COUNT: int = None + ETH_CSV_COUNT: int = None + EA_PNG_COUNT: int = None + ETH_PNG_COUNT: int = None + + + @abc.abstractmethod + def set_expected_values(self): + return + + + def test_standard_run_input_status_success(self): + status_file_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, "STATUS_SUCCESS") + success_file_exists: bool = os.path.isfile(status_file_path) + self.assertTrue(success_file_exists) + + + def test_standard_run_input_all_regions_ran(self): + """ + working on the assumption that if there are images for each region, it must have run through + (at least past the region iteration) + """ + + east_africa_image_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "eastafrica", "images", "Weekly", + "suitability_eastafrica_leaf_rust_total_*_map.png") + ethiopia_image_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "ethiopia", "images", "Weekly", + "suitability_ethiopia_leaf_rust_total_*_map.png") + + ea_file_exists: bool = len(glob.glob(east_africa_image_path)) > 0 + eth_file_exists: bool = len(glob.glob(ethiopia_image_path)) > 0 + self.assertTrue(ea_file_exists) + self.assertTrue(eth_file_exists) + + + def test_standard_run_all_input_csvs_produced(self): + east_africa_csv_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "eastafrica", "input_csvs", "*.csv") + ethiopia_csv_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "ethiopia", "input_csvs", "*.csv") + + ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_csv_path) + eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_csv_path) + self.assertEqual(self.EA_CSV_COUNT, ea_csv_count) + self.assertEqual(self.ETH_CSV_COUNT, eth_csv_count) + + + def test_standard_run_all_images_produced(self): + east_africa_image_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "eastafrica", "images", "Weekly", "*.png") + ethiopia_image_path = os.path.join(BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_OUT_PATH, + BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR, + "plotting", "ethiopia", "images", "Weekly", "*.png") + + ea_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(east_africa_image_path) + eth_csv_count: int = IntegrationTestUtils.count_files_in_wildcard(ethiopia_image_path) + self.assertEqual(self.EA_PNG_COUNT, ea_csv_count) + self.assertEqual(self.ETH_PNG_COUNT, eth_csv_count) \ No newline at end of file