diff --git a/.github/workflows/MAVIS_TEST.yml b/.github/workflows/MAVIS_TEST.yml index e37a921df3b..d3c41f46ffe 100644 --- a/.github/workflows/MAVIS_TEST.yml +++ b/.github/workflows/MAVIS_TEST.yml @@ -37,7 +37,6 @@ jobs: pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi playwright install - playwright install-deps - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names @@ -49,10 +48,11 @@ jobs: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} @@ -65,10 +65,11 @@ jobs: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} @@ -81,10 +82,11 @@ jobs: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} @@ -92,47 +94,84 @@ jobs: echo "::group::Firefox" pytest --browser_or_device firefox echo "::endgroup::" - - name: Test on iPhone 12 + - name: Test on Edge env: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} run: | - echo "::group::iPhone 12" - pytest -m mobile --browser_or_device iphone_12 + echo "::group::Edge" + pytest --browser_or_device msedge echo "::endgroup::" - - name: Test on iPhone 11 + - name: Test on iPhone 14 env: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} run: | - echo "::group::iPhone 11" - pytest -m mobile --browser_or_device iphone_11 + echo "::group::iPhone 14" + pytest -m mobile --browser_or_device iphone_14 + echo "::endgroup::" + - name: Test on iPhone 15 + env: + HEADLESS: ${{ vars.HEADLESS }} + CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} + TEST_URL: ${{ vars.TEST_URL }} + RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} + TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} + TEST_USERNAME: ${{ secrets.TEST_USERNAME }} + API_TOKEN: ${{ secrets.API_TOKEN }} + run: | + echo "::group::iPhone 15" + pytest -m mobile --browser_or_device iphone_15 + echo "::endgroup::" + - name: Test on iPad Gen 7 + env: + HEADLESS: ${{ vars.HEADLESS }} + CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} + TEST_URL: ${{ vars.TEST_URL }} + RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} + TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} + TEST_USERNAME: ${{ secrets.TEST_USERNAME }} + API_TOKEN: ${{ secrets.API_TOKEN }} + run: | + echo "::group::iPad Gen 7" + pytest -m mobile --browser_or_device ipad_7 echo "::endgroup::" - name: Test on Google Pixel 5 env: HEADLESS: ${{ vars.HEADLESS }} CAPTURE_SCREENSHOTS: ${{ vars.CAPTURE_SCREENSHOTS }} TEST_URL: ${{ vars.TEST_URL }} - PARENTAL_CONSENT_URL: ${{ vars.PARENTAL_CONSENT_URL }} RESET_ENDPOINT: ${{ vars.RESET_ENDPOINT }} - LOGIN_PASSWORD: ${{ secrets.LOGIN_PASSWORD }} - LOGIN_USERNAME: ${{ secrets.LOGIN_USERNAME }} + NURSE_PASSWORD: ${{ secrets.NURSE_PASSWORD }} + NURSE_USERNAME: ${{ secrets.NURSE_USERNAME }} + SUPERUSER_PASSWORD: ${{ secrets.SUPERUSER_PASSWORD }} + SUPERUSER_USERNAME: ${{ secrets.SUPERUSER_USERNAME }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }} TEST_USERNAME: ${{ secrets.TEST_USERNAME }} API_TOKEN: ${{ secrets.API_TOKEN }} diff --git a/conftest.py b/conftest.py index 4e49df0887b..5919f317f9a 100644 --- a/conftest.py +++ b/conftest.py @@ -49,12 +49,17 @@ def start_browser(pw, browser_or_device: str): } try: match browser_or_device.lower(): - case "iphone_12": + case "iphone_14": _browser = pw.webkit.launch(headless=ce.headless_mode) - _context = _browser.new_context(**pw.devices["iPhone 12"], http_credentials=_http_credentials) - case "iphone_11": + _context = _browser.new_context(**pw.devices["iPhone 14"], http_credentials=_http_credentials) + case "iphone_15": _browser = pw.chromium.launch(channel="chrome", headless=ce.headless_mode) - _context = _browser.new_context(**pw.devices["iPhone 11"], http_credentials=_http_credentials) + _context = _browser.new_context(**pw.devices["iPhone 15"], http_credentials=_http_credentials) + case "ipad_7": + _browser = pw.chromium.launch(headless=ce.headless_mode) + _context = _browser.new_context( + **pw.devices["iPad (gen 7) landscape"], http_credentials=_http_credentials + ) case "pixel_5": _browser = pw.webkit.launch(headless=ce.headless_mode) _context = _browser.new_context(**pw.devices["Pixel 5"], http_credentials=_http_credentials) diff --git a/libs/__init__.py b/libs/__init__.py index 5abe9ea2d30..eb5bcab9103 100644 --- a/libs/__init__.py +++ b/libs/__init__.py @@ -16,9 +16,10 @@ class CurrentExecution: session_screenshots_dir: str = "" screenshot_sequence: int = 0 capture_screenshot_flag: bool = False - login_username: str = "" - login_password: str = "" - parental_consent_url: str = "" + nurse_username: str = "" + nurse_password: str = "" + superuser_username: str = "" + superuser_password: str = "" reset_endpoint: str = "" api_token: str = "" @@ -28,11 +29,12 @@ def get_env_values(): CurrentExecution.service_url = os.getenv("TEST_URL") CurrentExecution.base_auth_username = os.getenv("TEST_USERNAME") CurrentExecution.base_auth_password = os.getenv("TEST_PASSWORD") - CurrentExecution.login_username = os.getenv("LOGIN_USERNAME") - CurrentExecution.login_password = os.getenv("LOGIN_PASSWORD") + CurrentExecution.nurse_username = os.getenv("NURSE_USERNAME") + CurrentExecution.nurse_password = os.getenv("NURSE_PASSWORD") + CurrentExecution.superuser_username = os.getenv("SUPERUSER_USERNAME") + CurrentExecution.superuser_password = os.getenv("SUPERUSER_PASSWORD") CurrentExecution.headless_mode = os.getenv("HEADLESS").lower() == "true" CurrentExecution.capture_screenshot_flag = os.getenv("CAPTURE_SCREENSHOTS").lower() == "true" - CurrentExecution.parental_consent_url = os.getenv("PARENTAL_CONSENT_URL") CurrentExecution.reset_endpoint = os.getenv("RESET_ENDPOINT") CurrentExecution.api_token = os.getenv("API_TOKEN") diff --git a/libs/api_ops.py b/libs/api_ops.py index 01d5b038b48..123cee7758c 100644 --- a/libs/api_ops.py +++ b/libs/api_ops.py @@ -14,7 +14,9 @@ def api_get(endpoint, header, param): resp = requests.get(url=endpoint, params=param) else: resp = requests.get(url=endpoint, params=param, headers=header) - assert api_operations.__verify_response_code(resp.status_code), f"API GET failed for {endpoint}." + assert api_operations.__verify_response_code( + resp.status_code + ), f"API GET failed for {endpoint} - {resp.status_code}." return resp @staticmethod diff --git a/libs/constants.py b/libs/constants.py index c450d42957d..a1424537cd4 100644 --- a/libs/constants.py +++ b/libs/constants.py @@ -38,11 +38,6 @@ class api_constants: API_SUCCESS_STATUS_CODE_MAX: Final[int] = 299 -class workflow_type: - APPLICATION: Final[str] = "application" - PARENTAL_CONSENT: Final[str] = "parental_consent" - - class data_values: EMPTY: Final[str] = "" @@ -108,81 +103,33 @@ class escape_characters: ] -class test_data_file_paths: - PARENTAL_CONSENT: Final[str] = "test_data/ParentalConsent.xlsx" - VACCS_HPV_POSITIVE: Final[str] = ( - f"test_data/hpv/i_positive.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_positive.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_NEGATIVE: Final[str] = ( - f"test_data/hpv/i_negative.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_negative.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HIST_HPV_POSITIVE: Final[str] = ( - f"test_data/hpv/i_hist_positive.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_hist_positive.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HIST_HPV_NEGATIVE: Final[str] = ( - f"test_data/hpv/i_hist_negative.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_hist_negative.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_DUP_1: Final[str] = ( - f"test_data/hpv/i_dup_1.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_dup_1.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_DUP_2: Final[str] = ( - f"test_data/hpv/i_dup_2.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_dup_2.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_INVALID_STRUCTURE: Final[str] = ( - f"test_data/hpv/i_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_EMPTY_FILE: Final[str] = ( - f"test_data/hpv/i_empty.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_empty.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - VACCS_HPV_HEADER_ONLY: Final[str] = ( - f"test_data/hpv/i_header_only.csv{escape_characters.SEPARATOR_CHAR}test_data/hpv/o_header_only.csv{escape_characters.SEPARATOR_CHAR}hpv" - ) - COHORTS_POSITIVE: Final[str] = ( - f"test_data/cohorts/i_positive.csv{escape_characters.SEPARATOR_CHAR}test_data/cohorts/o_positive.csv{escape_characters.SEPARATOR_CHAR}cohort" - ) - COHORTS_NEGATIVE: Final[str] = ( - f"test_data/cohorts/i_negative.csv{escape_characters.SEPARATOR_CHAR}test_data/cohorts/o_negative.csv{escape_characters.SEPARATOR_CHAR}cohort" - ) - COHORTS_INVALID_STRUCTURE: Final[str] = ( - f"test_data/cohorts/i_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}test_data/cohorts/o_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}cohort" - ) - COHORTS_EMPTY_FILE: Final[str] = ( - f"test_data/cohorts/i_empty.csv{escape_characters.SEPARATOR_CHAR}test_data/cohorts/o_empty.csv{escape_characters.SEPARATOR_CHAR}cohort" - ) - COHORTS_HEADER_ONLY: Final[str] = ( - f"test_data/cohorts/i_header_only.csv{escape_characters.SEPARATOR_CHAR}test_data/cohorts/o_header_only.csv{escape_characters.SEPARATOR_CHAR}cohort" - ) - CHILD_POSITIVE: Final[str] = ( - f"test_data/child/i_positive.csv{escape_characters.SEPARATOR_CHAR}test_data/child/o_positive.csv{escape_characters.SEPARATOR_CHAR}child" - ) - CHILD_NEGATIVE: Final[str] = ( - f"test_data/child/i_negative.csv{escape_characters.SEPARATOR_CHAR}test_data/child/o_negative.csv{escape_characters.SEPARATOR_CHAR}child" - ) - CHILD_INVALID_STRUCTURE: Final[str] = ( - f"test_data/child/i_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}test_data/child/o_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}child" - ) - CHILD_EMPTY_FILE: Final[str] = ( - f"test_data/child/i_empty.csv{escape_characters.SEPARATOR_CHAR}test_data/child/o_empty.csv{escape_characters.SEPARATOR_CHAR}child" - ) - CHILD_HEADER_ONLY: Final[str] = ( - f"test_data/child/i_header_only.csv{escape_characters.SEPARATOR_CHAR}test_data/child/o_header_only.csv{escape_characters.SEPARATOR_CHAR}child" - ) - CLASS_POSITIVE: Final[str] = ( - f"test_data/class_list/i_positive.csv{escape_characters.SEPARATOR_CHAR}test_data/class_list/o_positive.csv{escape_characters.SEPARATOR_CHAR}class" - ) - CLASS_NEGATIVE: Final[str] = ( - f"test_data/class_list/i_negative.csv{escape_characters.SEPARATOR_CHAR}test_data/class_list/o_negative.csv{escape_characters.SEPARATOR_CHAR}class" - ) - CLASS_INVALID_STRUCTURE: Final[str] = ( - f"test_data/class_list/i_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}test_data/class_list/o_invalid_structure.csv{escape_characters.SEPARATOR_CHAR}class" - ) - CLASS_EMPTY_FILE: Final[str] = ( - f"test_data/class_list/i_empty.csv{escape_characters.SEPARATOR_CHAR}test_data/class_list/o_empty.csv{escape_characters.SEPARATOR_CHAR}class" - ) - CLASS_HEADER_ONLY: Final[str] = ( - f"test_data/class_list/i_header_only.csv{escape_characters.SEPARATOR_CHAR}test_data/class_list/o_header_only.csv{escape_characters.SEPARATOR_CHAR}class" - ) - - class file_encoding: ASCII = "ascii" + + +class test_data_file_paths: + PARENTAL_CONSENT: Final[str] = "test_data/ParentalConsent.xlsx" + VACCS_HPV_POSITIVE: Final[str] = "VACCS_HPV_POSITIVE" + VACCS_HPV_NEGATIVE: Final[str] = "VACCS_HPV_NEGATIVE" + VACCS_HIST_HPV_POSITIVE: Final[str] = "VACCS_HIST_HPV_POSITIVE" + VACCS_HIST_HPV_NEGATIVE: Final[str] = "VACCS_HIST_HPV_NEGATIVE" + VACCS_HPV_DUP_1: Final[str] = "VACCS_HPV_DUP_1" + VACCS_HPV_DUP_2: Final[str] = "VACCS_HPV_DUP_2" + VACCS_HPV_INVALID_STRUCTURE: Final[str] = "VACCS_HPV_INVALID_STRUCTURE" + VACCS_HPV_EMPTY_FILE: Final[str] = "VACCS_HPV_EMPTY_FILE" + VACCS_HPV_HEADER_ONLY: Final[str] = "VACCS_HPV_HEADER_ONLY" + COHORTS_POSITIVE: Final[str] = "COHORTS_POSITIVE" + COHORTS_NEGATIVE: Final[str] = "COHORTS_NEGATIVE" + COHORTS_INVALID_STRUCTURE: Final[str] = "COHORTS_INVALID_STRUCTURE" + COHORTS_EMPTY_FILE: Final[str] = "COHORTS_EMPTY_FILE" + COHORTS_HEADER_ONLY: Final[str] = "COHORTS_HEADER_ONLY" + CHILD_POSITIVE: Final[str] = "CHILD_POSITIVE" + CHILD_NEGATIVE: Final[str] = "CHILD_NEGATIVE" + CHILD_INVALID_STRUCTURE: Final[str] = "CHILD_INVALID_STRUCTURE" + CHILD_EMPTY_FILE: Final[str] = "CHILD_EMPTY_FILE" + CHILD_HEADER_ONLY: Final[str] = "CHILD_HEADER_ONLY" + CLASS_POSITIVE: Final[str] = "CLASS_POSITIVE" + CLASS_NEGATIVE: Final[str] = "CLASS_NEGATIVE" + CLASS_INVALID_STRUCTURE: Final[str] = "CLASS_INVALID_STRUCTURE" + CLASS_EMPTY_FILE: Final[str] = "CLASS_EMPTY_FILE" + CLASS_HEADER_ONLY: Final[str] = "CLASS_HEADER_ONLY" diff --git a/libs/testdata_ops.py b/libs/testdata_ops.py index 9ec4a4fe372..fccb7a8949e 100644 --- a/libs/testdata_ops.py +++ b/libs/testdata_ops.py @@ -10,6 +10,9 @@ class testdata_operations: fo = file_ops.file_operations() ce = CurrentExecution() + def __init__(self): + self.mapping_df: pd.DataFrame = self.fo.read_csv_to_df(file_path="test_data/file_mapping.csv") + def create_file_from_template(self, template_path: str, file_name_prefix: str) -> str: _template_text = self.fo.get_file_text(file_path=template_path) _file_text = [] @@ -34,7 +37,7 @@ def get_new_nhs_no(self, valid=True) -> str: def get_expected_errors(self, file_path: str) -> list[str]: _file_content = self.fo.get_file_text(file_path=file_path) - return _file_content.split("\n") if _file_content is not None else None + return _file_content.split(escape_characters.NEW_LINE) if _file_content is not None else None def read_spreadsheet(self, file_path: str) -> pd.DataFrame: _df = self.fo.read_excel_to_df(file_path=file_path) @@ -52,10 +55,11 @@ def clean_df(self, df: pd.DataFrame) -> pd.DataFrame: _df.replace(to_replace="", value=data_values.EMPTY, inplace=True) return _df - def split_file_paths(self, file_paths: str) -> tuple[str, str]: - file_for = file_paths.split(escape_characters.SEPARATOR_CHAR)[2] - _input_file_path = self.create_file_from_template( - template_path=file_paths.split(escape_characters.SEPARATOR_CHAR)[0], file_name_prefix=file_for + def get_file_paths(self, file_paths: str) -> tuple[str, str]: + _input_template_path: str = self.mapping_df.query("ID==@file_paths")["INPUT_TEMPLATE"].to_string(index=False) + _output_template_path: str = self.mapping_df.query("ID==@file_paths")["OUTPUT_TEMPLATE"].to_string(index=False) + _file_prefix: str = self.mapping_df.query("ID==@file_paths")["FILE_PREFIX"].to_string(index=False) + _input_file_path: str = self.create_file_from_template( + template_path=_input_template_path, file_name_prefix=_file_prefix ) - _output_file_path = file_paths.split(escape_characters.SEPARATOR_CHAR)[1] - return _input_file_path, _output_file_path + return _input_file_path, _output_template_path diff --git a/pages/pg_dashboard.py b/pages/pg_dashboard.py index 6ab34c3b1c1..ee3e38b52fd 100644 --- a/pages/pg_dashboard.py +++ b/pages/pg_dashboard.py @@ -57,7 +57,7 @@ def verify_all_expected_links(self): locator=self.LNK_UNMATCHED_CONSENT_RESPONSES, property=object_properties.VISIBILITY, value=True, exact=True ) self.po.verify(locator=self.LNK_SCHOOL_MOVES, property=object_properties.VISIBILITY, value=True, exact=True) - self.po.verify(locator=self.LNK_NOTICES, property=object_properties.VISIBILITY, value=True, exact=True) + # self.po.verify(locator=self.LNK_NOTICES, property=object_properties.VISIBILITY, value=True, exact=True) # Superuser only self.po.verify(locator=self.LNK_ORGANISATION, property=object_properties.VISIBILITY, value=True, exact=True) self.po.verify( locator=self.LNK_SERVICE_GUIDANCE, property=object_properties.VISIBILITY, value=True, exact=True diff --git a/pages/pg_login.py b/pages/pg_login.py index 06c60804085..cac4faa4747 100644 --- a/pages/pg_login.py +++ b/pages/pg_login.py @@ -12,7 +12,8 @@ class pg_login: BTN_LOGIN = "Log in" BTN_LOGOUT = "Log out" LBL_BANNER = "banner" - LBL_USER = "Nurse Joy" + LBL_NURSE = "Nurse Joy" + LBL_SUPERUSER = "Superuser Superuser" LBL_PARAGRAPH = "paragraph" def click_start(self): @@ -28,12 +29,19 @@ def click_login(self): self.po.perform_action(locator=self.BTN_LOGIN, action=actions.CLICK_BUTTON) def verify_login_successful(self): - self.po.verify(locator=self.LBL_BANNER, property=object_properties.TEXT, value=self.LBL_USER) + self.po.verify(locator=self.LBL_BANNER, property=object_properties.TEXT, value=self.LBL_NURSE) - def perform_valid_login(self): + def login_as_nurse(self): self.click_start() - self.enter_username(username=self.ce.login_username) - self.enter_password(password=self.ce.login_password) + self.enter_username(username=self.ce.nurse_username) + self.enter_password(password=self.ce.nurse_password) + self.click_login() + self.verify_login_successful() + + def login_as_superuser(self): + self.click_start() + self.enter_username(username=self.ce.superuser_username) + self.enter_password(password=self.ce.superuser_password) self.click_login() self.verify_login_successful() diff --git a/pages/pg_programmes.py b/pages/pg_programmes.py index ca0afc69a0f..5ed6e6517fa 100644 --- a/pages/pg_programmes.py +++ b/pages/pg_programmes.py @@ -83,7 +83,7 @@ def verify_upload_output(self, file_path: str): self.po.verify(locator=self.LBL_MAIN, property=object_properties.TEXT, value=_msg, exact=False) def upload_hpv_vaccination_records(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_imports() self.click_import_records() @@ -99,7 +99,7 @@ def upload_hpv_vaccination_records(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_hpv_child_records(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_imports() self.click_import_records() @@ -114,7 +114,7 @@ def upload_hpv_child_records(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_cohorts(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_cohorts() self.click_import_cohort_records() @@ -127,7 +127,7 @@ def upload_cohorts(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_invalid_files(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_imports() self.click_import_records() @@ -138,7 +138,7 @@ def upload_invalid_files(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_invalid_cohorts(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_cohorts() self.click_import_cohort_records() @@ -147,7 +147,7 @@ def upload_invalid_cohorts(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_invalid_hpv_child_records(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_hpv() self.click_imports() self.click_import_records() diff --git a/pages/pg_sessions.py b/pages/pg_sessions.py index 4688ffbff4e..19fa02554aa 100644 --- a/pages/pg_sessions.py +++ b/pages/pg_sessions.py @@ -288,7 +288,7 @@ def click_get_consent_responses(self): self.po.perform_action(locator=self.BTN_GET_CONSENT_RESPONSES, action=actions.CLICK_BUTTON) def upload_valid_class_list(self, file_paths: str): - _input_file_path, _ = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _ = self.tdo.get_file_paths(file_paths=file_paths) self.click_scheduled() self.click_school1() self.click_import_class_list() @@ -296,7 +296,7 @@ def upload_valid_class_list(self, file_paths: str): self.click_continue() def update_triage_outcome_positive(self, file_paths): - _input_file_path, _ = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _ = self.tdo.get_file_paths(file_paths=file_paths) self.click_scheduled() self.click_school1() self.click_import_class_list() @@ -325,7 +325,7 @@ def update_triage_outcome_positive(self, file_paths): self.verify_activity_log_entry(consent_given=True) def update_triage_outcome_consent_refused(self, file_paths): - _input_file_path, _ = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _ = self.tdo.get_file_paths(file_paths=file_paths) self.click_scheduled() self.click_school1() self.click_import_class_list() @@ -372,7 +372,7 @@ def create_invalid_session(self): self.schedule_session(future_date=_future_date, expect_error=True) def upload_class_list(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_scheduled() self.click_school1() self.click_import_class_list() @@ -384,7 +384,7 @@ def upload_class_list(self, file_paths: str): self.verify_upload_output(file_path=_output_file_path) def upload_invalid_class_list_records(self, file_paths: str): - _input_file_path, _output_file_path = self.tdo.split_file_paths(file_paths=file_paths) + _input_file_path, _output_file_path = self.tdo.get_file_paths(file_paths=file_paths) self.click_scheduled() self.click_school1() self.click_import_class_list() diff --git a/test_data/file_mapping.csv b/test_data/file_mapping.csv new file mode 100644 index 00000000000..edcf7386b0c --- /dev/null +++ b/test_data/file_mapping.csv @@ -0,0 +1,25 @@ +ID,INPUT_TEMPLATE,OUTPUT_TEMPLATE,FILE_PREFIX +VACCS_HPV_POSITIVE,test_data/hpv/i_positive.csv,test_data/hpv/o_positive.csv,hpv +VACCS_HPV_NEGATIVE,test_data/hpv/i_negative.csv,test_data/hpv/o_negative.csv,hpv +VACCS_HIST_HPV_POSITIVE,test_data/hpv/i_hist_positive.csv,test_data/hpv/o_hist_positive.csv,hpv +VACCS_HIST_HPV_NEGATIVE,test_data/hpv/i_hist_negative.csv,test_data/hpv/o_hist_negative.csv,hpv +VACCS_HPV_DUP_1,test_data/hpv/i_dup_1.csv,test_data/hpv/o_dup_1.csv,hpv +VACCS_HPV_DUP_2,test_data/hpv/i_dup_2.csv,test_data/hpv/o_dup_2.csv,hpv +VACCS_HPV_INVALID_STRUCTURE,test_data/hpv/i_invalid_structure.csv,test_data/hpv/o_invalid_structure.csv,hpv +VACCS_HPV_EMPTY_FILE,test_data/hpv/i_empty.csv,test_data/hpv/o_empty.csv,hpv +VACCS_HPV_HEADER_ONLY,test_data/hpv/i_header_only.csv,test_data/hpv/o_header_only.csv,hpv +COHORTS_POSITIVE,test_data/cohorts/i_positive.csv,test_data/cohorts/o_positive.csv,cohort +COHORTS_NEGATIVE,test_data/cohorts/i_negative.csv,test_data/cohorts/o_negative.csv,cohort +COHORTS_INVALID_STRUCTURE,test_data/cohorts/i_invalid_structure.csv,test_data/cohorts/o_invalid_structure.csv,cohort +COHORTS_EMPTY_FILE,test_data/cohorts/i_empty.csv,test_data/cohorts/o_empty.csv,cohort +COHORTS_HEADER_ONLY,test_data/cohorts/i_header_only.csv,test_data/cohorts/o_header_only.csv,cohort +CHILD_POSITIVE,test_data/child/i_positive.csv,test_data/child/o_positive.csv,child +CHILD_NEGATIVE,test_data/child/i_negative.csv,test_data/child/o_negative.csv,child +CHILD_INVALID_STRUCTURE,test_data/child/i_invalid_structure.csv,test_data/child/o_invalid_structure.csv,child +CHILD_EMPTY_FILE,test_data/child/i_empty.csv,test_data/child/o_empty.csv,child +CHILD_HEADER_ONLY,test_data/child/i_header_only.csv,test_data/child/o_header_only.csv,child +CLASS_POSITIVE,test_data/class_list/i_positive.csv,test_data/class_list/o_positive.csv,class +CLASS_NEGATIVE,test_data/class_list/i_negative.csv,test_data/class_list/o_negative.csv,class +CLASS_INVALID_STRUCTURE,test_data/class_list/i_invalid_structure.csv,test_data/class_list/o_invalid_structure.csv,class +CLASS_EMPTY_FILE,test_data/class_list/i_empty.csv,test_data/class_list/o_empty.csv,class +CLASS_HEADER_ONLY,test_data/class_list/i_header_only.csv,test_data/class_list/o_header_only.csv,class diff --git a/tests/test_01_login.py b/tests/test_01_login.py index c90b54af599..0d186d68b32 100644 --- a/tests/test_01_login.py +++ b/tests/test_01_login.py @@ -29,6 +29,6 @@ def test_invalid_login(self, user, pwd, expected_message): @pytest.mark.order(102) def test_home_page_links(self): self.login_page.go_to_login_page() - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.verify_all_expected_links() self.login_page.perform_logout() diff --git a/tests/test_02_sessions.py b/tests/test_02_sessions.py index 1096ec9c0b5..e2b079fc9d6 100644 --- a/tests/test_02_sessions.py +++ b/tests/test_02_sessions.py @@ -10,7 +10,7 @@ class Test_Sessions: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.go_to_dashboard() self.dashboard_page.click_sessions() yield diff --git a/tests/test_03_class_list_upload.py b/tests/test_03_class_list_upload.py index 1e75902613e..f2d8a50166c 100644 --- a/tests/test_03_class_list_upload.py +++ b/tests/test_03_class_list_upload.py @@ -11,7 +11,7 @@ class Test_Class_List_Upload: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session() self.dashboard_page.go_to_dashboard() diff --git a/tests/test_04_cohorts.py b/tests/test_04_cohorts.py index 5c435a873b1..feffc347289 100644 --- a/tests/test_04_cohorts.py +++ b/tests/test_04_cohorts.py @@ -11,7 +11,7 @@ class Test_Cohorts: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_programmes() yield self.login_page.perform_logout() diff --git a/tests/test_05_child_list_upload.py b/tests/test_05_child_list_upload.py index e0c9e09b4ea..6ee260fd401 100644 --- a/tests/test_05_child_list_upload.py +++ b/tests/test_05_child_list_upload.py @@ -11,7 +11,7 @@ class Test_Child_List_Upload: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_programmes() yield self.login_page.perform_logout() diff --git a/tests/test_06_vaccs_batch.py b/tests/test_06_vaccs_batch.py index e0b6afcefa5..cf225090502 100644 --- a/tests/test_06_vaccs_batch.py +++ b/tests/test_06_vaccs_batch.py @@ -10,7 +10,7 @@ class Test_Regression_Vaccines: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_vaccines() yield self.login_page.perform_logout() diff --git a/tests/test_07_record_a_vaccine_using_ui.py b/tests/test_07_record_a_vaccine_using_ui.py index a97af6af5b1..3df2a6830c4 100644 --- a/tests/test_07_record_a_vaccine_using_ui.py +++ b/tests/test_07_record_a_vaccine_using_ui.py @@ -11,7 +11,7 @@ class Test_Record_a_Vaccine_Using_UI: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session() self.dashboard_page.go_to_dashboard() diff --git a/tests/test_08_vaccs_upload.py b/tests/test_08_vaccs_upload.py index 0732c3d2f2a..a0936662e6f 100644 --- a/tests/test_08_vaccs_upload.py +++ b/tests/test_08_vaccs_upload.py @@ -12,7 +12,7 @@ class Test_Vaccinations_Upload: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session(for_today=True) self.dashboard_page.go_to_dashboard() diff --git a/tests/test_09_consent.py b/tests/test_09_consent.py index 3fdbf9e65a2..7b100aaccdb 100644 --- a/tests/test_09_consent.py +++ b/tests/test_09_consent.py @@ -17,7 +17,7 @@ class Test_Consent: @pytest.fixture def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session(for_today=True) self.dashboard_page.go_to_dashboard() @@ -33,14 +33,14 @@ def setup_tests(self, start_mavis: None): @pytest.fixture def get_session_link(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session() link = self.sessions_page.get_consent_url() self.login_page.perform_logout() yield link self.login_page.go_to_login_page() - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.delete_all_sessions() self.login_page.perform_logout() diff --git a/tests/test_10_children.py b/tests/test_10_children.py index 5083b574fee..eba84b8886c 100644 --- a/tests/test_10_children.py +++ b/tests/test_10_children.py @@ -10,7 +10,7 @@ class Test_Children: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_children() yield self.login_page.perform_logout() diff --git a/tests/test_11_school_moves.py b/tests/test_11_school_moves.py index d6f52bffe83..2a84731755f 100644 --- a/tests/test_11_school_moves.py +++ b/tests/test_11_school_moves.py @@ -12,7 +12,7 @@ class Test_School_Moves: @pytest.fixture(scope="function", autouse=True) def setup_tests(self, start_mavis: None): - self.login_page.perform_valid_login() + self.login_page.login_as_nurse() self.dashboard_page.click_sessions() self.sessions_page.schedule_a_valid_session() self.dashboard_page.go_to_dashboard() @@ -24,6 +24,9 @@ def setup_tests(self, start_mavis: None): self.dashboard_page.go_to_dashboard() self.dashboard_page.click_school_moves() yield + self.dashboard_page.go_to_dashboard() + self.dashboard_page.click_sessions() + self.sessions_page.delete_all_sessions() self.login_page.perform_logout() @pytest.mark.schoolmoves