From b749cbe9be08a6c3c18a0699a96f793e3545b009 Mon Sep 17 00:00:00 2001
From: lb584 <lb584@cam.ac.uk>
Date: Thu, 23 Mar 2023 15:55:58 +0000
Subject: [PATCH] unifying the arg parsing for full fat tests

---
 tests/integration/full/full_test_advisory.py  | 33 +++++++++++--------
 .../integration/full/full_test_deposition.py  | 21 ++++--------
 tests/integration/full/full_test_env_suit.py  | 26 +++++++++------
 tests/integration/full/full_test_epi.py       | 25 ++++++++------
 tests/integration/full/full_test_survey.py    | 25 ++++++++------
 .../partial/integration_test_utils.py         | 13 ++++++++
 6 files changed, 84 insertions(+), 59 deletions(-)

diff --git a/tests/integration/full/full_test_advisory.py b/tests/integration/full/full_test_advisory.py
index b432370..a2cc5c7 100644
--- a/tests/integration/full/full_test_advisory.py
+++ b/tests/integration/full/full_test_advisory.py
@@ -1,8 +1,9 @@
-import argparse
 import copy
 import os
 import sys
-import unittest
+from unittest import TestSuite, TestLoader
+
+from HtmlTestRunner import HTMLTestRunner
 
 from integration.partial.integration_test_utils import IntegrationTestUtils
 from integration.test_suites.advisory_test_suite import BaseAdvisoryTestSuite
@@ -40,11 +41,13 @@ class FullTestAdvisory(BaseAdvisoryTestSuite.AdvisoryTestSuite):
         run_dict['Environment']['WORK_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH
         run_dict['Environment']['INPUT_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH
         run_dict['Environment']['OUTPUT_PATH'] = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH
+
         #make sure we activate server download
         run_dict['Survey']['SkipServerDownload'] = False
-        survey_cred_file: str = run_dict['Survey']['ServerCredentialsFile']
+
+        # survey_cred_file: str = run_dict['Survey']['ServerCredentialsFile']
         # run_dict['Survey']['ServerCredentialsFile'] = survey_cred_file.replace("Cred-ODK-EIAR.json", "Cred-ODK-EIAR-NO-WRSIS.json")
-        run_dict['Survey']['FormEdits'].pop('WRSIS', None)
+        # run_dict['Survey']['FormEdits'].pop('WRSIS', None)
 
         # may be reusing a non-timestamped output file during development, so allow extant TEST_OUT_PATH
         os.makedirs(BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_OUT_PATH, exist_ok = True)
@@ -74,18 +77,14 @@ class FullTestAdvisory(BaseAdvisoryTestSuite.AdvisoryTestSuite):
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--config', required = True)
-    parser.add_argument('--outdir', required = True)
-    parser.add_argument('--email_cred', required = True)
-    parser.add_argument('--run_date_type', required = False)
-    parser.add_argument('--custom_run_date', required = False)
-    parser.add_argument('unittest_args', nargs='*')
-
-    _args = parser.parse_args()
+
+    _parser = IntegrationTestUtils.build_arg_parser()
+
+    _args = _parser.parse_args()
     _config_file: str = _args.config
     _outdir: str = _args.outdir
     _email_cred_path: str = _args.email_cred
+    _test_report_dir: str = _args.test_report_dir
     _run_date_type: str = _args.run_date_type
     _custom_run_date: str = _args.custom_run_date
 
@@ -103,4 +102,10 @@ if __name__ == '__main__':
 
     #  Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
     sys.argv[1:] = _args.unittest_args
-    unittest.main()
+    tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestAdvisory)
+
+    if _test_report_dir is None:
+        _test_report_dir = BaseAdvisoryTestSuite.AdvisoryTestSuite.TEST_JOB_DIR
+
+    runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True)
+    runner.run(tests)
diff --git a/tests/integration/full/full_test_deposition.py b/tests/integration/full/full_test_deposition.py
index d22bf4d..01f3837 100644
--- a/tests/integration/full/full_test_deposition.py
+++ b/tests/integration/full/full_test_deposition.py
@@ -1,8 +1,6 @@
-import argparse
 import copy
 import os
 import sys
-import unittest
 from unittest import TestLoader, TestSuite
 
 from HtmlTestRunner import HTMLTestRunner
@@ -24,9 +22,8 @@ class FullTestDeposition(BaseDepoTestSuite.DepoTestSuite):
 
         self.set_expected_values()
 
-        # if BaseDepoTestSuite.DepoTestSuite.TEST_OUT_PATH is None \
-        #         or not os.path.isdir(BaseDepoTestSuite.DepoTestSuite.TEST_OUT_PATH):
-        if True:
+        if BaseDepoTestSuite.DepoTestSuite.TEST_OUT_PATH is None \
+                or not os.path.isdir(BaseDepoTestSuite.DepoTestSuite.TEST_OUT_PATH):
             FullTestDeposition.write_temp_run_config_file()
             FullTestDeposition.run_depo_pipeline()
         else:
@@ -57,16 +54,10 @@ class FullTestDeposition(BaseDepoTestSuite.DepoTestSuite):
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--config', required = True)
-    parser.add_argument('--outdir', required = True)
-    parser.add_argument('--email_cred', required = True)
-    parser.add_argument('--test_report_dir', required = False)
-    parser.add_argument('--run_date_type', required = False)
-    parser.add_argument('--custom_run_date', required = False)
-    parser.add_argument('unittest_args', nargs='*')
-
-    _args = parser.parse_args()
+
+    _parser = IntegrationTestUtils.build_arg_parser()
+
+    _args = _parser.parse_args()
     _config_file: str = _args.config
     _outdir: str = _args.outdir
     _email_cred_path: str = _args.email_cred
diff --git a/tests/integration/full/full_test_env_suit.py b/tests/integration/full/full_test_env_suit.py
index e8e3ff3..66d2365 100644
--- a/tests/integration/full/full_test_env_suit.py
+++ b/tests/integration/full/full_test_env_suit.py
@@ -4,8 +4,12 @@ import glob
 import os
 import sys
 import unittest
+from unittest import TestSuite, TestLoader
+
+from HtmlTestRunner import HTMLTestRunner
 
 from integration.partial.integration_test_utils import IntegrationTestUtils
+from integration.test_suites.depo_test_suite import BaseDepoTestSuite
 from integration.test_suites.env_suit_test_suite import BaseEnvSuitTestSuite
 
 
@@ -54,18 +58,14 @@ class FullTestEnvSuit(BaseEnvSuitTestSuite.EnvSuitTestSuite):
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--config', required = True)
-    parser.add_argument('--outdir', required = True)
-    parser.add_argument('--email_cred', required = True)
-    parser.add_argument('--run_date_type', required = False)
-    parser.add_argument('--custom_run_date', required = False)
-    parser.add_argument('unittest_args', nargs='*')
-
-    _args = parser.parse_args()
+
+    _parser = IntegrationTestUtils.build_arg_parser()
+
+    _args = _parser.parse_args()
     _config_file: str = _args.config
     _outdir: str = _args.outdir
     _email_cred_path: str = _args.email_cred
+    _test_report_dir: str = _args.test_report_dir
     _run_date_type: str = _args.run_date_type
     _custom_run_date: str = _args.custom_run_date
 
@@ -83,4 +83,10 @@ if __name__ == '__main__':
 
     #  Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
     sys.argv[1:] = _args.unittest_args
-    unittest.main()
+    tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestEnvSuit)
+
+    if _test_report_dir is None:
+        _test_report_dir = BaseEnvSuitTestSuite.EnvSuitTestSuite.TEST_JOB_DIR
+
+    runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True)
+    runner.run(tests)
diff --git a/tests/integration/full/full_test_epi.py b/tests/integration/full/full_test_epi.py
index 4719867..d595c6c 100644
--- a/tests/integration/full/full_test_epi.py
+++ b/tests/integration/full/full_test_epi.py
@@ -3,6 +3,9 @@ import copy
 import os
 import sys
 import unittest
+from unittest import TestSuite, TestLoader
+
+from HtmlTestRunner import HTMLTestRunner
 
 from integration.partial.integration_test_utils import IntegrationTestUtils
 from integration.test_suites.epi_test_suite import BaseEpiTestSuite
@@ -81,18 +84,14 @@ class FullTestEpi(BaseEpiTestSuite.EpiTestSuite):
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--config', required = True)
-    parser.add_argument('--outdir', required = True)
-    parser.add_argument('--email_cred', required = True)
-    parser.add_argument('--run_date_type', required = False)
-    parser.add_argument('--custom_run_date', required = False)
-    parser.add_argument('unittest_args', nargs='*')
-
-    _args = parser.parse_args()
+
+    _parser = IntegrationTestUtils.build_arg_parser()
+
+    _args = _parser.parse_args()
     _config_file: str = _args.config
     _outdir: str = _args.outdir
     _email_cred_path: str = _args.email_cred
+    _test_report_dir: str = _args.test_report_dir
     _run_date_type: str = _args.run_date_type
     _custom_run_date: str = _args.custom_run_date
 
@@ -110,4 +109,10 @@ if __name__ == '__main__':
 
     #  Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
     sys.argv[1:] = _args.unittest_args
-    unittest.main()
+    tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestEpi)
+
+    if _test_report_dir is None:
+        _test_report_dir = BaseEpiTestSuite.EpiTestSuite.TEST_JOB_DIR
+
+    runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True)
+    runner.run(tests)
diff --git a/tests/integration/full/full_test_survey.py b/tests/integration/full/full_test_survey.py
index f28a8d5..9aafa78 100644
--- a/tests/integration/full/full_test_survey.py
+++ b/tests/integration/full/full_test_survey.py
@@ -3,6 +3,9 @@ import copy
 import os
 import sys
 import unittest
+from unittest import TestSuite, TestLoader
+
+from HtmlTestRunner import HTMLTestRunner
 
 from integration.partial.integration_test_utils import IntegrationTestUtils
 from integration.test_suites.survey_test_suite import BaseSurveyTestSuite
@@ -49,18 +52,14 @@ class FullTestSurvey(BaseSurveyTestSuite.SurveyTestSuite):
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser()
-    parser.add_argument('--config', required = True)
-    parser.add_argument('--outdir', required = True)
-    parser.add_argument('--email_cred', required = True)
-    parser.add_argument('--run_date_type', required = False)
-    parser.add_argument('--custom_run_date', required = False)
-    parser.add_argument('unittest_args', nargs='*')
-
-    _args = parser.parse_args()
+
+    _parser = IntegrationTestUtils.build_arg_parser()
+
+    _args = _parser.parse_args()
     _config_file: str = _args.config
     _outdir: str = _args.outdir
     _email_cred_path: str = _args.email_cred
+    _test_report_dir: str = _args.test_report_dir
     _run_date_type: str = _args.run_date_type
     _custom_run_date: str = _args.custom_run_date
 
@@ -78,4 +77,10 @@ if __name__ == '__main__':
 
     # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
     sys.argv[1:] = _args.unittest_args
-    unittest.main()
+    tests: TestSuite = TestLoader().loadTestsFromTestCase(FullTestSurvey)
+
+    if _test_report_dir is None:
+        _test_report_dir = BaseSurveyTestSuite.SurveyTestSuite.TEST_JOB_DIR
+
+    runner = HTMLTestRunner(output=_test_report_dir, combine_reports = True)
+    runner.run(tests)
diff --git a/tests/integration/partial/integration_test_utils.py b/tests/integration/partial/integration_test_utils.py
index 6c785a5..339148f 100644
--- a/tests/integration/partial/integration_test_utils.py
+++ b/tests/integration/partial/integration_test_utils.py
@@ -1,3 +1,4 @@
+import argparse
 import datetime
 import glob
 import json
@@ -19,6 +20,18 @@ class IntegrationTestUtils:
     EXAMPLE_DEPO_FILE_PATH: str = TEST_ASSETS_PATH + "example_depo_run.zip"
     EXAMPLE_ENV_SUIT_FILE_PATH: str = TEST_ASSETS_PATH + "example_env_suit_run.zip"
 
+    @staticmethod
+    def build_arg_parser() -> argparse.ArgumentParser:
+        parser = argparse.ArgumentParser()
+        parser.add_argument('--config', required = True)
+        parser.add_argument('--outdir', required = True)
+        parser.add_argument('--email_cred', required = True)
+        parser.add_argument('--test_report_dir', required = False)
+        parser.add_argument('--run_date_type', required = False)
+        parser.add_argument('--custom_run_date', required = False)
+        parser.add_argument('unittest_args', nargs='*')
+        return parser
+
     @staticmethod
     def load_json_file(file: str) -> dict:
         with open(file) as config_file:
-- 
GitLab