diff --git a/mavis/test/__init__.py b/mavis/test/__init__.py index 0dd9e9202ee..40fec3c113e 100644 --- a/mavis/test/__init__.py +++ b/mavis/test/__init__.py @@ -1,173 +1,75 @@ from .fixtures import ( - accessibility_helper, - add_batch_page, add_vaccine_batch, - archive_batch_page, - archive_consent_response_page, authenticate_api, - bad_request_page, base_url, basic_auth_credentials, basic_auth_token, browser_context_args, browser_type, - child_activity_log_page, - child_archive_page, - child_edit_page, - child_record_page, children, - children_search_page, clinics, - consent_response_page, - create_new_record_consent_response_page, - dashboard_page, delete_team_after_tests, - download_school_moves_page, - edit_batch_page, - edit_vaccination_record_page, - flipper_page, - gillick_competence_page, healthcare_assistant, imms_base_url, - import_records_wizard_page, - imports_page, log_in_as_medical_secretary, log_in_as_nurse, log_in_as_prescriber, - log_in_page, - log_out_page, - match_consent_response_page, medical_secretary, nurse, - nurse_consent_wizard_page, onboarding, - online_consent_wizard_page, organisation, prescriber, - programme_children_page, - programme_overview_page, - programme_sessions_page, programmes_enabled, - programmes_list_page, - reports_download_page, - reports_vaccinations_page, reset_before_each_module, - review_school_move_page, schedule_mmr_session_and_get_consent_url, schedule_session_and_get_consent_url, - school_moves_page, schools, - service_error_page, - sessions_children_page, - sessions_edit_page, - sessions_overview_page, - sessions_patient_page, - sessions_patient_session_activity_page, - sessions_psd_page, - sessions_record_vaccinations_page, - sessions_register_page, - sessions_search_page, - sessions_vaccination_wizard_page, set_feature_flags, setup_session_and_batches_with_fixed_child, - start_page, subteam, superuser, team, - team_page, test_data, - unmatched_consent_responses_page, upload_offline_vaccination, - vaccination_record_page, - vaccines_page, year_groups, ) from .hooks import pytest_runtest_logreport, pytest_sessionfinish, pytest_sessionstart __all__ = [ - "accessibility_helper", - "add_batch_page", "add_vaccine_batch", - "archive_batch_page", - "archive_consent_response_page", "authenticate_api", - "bad_request_page", "base_url", "basic_auth_credentials", "basic_auth_token", "browser_context_args", "browser_type", - "child_activity_log_page", - "child_archive_page", - "child_edit_page", - "child_record_page", "children", - "children_search_page", "clinics", - "consent_response_page", - "create_new_record_consent_response_page", - "dashboard_page", "delete_team_after_tests", - "download_school_moves_page", - "edit_batch_page", - "edit_vaccination_record_page", - "flipper_page", - "gillick_competence_page", "healthcare_assistant", "imms_base_url", - "import_records_wizard_page", - "imports_page", "log_in_as_medical_secretary", "log_in_as_nurse", "log_in_as_prescriber", - "log_in_page", - "log_out_page", - "match_consent_response_page", "medical_secretary", "nurse", - "nurse_consent_wizard_page", "onboarding", - "online_consent_wizard_page", "organisation", "prescriber", - "programme_children_page", - "programme_overview_page", - "programme_sessions_page", "programmes_enabled", - "programmes_list_page", "pytest_runtest_logreport", "pytest_sessionfinish", "pytest_sessionstart", - "reports_download_page", - "reports_vaccinations_page", "reset_before_each_module", - "review_school_move_page", "schedule_mmr_session_and_get_consent_url", "schedule_session_and_get_consent_url", - "school_moves_page", "schools", - "service_error_page", - "sessions_children_page", - "sessions_edit_page", - "sessions_overview_page", - "sessions_patient_page", - "sessions_patient_session_activity_page", - "sessions_psd_page", - "sessions_record_vaccinations_page", - "sessions_register_page", - "sessions_search_page", - "sessions_vaccination_wizard_page", "set_feature_flags", "setup_session_and_batches_with_fixed_child", - "start_page", "subteam", "superuser", "team", - "team_page", "test_data", - "unmatched_consent_responses_page", "upload_offline_vaccination", - "vaccination_record_page", - "vaccines_page", "year_groups", ] diff --git a/mavis/test/fixtures/__init__.py b/mavis/test/fixtures/__init__.py index 1c39a4f08d8..21c02e85ce2 100644 --- a/mavis/test/fixtures/__init__.py +++ b/mavis/test/fixtures/__init__.py @@ -1,5 +1,4 @@ from .helpers import ( - accessibility_helper, add_vaccine_batch, log_in_as_medical_secretary, log_in_as_nurse, @@ -31,56 +30,6 @@ team, year_groups, ) -from .pages import ( - add_batch_page, - archive_batch_page, - archive_consent_response_page, - bad_request_page, - child_activity_log_page, - child_archive_page, - child_edit_page, - child_record_page, - children_search_page, - consent_response_page, - create_new_record_consent_response_page, - dashboard_page, - download_school_moves_page, - edit_batch_page, - edit_vaccination_record_page, - flipper_page, - gillick_competence_page, - import_records_wizard_page, - imports_page, - log_in_page, - log_out_page, - match_consent_response_page, - nurse_consent_wizard_page, - online_consent_wizard_page, - programme_children_page, - programme_overview_page, - programme_sessions_page, - programmes_list_page, - reports_download_page, - reports_vaccinations_page, - review_school_move_page, - school_moves_page, - service_error_page, - sessions_children_page, - sessions_edit_page, - sessions_overview_page, - sessions_patient_page, - sessions_patient_session_activity_page, - sessions_psd_page, - sessions_record_vaccinations_page, - sessions_register_page, - sessions_search_page, - sessions_vaccination_wizard_page, - start_page, - team_page, - unmatched_consent_responses_page, - vaccination_record_page, - vaccines_page, -) from .playwright import ( base_url, basic_auth_credentials, @@ -90,86 +39,37 @@ ) __all__ = [ - "accessibility_helper", - "add_batch_page", "add_vaccine_batch", - "archive_batch_page", - "archive_consent_response_page", "authenticate_api", - "bad_request_page", "base_url", "basic_auth_credentials", "basic_auth_token", "browser_context_args", "browser_type", - "child_activity_log_page", - "child_archive_page", - "child_edit_page", - "child_record_page", "children", - "children_search_page", "clinics", - "consent_response_page", - "create_new_record_consent_response_page", - "dashboard_page", "delete_team_after_tests", - "download_school_moves_page", - "edit_batch_page", - "edit_vaccination_record_page", - "flipper_page", - "gillick_competence_page", "healthcare_assistant", "imms_base_url", - "import_records_wizard_page", - "imports_page", "log_in_as_medical_secretary", "log_in_as_nurse", "log_in_as_prescriber", - "log_in_page", - "log_out_page", - "match_consent_response_page", "medical_secretary", "nurse", - "nurse_consent_wizard_page", "onboarding", - "online_consent_wizard_page", "organisation", "prescriber", - "programme_children_page", - "programme_overview_page", - "programme_sessions_page", "programmes_enabled", - "programmes_list_page", - "reports_download_page", - "reports_vaccinations_page", "reset_before_each_module", - "review_school_move_page", "schedule_mmr_session_and_get_consent_url", "schedule_session_and_get_consent_url", - "school_moves_page", "schools", - "service_error_page", - "sessions_children_page", - "sessions_edit_page", - "sessions_overview_page", - "sessions_patient_page", - "sessions_patient_session_activity_page", - "sessions_psd_page", - "sessions_record_vaccinations_page", - "sessions_register_page", - "sessions_search_page", - "sessions_vaccination_wizard_page", "set_feature_flags", "setup_session_and_batches_with_fixed_child", - "start_page", "subteam", "superuser", "team", - "team_page", "test_data", - "unmatched_consent_responses_page", "upload_offline_vaccination", - "vaccination_record_page", - "vaccines_page", "year_groups", ] diff --git a/mavis/test/fixtures/helpers.py b/mavis/test/fixtures/helpers.py index 472040c91e7..d9b19f0f773 100644 --- a/mavis/test/fixtures/helpers.py +++ b/mavis/test/fixtures/helpers.py @@ -2,37 +2,51 @@ import re import pytest -from playwright.sync_api import Page -from mavis.test.accessibility import AccessibilityHelper from mavis.test.data import ClassFileMapping, TestData, VaccsFileMapping from mavis.test.models import ConsentOption, Programme, School, Vaccine +from mavis.test.pages import ( + AddBatchPage, + ChildRecordPage, + DashboardPage, + FlipperPage, + ImportRecordsWizardPage, + ImportsPage, + LogInPage, + ProgrammeChildrenPage, + ProgrammeOverviewPage, + ProgrammesListPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsSearchPage, + VaccinesPage, +) from mavis.test.utils import get_offset_date @pytest.fixture -def set_feature_flags(flipper_page): +def set_feature_flags(page): set_check_feature_flags = os.getenv("SET_FEATURE_FLAGS", "false").lower() == "true" if set_check_feature_flags: - flipper_page.navigate() - flipper_page.set_feature_flags() + FlipperPage(page).navigate() + FlipperPage(page).set_feature_flags() yield if set_check_feature_flags: - flipper_page.navigate() - flipper_page.set_feature_flags(check_only=True) + FlipperPage(page).navigate() + FlipperPage(page).set_feature_flags(check_only=True) @pytest.fixture -def add_vaccine_batch(add_batch_page, vaccines_page): +def add_vaccine_batch(page): def wrapper(vaccine: Vaccine, batch_name: str = "ABC123"): - vaccines_page.navigate() - vaccines_page.click_add_batch(vaccine) - add_batch_page.fill_name(batch_name) - add_batch_page.date.fill_expiry_date(get_offset_date(1)) - add_batch_page.confirm() + VaccinesPage(page).navigate() + VaccinesPage(page).click_add_batch(vaccine) + AddBatchPage(page).fill_name(batch_name) + AddBatchPage(page).date.fill_expiry_date(get_offset_date(1)) + AddBatchPage(page).confirm() return batch_name return wrapper @@ -43,26 +57,22 @@ def schedule_session_and_get_consent_url( set_feature_flags, nurse, team, - dashboard_page, - log_in_page, - sessions_edit_page, - sessions_search_page, - sessions_overview_page, + page, ): def wrapper(school: School, *programmes: Programme): - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group( + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( school, programmes[0].group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(7)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(7)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=7, skip_weekends=False ) - url = sessions_overview_page.get_online_consent_url(*programmes) - log_in_page.log_out() + url = SessionsOverviewPage(page).get_online_consent_url(*programmes) + LogInPage(page).log_out() yield url return wrapper @@ -73,27 +83,23 @@ def schedule_mmr_session_and_get_consent_url( set_feature_flags, nurse, team, - dashboard_page, - log_in_page, - sessions_edit_page, - sessions_search_page, - sessions_overview_page, + page, ): def wrapper(school: School, *programmes: Programme): try: - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group( + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( school, programmes[0].group ) - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_mmr_session() - url = sessions_overview_page.get_online_consent_url(*programmes) - log_in_page.log_out() + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_mmr_session() + url = SessionsOverviewPage(page).get_online_consent_url(*programmes) + LogInPage(page).log_out() yield url finally: - log_in_page.log_out() + LogInPage(page).log_out() return wrapper @@ -103,45 +109,37 @@ def log_in_as_medical_secretary( set_feature_flags, medical_secretary, team, - log_in_page, + page, ): - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(medical_secretary, team) + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(medical_secretary, team) yield - log_in_page.log_out() + LogInPage(page).log_out() @pytest.fixture -def log_in_as_nurse(set_feature_flags, nurse, team, log_in_page): - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) +def log_in_as_nurse(set_feature_flags, nurse, team, page): + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) yield - log_in_page.log_out() + LogInPage(page).log_out() @pytest.fixture -def log_in_as_prescriber(set_feature_flags, prescriber, team, log_in_page): - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(prescriber, team) +def log_in_as_prescriber(set_feature_flags, prescriber, team, page): + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(prescriber, team) yield - log_in_page.log_out() + LogInPage(page).log_out() @pytest.fixture def upload_offline_vaccination( log_in_as_nurse, schools, - dashboard_page, - import_records_wizard_page, - sessions_edit_page, - sessions_search_page, - sessions_overview_page, - programmes_list_page, - programme_children_page, - programme_overview_page, - child_record_page, + page, children, - imports_page, + test_data, ): def wrapper( programme: Programme, consent_option: ConsentOption = ConsentOption.INJECTION @@ -163,37 +161,41 @@ def wrapper( msg = "Update upload_offline_vaccination to handle programme" raise ValueError(msg) - dashboard_page.navigate() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, programme.group) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + DashboardPage(page).navigate() + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + school, programme.group + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( ClassFileMapping.FIXED_CHILD, child.year_group, programme.group, ) - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, programme) - session_id = sessions_overview_page.get_session_id_from_offline_excel() - sessions_overview_page.header.click_imports_header() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() - import_records_wizard_page.upload_and_verify_output( + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group(school, programme) + session_id = SessionsOverviewPage(page).get_session_id_from_offline_excel() + SessionsOverviewPage(page).header.click_imports_header() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage( + page, test_data + ).navigate_to_vaccination_records_import() + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( file_mapping=vaccs_file, session_id=session_id, programme_group=programme.group, ) - imports_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(programme) - programme_overview_page.tabs.click_children_tab() - programme_children_page.search_for_child(child) - programme_children_page.click_child(child) - child_record_page.click_vaccination_details(programme) + ImportsPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(programme) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).search_for_child(child) + ProgrammeChildrenPage(page).click_child(child) + ChildRecordPage(page).click_vaccination_details(school) yield return wrapper @@ -203,13 +205,9 @@ def wrapper( def setup_session_and_batches_with_fixed_child( add_vaccine_batch, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - import_records_wizard_page, - imports_page, children, - log_in_page, + page, + test_data, nurse, team, ): @@ -218,27 +216,27 @@ def _setup(programme_group): child = children[programme_group][0] try: - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) batch_names = { vaccine: add_vaccine_batch(vaccine, re.sub(r"\W+", "", vaccine) + "123") for vaccine in Vaccine if vaccine.programme.group == programme_group } - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group( + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( school, programme_group ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( ClassFileMapping.FIXED_CHILD, child.year_group, programme_group, ) return batch_names finally: - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() return _setup @@ -246,8 +244,3 @@ def _setup(programme_group): @pytest.fixture def test_data(organisation, schools, nurse, children, clinics, year_groups): return TestData(organisation, schools, nurse, children, clinics, year_groups) - - -@pytest.fixture -def accessibility_helper(page: Page) -> AccessibilityHelper: - return AccessibilityHelper(page) diff --git a/mavis/test/fixtures/pages.py b/mavis/test/fixtures/pages.py deleted file mode 100644 index 86d6f70eb63..00000000000 --- a/mavis/test/fixtures/pages.py +++ /dev/null @@ -1,299 +0,0 @@ -import pytest -from playwright.sync_api import Page - -from mavis.test.data import TestData -from mavis.test.pages import ( - AddBatchPage, - ArchiveBatchPage, - ArchiveConsentResponsePage, - ChildActivityLogPage, - ChildArchivePage, - ChildEditPage, - ChildRecordPage, - ChildrenSearchPage, - ConsentResponsePage, - CreateNewRecordConsentResponsePage, - DashboardPage, - DownloadSchoolMovesPage, - EditBatchPage, - EditVaccinationRecordPage, - FlipperPage, - GillickCompetencePage, - ImportRecordsWizardPage, - ImportsPage, - LogInPage, - LogOutPage, - MatchConsentResponsePage, - NurseConsentWizardPage, - OnlineConsentWizardPage, - ProgrammeChildrenPage, - ProgrammeOverviewPage, - ProgrammeSessionsPage, - ProgrammesListPage, - ReportsDownloadPage, - ReportsVaccinationsPage, - ReviewSchoolMovePage, - SchoolMovesPage, - SessionsChildrenPage, - SessionsEditPage, - SessionsOverviewPage, - SessionsPatientPage, - SessionsPatientSessionActivityPage, - SessionsPsdPage, - SessionsRecordVaccinationsPage, - SessionsRegisterPage, - SessionsSearchPage, - SessionsVaccinationWizardPage, - StartPage, - TeamPage, - UnmatchedConsentResponsesPage, - VaccinationRecordPage, - VaccinesPage, -) -from mavis.test.pages.error_pages import BadRequestPage, ServiceErrorPage - - -@pytest.fixture -def add_batch_page(page: Page) -> AddBatchPage: - return AddBatchPage(page) - - -@pytest.fixture -def archive_batch_page(page: Page) -> ArchiveBatchPage: - return ArchiveBatchPage(page) - - -@pytest.fixture -def archive_consent_response_page(page: Page) -> ArchiveConsentResponsePage: - return ArchiveConsentResponsePage(page) - - -@pytest.fixture -def child_activity_log_page(page: Page) -> ChildActivityLogPage: - return ChildActivityLogPage(page) - - -@pytest.fixture -def child_archive_page(page: Page) -> ChildArchivePage: - return ChildArchivePage(page) - - -@pytest.fixture -def child_record_page(page: Page) -> ChildRecordPage: - return ChildRecordPage(page) - - -@pytest.fixture -def child_edit_page(page: Page) -> ChildEditPage: - return ChildEditPage(page) - - -@pytest.fixture -def children_search_page(page: Page) -> ChildrenSearchPage: - return ChildrenSearchPage(page) - - -@pytest.fixture -def consent_response_page(page: Page) -> ConsentResponsePage: - return ConsentResponsePage(page) - - -@pytest.fixture -def create_new_record_consent_response_page( - page: Page, -) -> CreateNewRecordConsentResponsePage: - return CreateNewRecordConsentResponsePage(page) - - -@pytest.fixture -def dashboard_page(page: Page) -> DashboardPage: - return DashboardPage(page) - - -@pytest.fixture -def download_school_moves_page(page: Page) -> DownloadSchoolMovesPage: - return DownloadSchoolMovesPage(page) - - -@pytest.fixture -def edit_batch_page(page: Page) -> EditBatchPage: - return EditBatchPage(page) - - -@pytest.fixture -def edit_vaccination_record_page(page: Page) -> EditVaccinationRecordPage: - return EditVaccinationRecordPage(page) - - -@pytest.fixture -def flipper_page(page: Page) -> FlipperPage: - return FlipperPage(page) - - -@pytest.fixture -def gillick_competence_page(page: Page) -> GillickCompetencePage: - return GillickCompetencePage(page) - - -@pytest.fixture -def imports_page(page: Page) -> ImportsPage: - return ImportsPage(page) - - -@pytest.fixture -def import_records_wizard_page( - page: Page, test_data: TestData -) -> ImportRecordsWizardPage: - return ImportRecordsWizardPage(page, test_data) - - -@pytest.fixture -def log_in_page(page: Page) -> LogInPage: - return LogInPage(page) - - -@pytest.fixture -def match_consent_response_page(page: Page) -> MatchConsentResponsePage: - return MatchConsentResponsePage(page) - - -@pytest.fixture -def online_consent_wizard_page(page: Page) -> OnlineConsentWizardPage: - return OnlineConsentWizardPage(page) - - -@pytest.fixture -def programmes_list_page(page: Page) -> ProgrammesListPage: - return ProgrammesListPage(page) - - -@pytest.fixture -def programme_overview_page(page: Page) -> ProgrammeOverviewPage: - return ProgrammeOverviewPage(page) - - -@pytest.fixture -def programme_sessions_page(page: Page) -> ProgrammeSessionsPage: - return ProgrammeSessionsPage(page) - - -@pytest.fixture -def programme_children_page(page: Page) -> ProgrammeChildrenPage: - return ProgrammeChildrenPage(page) - - -@pytest.fixture -def reports_download_page(page: Page) -> ReportsDownloadPage: - return ReportsDownloadPage(page) - - -@pytest.fixture -def reports_vaccinations_page(page: Page) -> ReportsVaccinationsPage: - return ReportsVaccinationsPage(page) - - -@pytest.fixture -def review_school_move_page(page: Page) -> ReviewSchoolMovePage: - return ReviewSchoolMovePage(page) - - -@pytest.fixture -def school_moves_page(page: Page) -> SchoolMovesPage: - return SchoolMovesPage(page) - - -@pytest.fixture -def sessions_psd_page(page: Page) -> SessionsPsdPage: - return SessionsPsdPage(page) - - -@pytest.fixture -def sessions_search_page(page: Page) -> SessionsSearchPage: - return SessionsSearchPage(page) - - -@pytest.fixture -def sessions_overview_page(page: Page) -> SessionsOverviewPage: - return SessionsOverviewPage(page) - - -@pytest.fixture -def sessions_edit_page(page: Page) -> SessionsEditPage: - return SessionsEditPage(page) - - -@pytest.fixture -def sessions_children_page(page: Page) -> SessionsChildrenPage: - return SessionsChildrenPage(page) - - -@pytest.fixture -def sessions_register_page(page: Page) -> SessionsRegisterPage: - return SessionsRegisterPage(page) - - -@pytest.fixture -def sessions_record_vaccinations_page(page: Page) -> SessionsRecordVaccinationsPage: - return SessionsRecordVaccinationsPage(page) - - -@pytest.fixture -def sessions_patient_page(page: Page) -> SessionsPatientPage: - return SessionsPatientPage(page) - - -@pytest.fixture -def sessions_patient_session_activity_page( - page: Page, -) -> SessionsPatientSessionActivityPage: - return SessionsPatientSessionActivityPage(page) - - -@pytest.fixture -def sessions_vaccination_wizard_page(page: Page) -> SessionsVaccinationWizardPage: - return SessionsVaccinationWizardPage(page) - - -@pytest.fixture -def start_page(page: Page) -> StartPage: - return StartPage(page) - - -@pytest.fixture -def team_page(page: Page) -> TeamPage: - return TeamPage(page) - - -@pytest.fixture -def unmatched_consent_responses_page(page: Page) -> UnmatchedConsentResponsesPage: - return UnmatchedConsentResponsesPage(page) - - -@pytest.fixture -def vaccination_record_page(page: Page) -> VaccinationRecordPage: - return VaccinationRecordPage(page) - - -@pytest.fixture -def vaccines_page(page: Page) -> VaccinesPage: - return VaccinesPage(page) - - -@pytest.fixture -def nurse_consent_wizard_page(page: Page) -> NurseConsentWizardPage: - return NurseConsentWizardPage(page) - - -@pytest.fixture -def log_out_page(page: Page) -> LogOutPage: - return LogOutPage(page) - - -@pytest.fixture -def service_error_page(page: Page) -> ServiceErrorPage: - return ServiceErrorPage(page) - - -@pytest.fixture -def bad_request_page(page: Page) -> BadRequestPage: - return BadRequestPage(page) diff --git a/mavis/test/pages/children.py b/mavis/test/pages/children.py index 27f039b4c6b..432be9c2b48 100644 --- a/mavis/test/pages/children.py +++ b/mavis/test/pages/children.py @@ -30,7 +30,7 @@ def __init__(self, page: Page) -> None: ] ] - self.search_textbox = self.page.get_by_role("textbox", name="Search") + self.search_textbox = self.page.get_by_role("searchbox", name="Search") self.search_button = self.page.get_by_role("button", name="Search") self.advanced_filters_link = self.page.get_by_text("Advanced filters") self.archived_records_checkbox = self.page.get_by_role( diff --git a/mavis/test/pages/consent_responses.py b/mavis/test/pages/consent_responses.py index e845a88f6ba..63c210fc35b 100644 --- a/mavis/test/pages/consent_responses.py +++ b/mavis/test/pages/consent_responses.py @@ -102,7 +102,7 @@ def __init__(self, page: Page) -> None: self.page = page self.header = HeaderComponent(page) - self.search_textbox = page.get_by_role("textbox", name="Search") + self.search_textbox = page.get_by_role("searchbox", name="Search") self.search_button = page.get_by_role("button", name="Search") self.link_button = page.get_by_role("button", name="Link response with record") diff --git a/mavis/test/pages/import_records.py b/mavis/test/pages/import_records.py index c1fe65e5e4f..2344ad4ad82 100644 --- a/mavis/test/pages/import_records.py +++ b/mavis/test/pages/import_records.py @@ -1,5 +1,5 @@ import re -from datetime import timedelta +from datetime import datetime, timedelta from pathlib import Path from playwright.sync_api import Page, expect @@ -122,7 +122,7 @@ def is_preview_page_link_visible(self) -> bool: return True return False - def approve_preview_if_shown(self) -> None: + def approve_preview_if_shown(self, date_time: datetime) -> None: self.get_preview_page_link().click() expect(self.review_and_approve_tag).to_be_visible() self.approve_import_button.click() @@ -131,7 +131,7 @@ def approve_preview_if_shown(self) -> None: .locator("div") .filter(has_text="Import started") ).to_be_visible() - self.click_uploaded_file_datetime() + self.click_uploaded_file_datetime(date_time) self.wait_for_processed() def wait_for_processed(self) -> None: @@ -177,11 +177,11 @@ def upload_and_verify_output( _scenario_list = read_scenario_list_from_file(_input_file_path) self.set_input_file(_input_file_path) - self.record_upload_time() + upload_time = get_current_datetime() self.click_continue(_coverage=_scenario_list) if self.is_processing_in_background(): - self.click_uploaded_file_datetime() + self.click_uploaded_file_datetime(upload_time) self.page.wait_for_load_state() status_text = ( @@ -191,27 +191,26 @@ def upload_and_verify_output( ) reload_until_element_is_visible(self.page, status_text, seconds=60) if self.is_preview_page_link_visible(): - self.approve_preview_if_shown() + self.approve_preview_if_shown(upload_time) self.verify_upload_output(file_path=_output_file_path) return _input_file_path, _output_file_path - def record_upload_time(self) -> None: - self.upload_time = get_current_datetime() - @step("Click link with uploaded datetime") - def click_uploaded_file_datetime(self) -> None: + def click_uploaded_file_datetime(self, date_time: datetime) -> None: first_link = self.page.get_by_role( "link", - name=format_datetime_for_upload_link(self.upload_time), + name=format_datetime_for_upload_link(date_time), ) second_link = self.page.get_by_role( "link", name=format_datetime_for_upload_link( - self.upload_time + timedelta(minutes=1), + date_time + timedelta(minutes=1), ), ) + self.page.wait_for_load_state() + # This handles when an upload occurs across the minute tick over, for # example the file is uploaded at 10:00:59 but finishes at 10:01:01. if first_link.or_(second_link).first.is_visible(): diff --git a/mavis/test/pages/log_in.py b/mavis/test/pages/log_in.py index 5b3d4adfdbf..b775dc124bb 100644 --- a/mavis/test/pages/log_in.py +++ b/mavis/test/pages/log_in.py @@ -14,12 +14,12 @@ class LogInPage: Usage with organisation tracking: # Automatic org code extraction from team (recommended): - log_in_page.log_in_and_choose_team_if_necessary(user, team) + LogInPage(page).log_in_and_choose_team_if_necessary(user, team) # Manual org code setting: - log_in_page.set_organisation(onboarding.organisation) # or - log_in_page.set_organisation_code("ABC123") - log_in_page.log_in(user) + LogInPage(page).set_organisation(onboarding.organisation) # or + LogInPage(page).set_organisation_code("ABC123") + LogInPage(page).log_in(user) """ def __init__(self, page: Page) -> None: diff --git a/mavis/test/pages/programmes.py b/mavis/test/pages/programmes.py index 7fa7a3905cb..94c8fd5a735 100644 --- a/mavis/test/pages/programmes.py +++ b/mavis/test/pages/programmes.py @@ -189,7 +189,7 @@ def __init__(self, page: Page) -> None: self.header = HeaderComponent(page) self.import_child_records_link = page.get_by_text("Import child records") - self.search_textbox = page.get_by_role("textbox", name="Search") + self.search_textbox = page.get_by_role("searchbox", name="Search") self.search_button = page.get_by_role("button", name="Search") self.continue_button = page.get_by_role("button", name="Continue") self.use_duplicate_radio_button = page.get_by_role( diff --git a/mavis/test/pages/sessions.py b/mavis/test/pages/sessions.py index 6a4743487c7..e3dab2646ba 100644 --- a/mavis/test/pages/sessions.py +++ b/mavis/test/pages/sessions.py @@ -1,6 +1,6 @@ import re import time -from datetime import date, datetime +from datetime import date from pathlib import Path import pandas as pd @@ -37,7 +37,7 @@ def __init__( page: Page, ) -> None: self.page = page - self.search_textbox = self.page.get_by_role("textbox", name="Search") + self.search_textbox = self.page.get_by_role("searchbox", name="Search") self.search_button = self.page.get_by_role("button", name="Search") self.update_results_button = self.page.get_by_role( "button", @@ -296,7 +296,7 @@ def click_schedule_sessions(self) -> None: def click_edit_session(self) -> None: self.edit_session_link.click() - def get_online_consent_url(self, *programmes: list[Programme]) -> str: + def get_online_consent_url(self, *programmes: Programme) -> str: programme_names = [str(programme) for programme in programmes] link_text = f"View the {' and '.join(programme_names)} online consent form" return str(self.page.get_by_role("link", name=link_text).get_attribute("href")) @@ -367,7 +367,7 @@ def download_consent_form(self, programme: Programme) -> Path: return _file_path - def is_date_scheduled(self, date: datetime) -> bool: + def is_date_scheduled(self, date: date) -> bool: return self.page.get_by_text( get_formatted_date_for_session_dates(date) ).is_visible() diff --git a/mavis/test/utils.py b/mavis/test/utils.py index 1278a63e740..9f314235237 100644 --- a/mavis/test/utils.py +++ b/mavis/test/utils.py @@ -35,7 +35,7 @@ def get_current_datetime_compact() -> str: return get_current_datetime().strftime("%Y%m%d%H%M%S") -def get_formatted_date_for_session_dates(date: datetime) -> str: +def get_formatted_date_for_session_dates(date: date) -> str: try: # Linux (Github Action) return date.strftime(format="%-d %B %Y") diff --git a/tests/test_children.py b/tests/test_children.py index 5982c1922c3..1709366976a 100644 --- a/tests/test_children.py +++ b/tests/test_children.py @@ -1,8 +1,26 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.data import ClassFileMapping, CohortsFileMapping, VaccsFileMapping from mavis.test.models import Programme +from mavis.test.pages import ( + ChildActivityLogPage, + ChildArchivePage, + ChildEditPage, + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + ProgrammeChildrenPage, + ProgrammeOverviewPage, + ProgrammesListPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsSearchPage, + VaccinationRecordPage, +) from mavis.test.utils import expect_alert_text, get_offset_date pytestmark = pytest.mark.children @@ -11,31 +29,29 @@ @pytest.fixture def setup_children_session( log_in_as_nurse, + page, + test_data, schools, - dashboard_page, - sessions_edit_page, - sessions_overview_page, - sessions_search_page, - import_records_wizard_page, - imports_page, year_groups, ): def _setup(class_list_file): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( school, Programme.HPV.group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list(class_list_file, year_group) - imports_page.header.click_children_header() + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( + class_list_file, year_group + ) + ImportsPage(page).header.click_children_header() yield return _setup @@ -55,46 +71,45 @@ def setup_child_merge(setup_children_session): def setup_mav_853( log_in_as_nurse, schools, - dashboard_page, - import_records_wizard_page, - programmes_list_page, - programme_overview_page, - programme_children_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, + page, + test_data, year_groups, - imports_page, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV.group) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=0, skip_weekends=False) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + school, Programme.HPV.group + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=0, skip_weekends=False + ) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( ClassFileMapping.RANDOM_CHILD, year_group ) - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - session_id = sessions_overview_page.get_session_id_from_offline_excel() - sessions_overview_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() - import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - - imports_page.header.click_imports_header() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() - import_records_wizard_page.upload_and_verify_output( + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + session_id = SessionsOverviewPage(page).get_session_id_from_offline_excel() + SessionsOverviewPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.FIXED_CHILD + ) + + ImportsPage(page).header.click_imports_header() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_vaccination_records_import() + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( file_mapping=VaccsFileMapping.NOT_GIVEN, session_id=session_id, ) - imports_page.header.click_children_header() + ImportsPage(page).header.click_children_header() @issue("MAV-853") @@ -103,10 +118,7 @@ def test_patient_details_load_with_missing_vaccine_info( setup_mav_853, schools, children, - child_record_page, - child_activity_log_page, - vaccination_record_page, - children_search_page, + page, ): """ Test: Ensure patient details page loads for a child with missing vaccine info @@ -125,25 +137,23 @@ def test_patient_details_load_with_missing_vaccine_info( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) # Verify activity log - child_record_page.tabs.click_activity_log() - child_activity_log_page.expect_activity_log_header( + ChildRecordPage(page).tabs.click_activity_log() + ChildActivityLogPage(page).expect_activity_log_header( "Vaccinated with Gardasil 9", unique=True ) # Verify vaccination record - child_record_page.click_child_record() - child_record_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details("Outcome", "Vaccinated") + ChildRecordPage(page).click_child_record() + ChildRecordPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details("Outcome", "Vaccinated") @pytest.mark.bug def test_invalid_nhs_number_change_is_rejected( setup_fixed_child, - children_search_page, - child_record_page, - child_edit_page, + page, children, ): """ @@ -159,22 +169,20 @@ def test_invalid_nhs_number_change_is_rejected( """ child = children[Programme.HPV][0] - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_edit_child_record() - child_edit_page.click_change_nhs_no() - child_edit_page.fill_nhs_no_for_child(child, "9123456789") - child_edit_page.click_continue() - expect_alert_text(child_record_page.page, "Enter a valid NHS number") + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_edit_child_record() + ChildEditPage(page).click_change_nhs_no() + ChildEditPage(page).fill_nhs_no_for_child(child, "9123456789") + ChildEditPage(page).click_continue() + expect_alert_text(page, "Enter a valid NHS number") @issue("MAV-1839") @pytest.mark.children def test_merge_child_records_does_not_crash( setup_child_merge, - children_search_page, - child_record_page, - child_archive_page, + page, children, ): """ @@ -191,20 +199,18 @@ def test_merge_child_records_does_not_crash( """ child1 = children[Programme.HPV][0] child2 = children[Programme.HPV][1] - children_search_page.search_with_all_filters_for_child_name(str(child1)) - children_search_page.click_record_for_child(child1) - child_record_page.click_archive_child_record() - child_archive_page.click_its_a_duplicate(child2.nhs_number) - child_archive_page.click_archive_record() - expect_alert_text(child_record_page.page, "This record has been archived") + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child1)) + ChildrenSearchPage(page).click_record_for_child(child1) + ChildRecordPage(page).click_archive_child_record() + ChildArchivePage(page).click_its_a_duplicate(child2.nhs_number) + ChildArchivePage(page).click_archive_record() + expect_alert_text(page, "This record has been archived") @pytest.mark.accessibility def test_accessibility( setup_fixed_child, - children_search_page, - child_record_page, - accessibility_helper, + page, children, ): """ @@ -215,13 +221,13 @@ def test_accessibility( Verification: - No accessibility violations are found on the children page. """ - children_search_page.click_advanced_filters() - accessibility_helper.check_accessibility() + ChildrenSearchPage(page).click_advanced_filters() + AccessibilityHelper(page).check_accessibility() child = children[Programme.HPV][0] - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - accessibility_helper.check_accessibility() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + AccessibilityHelper(page).check_accessibility() - child_record_page.tabs.click_activity_log() - accessibility_helper.check_accessibility() + ChildRecordPage(page).tabs.click_activity_log() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_consent_responses.py b/tests/test_consent_responses.py index 3b255662f3b..d08a62ff116 100644 --- a/tests/test_consent_responses.py +++ b/tests/test_consent_responses.py @@ -1,9 +1,29 @@ import pytest from playwright.sync_api import expect +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.data import ClassFileMapping, CohortsFileMapping, pds from mavis.test.models import Programme +from mavis.test.pages import ( + ArchiveConsentResponsePage, + ChildActivityLogPage, + ChildRecordPage, + ChildrenSearchPage, + ConsentResponsePage, + CreateNewRecordConsentResponsePage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + MatchConsentResponsePage, + OnlineConsentWizardPage, + ProgrammeChildrenPage, + ProgrammeOverviewPage, + ProgrammesListPage, + ServiceErrorPage, + StartPage, + UnmatchedConsentResponsesPage, +) pytestmark = pytest.mark.consent_responses @@ -23,8 +43,6 @@ def online_consent_url(schedule_session_and_get_consent_url, schools): @pytest.fixture def give_online_consent( page, - start_page, - online_consent_wizard_page, online_consent_url, children, schools, @@ -33,19 +51,19 @@ def give_online_consent( schools = schools[Programme.HPV] page.goto(online_consent_url) - start_page.start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_hpv_vaccination() - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions(4, yes_to_health_questions=False) - online_consent_wizard_page.click_confirm() + StartPage(page).start() + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_hpv_vaccination() + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + 4, yes_to_health_questions=False + ) + OnlineConsentWizardPage(page).click_confirm() @pytest.fixture def give_online_consent_pds_child( page, - start_page, - online_consent_wizard_page, online_consent_url, pds_child, schools, @@ -54,26 +72,26 @@ def give_online_consent_pds_child( schools = schools[Programme.HPV] page.goto(online_consent_url) - start_page.start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_hpv_vaccination() - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions(4, yes_to_health_questions=False) - online_consent_wizard_page.click_confirm() + StartPage(page).start() + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_hpv_vaccination() + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + 4, yes_to_health_questions=False + ) + OnlineConsentWizardPage(page).click_confirm() @pytest.fixture -def go_to_unmatched_consent_responses(log_in_as_nurse, dashboard_page): - dashboard_page.click_unmatched_consent_responses() +def go_to_unmatched_consent_responses(log_in_as_nurse, page): + DashboardPage(page).click_unmatched_consent_responses() def test_archive_unmatched_consent_response_removes_from_list( give_online_consent, go_to_unmatched_consent_responses, - archive_consent_response_page, + page, children, - consent_response_page, - unmatched_consent_responses_page, ): """ Test: Archive an unmatched consent response and verify it is removed from the list. @@ -85,31 +103,21 @@ def test_archive_unmatched_consent_response_removes_from_list( - The consent response for the child is no longer visible in the unmatched list. """ child = children[Programme.HPV][0] - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) - consent_response_page.click_archive() - archive_consent_response_page.archive(notes="Some notes.") + ConsentResponsePage(page).click_archive() + ArchiveConsentResponsePage(page).archive(notes="Some notes.") - expect(unmatched_consent_responses_page.archived_alert).to_be_visible() - unmatched_consent_responses_page.check_response_for_child_not_visible(child) + expect(UnmatchedConsentResponsesPage(page).archived_alert).to_be_visible() + UnmatchedConsentResponsesPage(page).check_response_for_child_not_visible(child) def test_match_unmatched_consent_response_and_verify_activity_log( give_online_consent, log_in_as_nurse, children, - children_search_page, - child_record_page, - child_activity_log_page, - consent_response_page, - dashboard_page, - match_consent_response_page, - programmes_list_page, - programme_overview_page, - programme_children_page, - unmatched_consent_responses_page, - import_records_wizard_page, - imports_page, + page, + test_data, ): """ Test: Match an unmatched consent response to a child and verify activity log. @@ -126,38 +134,35 @@ def test_match_unmatched_consent_response_and_verify_activity_log( """ child = children[Programme.HPV][0] - dashboard_page.click_programmes() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() - import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - imports_page.header.click_consent_responses_header() + DashboardPage(page).click_programmes() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.FIXED_CHILD + ) + ImportsPage(page).header.click_consent_responses_header() - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) - consent_response_page.click_match() - match_consent_response_page.match(child) + ConsentResponsePage(page).click_match() + MatchConsentResponsePage(page).match(child) - expect(unmatched_consent_responses_page.matched_alert).to_be_visible() - unmatched_consent_responses_page.check_response_for_child_not_visible(child) + expect(UnmatchedConsentResponsesPage(page).matched_alert).to_be_visible() + UnmatchedConsentResponsesPage(page).check_response_for_child_not_visible(child) - unmatched_consent_responses_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.tabs.click_activity_log() - child_activity_log_page.verify_activity_log_for_created_or_matched_child() + UnmatchedConsentResponsesPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).tabs.click_activity_log() + ChildActivityLogPage(page).verify_activity_log_for_created_or_matched_child() def test_create_child_record_from_consent_with_nhs_number( give_online_consent_pds_child, go_to_unmatched_consent_responses, pds_child, - children_search_page, - child_record_page, - child_activity_log_page, - consent_response_page, - create_new_record_consent_response_page, - unmatched_consent_responses_page, + page, ): """ Test: Create a new child record from an unmatched consent response with NHS number. @@ -173,32 +178,26 @@ def test_create_child_record_from_consent_with_nhs_number( """ child = pds_child - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) - consent_response_page.click_create_new_record() - create_new_record_consent_response_page.create_new_record() + ConsentResponsePage(page).click_create_new_record() + CreateNewRecordConsentResponsePage(page).create_new_record() - expect(unmatched_consent_responses_page.created_alert).to_be_visible() - unmatched_consent_responses_page.check_response_for_child_not_visible(child) + expect(UnmatchedConsentResponsesPage(page).created_alert).to_be_visible() + UnmatchedConsentResponsesPage(page).check_response_for_child_not_visible(child) - unmatched_consent_responses_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.tabs.click_activity_log() - child_activity_log_page.verify_activity_log_for_created_or_matched_child() + UnmatchedConsentResponsesPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).tabs.click_activity_log() + ChildActivityLogPage(page).verify_activity_log_for_created_or_matched_child() def test_create_child_record_from_consent_without_nhs_number( give_online_consent, go_to_unmatched_consent_responses, children, - children_search_page, - child_record_page, - child_activity_log_page, - consent_response_page, - create_new_record_consent_response_page, - dashboard_page, - unmatched_consent_responses_page, + page, ): """ Test: Create a new child record from an unmatched consent response @@ -214,36 +213,28 @@ def test_create_child_record_from_consent_without_nhs_number( - Activity log for the child shows the creation event. """ child = children[Programme.HPV][0] - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) - consent_response_page.click_create_new_record() - create_new_record_consent_response_page.create_new_record() + ConsentResponsePage(page).click_create_new_record() + CreateNewRecordConsentResponsePage(page).create_new_record() - expect(unmatched_consent_responses_page.created_alert).to_be_visible() - unmatched_consent_responses_page.check_response_for_child_not_visible(child) + expect(UnmatchedConsentResponsesPage(page).created_alert).to_be_visible() + UnmatchedConsentResponsesPage(page).check_response_for_child_not_visible(child) - unmatched_consent_responses_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.tabs.click_activity_log() - child_activity_log_page.verify_activity_log_for_created_or_matched_child() + UnmatchedConsentResponsesPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).tabs.click_activity_log() + ChildActivityLogPage(page).verify_activity_log_for_created_or_matched_child() @pytest.mark.accessibility def test_accessibility( give_online_consent, log_in_as_nurse, - accessibility_helper, children, - dashboard_page, - programmes_list_page, - programme_overview_page, - programme_children_page, - import_records_wizard_page, - match_consent_response_page, - consent_response_page, - unmatched_consent_responses_page, - imports_page, + page, + test_data, ): """ Test: Check accessibility of consent response pages. @@ -255,23 +246,25 @@ def test_accessibility( """ child = children[Programme.HPV][0] - dashboard_page.click_programmes() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() - import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) + DashboardPage(page).click_programmes() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.FIXED_CHILD + ) - imports_page.header.click_consent_responses_header() - accessibility_helper.check_accessibility() + ImportsPage(page).header.click_consent_responses_header() + AccessibilityHelper(page).check_accessibility() - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) - accessibility_helper.check_accessibility() + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) + AccessibilityHelper(page).check_accessibility() - consent_response_page.click_match() - accessibility_helper.check_accessibility() + ConsentResponsePage(page).click_match() + AccessibilityHelper(page).check_accessibility() - match_consent_response_page.search_for_child_with_all_filters(child) - accessibility_helper.check_accessibility() + MatchConsentResponsePage(page).search_for_child_with_all_filters(child) + AccessibilityHelper(page).check_accessibility() @issue("MAV-2681") @@ -280,16 +273,8 @@ def test_match_consent_with_vaccination_record_no_service_error( log_in_as_nurse, upload_offline_vaccination, children, - consent_response_page, - dashboard_page, - match_consent_response_page, - programmes_list_page, - programme_overview_page, - programme_children_page, - import_records_wizard_page, - imports_page, - unmatched_consent_responses_page, - service_error_page, + page, + test_data, ): """ Test: Submit a consent form that won't match automatically, find a patient @@ -312,11 +297,13 @@ def test_match_consent_with_vaccination_record_no_service_error( child_with_consent = children[Programme.HPV][0] # Step 2: Import a class list to create searchable child records for both children - dashboard_page.click_programmes() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() - import_records_wizard_page.import_class_list(ClassFileMapping.TWO_FIXED_CHILDREN) + DashboardPage(page).click_programmes() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() + ImportRecordsWizardPage(page, test_data).import_class_list( + ClassFileMapping.TWO_FIXED_CHILDREN + ) # Step 3: Import a vaccination record for the different child to create a # patient with vaccination history @@ -324,22 +311,22 @@ def test_match_consent_with_vaccination_record_no_service_error( child_with_vaccination = children[Programme.HPV][1] # Navigate back to unmatched consent responses - imports_page.header.click_consent_responses_header() + ImportsPage(page).header.click_consent_responses_header() # Step 4: Navigate to unmatched consent responses and attempt to search for # the patient who has vaccination record (this tests the edge case) - unmatched_consent_responses_page.click_parent_on_consent_record_for_child( + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child( child_with_consent ) - consent_response_page.click_match() + ConsentResponsePage(page).click_match() # Verify no service error when searching for different child with vaccination - expect(service_error_page.page_heading).not_to_be_visible() + expect(ServiceErrorPage(page).page_heading).not_to_be_visible() # Search for child who has vaccination record - should not cause service error - match_consent_response_page.search_for_child_with_all_filters( + MatchConsentResponsePage(page).search_for_child_with_all_filters( child_with_vaccination ) # Final verification that no error pages appeared during the search process - expect(service_error_page.page_heading).not_to_be_visible() + expect(ServiceErrorPage(page).page_heading).not_to_be_visible() diff --git a/tests/test_e2e_doubles.py b/tests/test_e2e_doubles.py index 586c0f3aa1d..fa668fbf87d 100644 --- a/tests/test_e2e_doubles.py +++ b/tests/test_e2e_doubles.py @@ -1,6 +1,18 @@ import pytest from mavis.test.models import Programme, VaccinationRecord, Vaccine +from mavis.test.pages import ( + DashboardPage, + LogInPage, + OnlineConsentWizardPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + StartPage, +) pytestmark = pytest.mark.e2e @@ -22,18 +34,9 @@ def setup_session_for_doubles(setup_session_and_batches_with_fixed_child): def test_recording_doubles_vaccination_e2e( doubles_consent_url, setup_session_for_doubles, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_record_vaccinations_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, ): @@ -56,52 +59,52 @@ def test_recording_doubles_vaccination_e2e( menquadfi_batch_name = setup_session_for_doubles[Vaccine.MENQUADFI] revaxis_batch_name = setup_session_for_doubles[Vaccine.REVAXIS] - number_of_health_questions = ( - online_consent_wizard_page.get_number_of_health_questions_for_programmes( - [Programme.MENACWY, Programme.TD_IPV], - ) + number_of_health_questions = OnlineConsentWizardPage( + page + ).get_number_of_health_questions_for_programmes( + [Programme.MENACWY, Programme.TD_IPV], ) - online_consent_wizard_page.go_to_url(doubles_consent_url) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(doubles_consent_url) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_doubles_vaccinations( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_doubles_vaccinations( Programme.MENACWY, Programme.TD_IPV, ) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.MENACWY, Programme.TD_IPV], yes_to_health_questions=False, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], "doubles") - sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group(schools[0], "doubles") + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.MENACWY, menquadfi_batch_name ) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) vaccination_record = VaccinationRecord(child, Programme.TD_IPV, revaxis_batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() diff --git a/tests/test_e2e_flu.py b/tests/test_e2e_flu.py index 4b10b3a1002..a2a63ba8cb8 100644 --- a/tests/test_e2e_flu.py +++ b/tests/test_e2e_flu.py @@ -2,6 +2,22 @@ from mavis.test.annotations import issue from mavis.test.models import ConsentOption, Programme, VaccinationRecord, Vaccine +from mavis.test.pages import ( + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + EditVaccinationRecordPage, + LogInPage, + OnlineConsentWizardPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + StartPage, + VaccinationRecordPage, +) pytestmark = pytest.mark.e2e @@ -31,25 +47,12 @@ def setup_session_for_flu(setup_session_and_batches_with_fixed_child): def test_recording_flu_vaccination_e2e( flu_consent_url, setup_session_for_flu, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - children_search_page, - child_record_page, - vaccination_record_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, consent_option, - edit_vaccination_record_page, ): """ Test: End-to-end test for recording a flu vaccination for a child. @@ -74,52 +77,56 @@ def test_recording_flu_vaccination_e2e( else batch_names[Vaccine.FLUENZ] ) - online_consent_wizard_page.go_to_url(flu_consent_url) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(flu_consent_url) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_flu_vaccination(consent_option=consent_option) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_flu_vaccination( + consent_option=consent_option + ) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( consent_option ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, consent_option=consent_option, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.FLU) - sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.FLU + ) + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, batch_name, consent_option ) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) # MAV-1831 - sessions_patient_page.header.click_children_header() - children_search_page.search_for_a_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_vaccination_details(schools[0]) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.expect_text_to_not_be_visible( + SessionsPatientPage(page).header.click_children_header() + ChildrenSearchPage(page).search_for_a_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_vaccination_details(schools[0]) + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).expect_text_to_not_be_visible( "Incorrect vaccine given" ) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() diff --git a/tests/test_e2e_hpv.py b/tests/test_e2e_hpv.py index d0683bdaf76..15e6acb3568 100644 --- a/tests/test_e2e_hpv.py +++ b/tests/test_e2e_hpv.py @@ -1,6 +1,18 @@ import pytest from mavis.test.models import Programme, VaccinationRecord, Vaccine +from mavis.test.pages import ( + DashboardPage, + LogInPage, + OnlineConsentWizardPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + StartPage, +) pytestmark = pytest.mark.e2e @@ -20,18 +32,9 @@ def setup_session_for_hpv(setup_session_and_batches_with_fixed_child): def test_recording_hpv_vaccination_e2e( hpv_consent_url, setup_session_for_hpv, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, ): @@ -53,37 +56,39 @@ def test_recording_hpv_vaccination_e2e( gardasil_9_batch_name = setup_session_for_hpv[Vaccine.GARDASIL_9] number_of_health_questions = len(Programme.health_questions(Programme.HPV)) - online_consent_wizard_page.go_to_url(hpv_consent_url) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(hpv_consent_url) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_hpv_vaccination() - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_hpv_vaccination() + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.HPV], yes_to_health_questions=False, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.HPV) - sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.HPV + ) + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.HPV, gardasil_9_batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() diff --git a/tests/test_e2e_mmr.py b/tests/test_e2e_mmr.py index f785eddcc56..7de2234ffca 100644 --- a/tests/test_e2e_mmr.py +++ b/tests/test_e2e_mmr.py @@ -1,6 +1,19 @@ import pytest from mavis.test.models import ConsentOption, Programme, VaccinationRecord, Vaccine +from mavis.test.pages import ( + DashboardPage, + LogInPage, + OnlineConsentWizardPage, + SessionsChildrenPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + StartPage, +) pytestmark = pytest.mark.e2e @@ -21,19 +34,9 @@ def setup_session_for_mmr(setup_session_and_batches_with_fixed_child): def test_recording_mmr_vaccination_e2e_with_triage( url_with_mmr_session_scheduled, setup_session_for_mmr, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_children_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, ): @@ -57,67 +60,62 @@ def test_recording_mmr_vaccination_e2e_with_triage( Programme.health_questions(Programme.MMR, ConsentOption.MMR_EITHER) ) - online_consent_wizard_page.go_to_url(url_with_mmr_session_scheduled) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(url_with_mmr_session_scheduled) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_mmr_vaccination(ConsentOption.MMR_EITHER) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_mmr_vaccination(ConsentOption.MMR_EITHER) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=True, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.MMR], yes_to_health_questions=True, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() # Triage step added for MMR - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.MMR) - sessions_patient_page.triage_mmr_patient(ConsentOption.MMR_EITHER) - dashboard_page.navigate() - dashboard_page.click_sessions() - - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_set_session_in_progress_for_today() - - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.MMR) + SessionsPatientPage(page).triage_mmr_patient(ConsentOption.MMR_EITHER) + DashboardPage(page).navigate() + DashboardPage(page).click_sessions() + + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.MMR, mmr_batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() def test_verify_child_cannot_be_vaccinated_twice_for_mmr_on_same_day( url_with_mmr_session_scheduled, setup_session_for_mmr, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_record_vaccinations_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, ): @@ -143,69 +141,63 @@ def test_verify_child_cannot_be_vaccinated_twice_for_mmr_on_same_day( Programme.health_questions(Programme.MMR, ConsentOption.MMR_WITHOUT_GELATINE) ) - online_consent_wizard_page.go_to_url(url_with_mmr_session_scheduled) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(url_with_mmr_session_scheduled) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_mmr_vaccination( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_mmr_vaccination( ConsentOption.MMR_WITHOUT_GELATINE ) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.MMR], yes_to_health_questions=False, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() # Dose 1 flow - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.MMR, mmr_batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) # Attempt to record second dose on the same day - sessions_patient_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_for_child_that_should_not_exist( + SessionsPatientPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_for_child_that_should_not_exist( child ) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() def test_recording_mmr_vaccination_e2e_with_imported_dose_one( url_with_mmr_session_scheduled, setup_session_for_mmr, - online_consent_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_children_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - start_page, + page, schools, children, - dashboard_page, - log_in_page, nurse, team, upload_offline_vaccination, @@ -234,48 +226,52 @@ def test_recording_mmr_vaccination_e2e_with_imported_dose_one( # Import vaccination file with MMR dose 1 list(upload_offline_vaccination(Programme.MMR)) - log_in_page.log_out() + LogInPage(page).log_out() # Proceed with consent and vaccination process - online_consent_wizard_page.go_to_url(url_with_mmr_session_scheduled) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(url_with_mmr_session_scheduled) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_mmr_vaccination(ConsentOption.MMR_EITHER) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_mmr_vaccination(ConsentOption.MMR_EITHER) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=True, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.MMR], yes_to_health_questions=True, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.click_sessions() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + DashboardPage(page).click_sessions() # Triage step added for MMR - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.MMR) - sessions_patient_page.triage_mmr_patient(ConsentOption.MMR_EITHER) - sessions_patient_page.header.click_sessions_header() - - sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.MMR) + SessionsPatientPage(page).triage_mmr_patient(ConsentOption.MMR_EITHER) + SessionsPatientPage(page).header.click_sessions_header() + + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.MMR + ) + SessionsOverviewPage(page).click_set_session_in_progress_for_today() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.MMR, mmr_batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) - dashboard_page.navigate() - log_in_page.log_out() + DashboardPage(page).navigate() + LogInPage(page).log_out() diff --git a/tests/test_imms_api_flu.py b/tests/test_imms_api_flu.py index 548f0de35c5..9294aee69e7 100644 --- a/tests/test_imms_api_flu.py +++ b/tests/test_imms_api_flu.py @@ -7,6 +7,11 @@ Programme, Vaccine, ) +from mavis.test.pages import ( + EditVaccinationRecordPage, + SessionsPatientPage, + VaccinationRecordPage, +) from mavis.test.utils import get_current_datetime, random_datetime_earlier_today pytestmark = pytest.mark.imms_api @@ -32,9 +37,7 @@ def test_create_edit_delete_injected_flu_vaccination_and_verify_imms_api( schools, children, imms_api_helper, - sessions_patient_page, - vaccination_record_page, - edit_vaccination_record_page, + page, ): """ Test: Create, edit, and delete an injected flu vaccination record and verify changes @@ -69,16 +72,16 @@ def test_create_edit_delete_injected_flu_vaccination_and_verify_imms_api( ) # Step 4: Edit delivery site to RIGHT_ARM_LOWER - vaccination_record_page.page.reload() - vaccination_record_page.expect_vaccination_details( + VaccinationRecordPage(page).page.reload() + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Synced" ) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_site() - edit_vaccination_record_page.click_delivery_site(DeliverySite.RIGHT_ARM_LOWER) - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_site() + EditVaccinationRecordPage(page).click_delivery_site(DeliverySite.RIGHT_ARM_LOWER) + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() # Step 5: Verify update in IMMS API imms_api_helper.check_record_in_imms_api( @@ -90,21 +93,21 @@ def test_create_edit_delete_injected_flu_vaccination_and_verify_imms_api( ) # Step 6: Edit outcome to refused - sessions_patient_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details( + SessionsPatientPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Synced" ) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_outcome() - edit_vaccination_record_page.click_they_refused_it() - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_outcome() + EditVaccinationRecordPage(page).click_they_refused_it() + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() # Step 7: Verify deletion in IMMS API imms_api_helper.check_record_is_not_in_imms_api(Vaccine.SEQUIRUS, child) - sessions_patient_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details( + SessionsPatientPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Not synced" ) @@ -113,9 +116,7 @@ def test_create_edit_delete_nasal_flu_vaccination_and_verify_imms_api( upload_offline_vaccination_nasal_flu, schools, imms_api_helper, - sessions_patient_page, - vaccination_record_page, - edit_vaccination_record_page, + page, children, ): """ @@ -151,17 +152,17 @@ def test_create_edit_delete_nasal_flu_vaccination_and_verify_imms_api( ) # Step 4: Edit delivery time to an earlier time today - vaccination_record_page.page.reload() - vaccination_record_page.expect_vaccination_details( + VaccinationRecordPage(page).page.reload() + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Synced" ) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_time() + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_time() new_vaccination_time = random_datetime_earlier_today(vaccination_time) - edit_vaccination_record_page.change_time_of_delivery(new_vaccination_time) - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() + EditVaccinationRecordPage(page).change_time_of_delivery(new_vaccination_time) + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() # Step 5: Verify update in IMMS API imms_api_helper.check_record_in_imms_api( @@ -173,20 +174,20 @@ def test_create_edit_delete_nasal_flu_vaccination_and_verify_imms_api( ) # Step 6: Edit outcome to refused - sessions_patient_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details( + SessionsPatientPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Synced" ) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_outcome() - edit_vaccination_record_page.click_they_refused_it() - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_outcome() + EditVaccinationRecordPage(page).click_they_refused_it() + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() # Step 7: Verify deletion in IMMS API imms_api_helper.check_record_is_not_in_imms_api(Vaccine.FLUENZ, child) - sessions_patient_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details( + SessionsPatientPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details( "Synced with NHS England?", "Not synced" ) diff --git a/tests/test_import_child_lists.py b/tests/test_import_child_lists.py index f6d23fc2572..41bc4f9c4dd 100644 --- a/tests/test_import_child_lists.py +++ b/tests/test_import_child_lists.py @@ -1,20 +1,31 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.data import ChildFileMapping +from mavis.test.pages import ( + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, +) @pytest.fixture def setup_child_import( - log_in_as_nurse, dashboard_page, imports_page, import_records_wizard_page + log_in_as_nurse, + page, + test_data, ): - dashboard_page.click_imports() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_child_record_import() + DashboardPage(page).click_imports() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_child_record_import() @pytest.mark.childlist def test_child_list_file_upload_valid_data( - setup_child_import, import_records_wizard_page + setup_child_import, + page, + test_data, ): """ Test: Upload a valid child list file and verify successful import. @@ -27,12 +38,16 @@ def test_child_list_file_upload_valid_data( AllValidValues, Homeschooled, UnknownSchool, YearGroupEmpty, UnicodeApostrophe1, UnicodeApostrophe2, UnicodeApostrophe3, DuplicateEmail """ - import_records_wizard_page.upload_and_verify_output(ChildFileMapping.POSITIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ChildFileMapping.POSITIVE + ) @pytest.mark.childlist def test_child_list_file_upload_invalid_data( - setup_child_import, import_records_wizard_page + setup_child_import, + page, + test_data, ): """ Test: Upload an invalid child list file and verify error handling. @@ -46,13 +61,16 @@ def test_child_list_file_upload_invalid_data( InvalidPostCode, InvalidParent1Email, InvalidParent2Email, InvalidYearGroup, SpaceInDOB, InvalidFirstName, InvalidLastName, InvalidParent1Name,InvalidParent2Name """ - import_records_wizard_page.upload_and_verify_output(ChildFileMapping.NEGATIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ChildFileMapping.NEGATIVE + ) @pytest.mark.childlist def test_child_list_file_upload_invalid_structure( setup_child_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a child list file with invalid structure and verify error handling. @@ -62,14 +80,16 @@ def test_child_list_file_upload_invalid_structure( Verification: - Output indicates structural errors. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( ChildFileMapping.INVALID_STRUCTURE ) @pytest.mark.childlist def test_child_list_file_upload_header_only( - setup_child_import, import_records_wizard_page + setup_child_import, + page, + test_data, ): """ Test: Upload a child list file with only headers and verify no records are imported. @@ -79,12 +99,16 @@ def test_child_list_file_upload_header_only( Verification: - Output indicates no records imported. """ - import_records_wizard_page.upload_and_verify_output(ChildFileMapping.HEADER_ONLY) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ChildFileMapping.HEADER_ONLY + ) @pytest.mark.childlist def test_child_list_file_upload_empty_file( - setup_child_import, import_records_wizard_page + setup_child_import, + page, + test_data, ): """ Test: Upload an empty child list file and verify error handling. @@ -94,16 +118,17 @@ def test_child_list_file_upload_empty_file( Verification: - Output indicates error or no records imported. """ - import_records_wizard_page.upload_and_verify_output(ChildFileMapping.EMPTY_FILE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ChildFileMapping.EMPTY_FILE + ) @pytest.mark.childlist @pytest.mark.bug def test_child_list_file_upload_whitespace_normalization( setup_child_import, - import_records_wizard_page, - children_search_page, - imports_page, + page, + test_data, ): """ Test: Upload a child list file with extra whitespace and verify normalization. @@ -114,11 +139,11 @@ def test_child_list_file_upload_whitespace_normalization( Verification: - Imported list matches expected normalized data. """ - input_file, _ = import_records_wizard_page.upload_and_verify_output( + input_file, _ = ImportRecordsWizardPage(page, test_data).upload_and_verify_output( ChildFileMapping.WHITESPACE, ) - imports_page.header.click_children_header() - children_search_page.verify_list_has_been_uploaded( + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).verify_list_has_been_uploaded( input_file, is_vaccinations=False ) @@ -126,10 +151,8 @@ def test_child_list_file_upload_whitespace_normalization( @pytest.mark.accessibility def test_accessibility( log_in_as_nurse, - accessibility_helper, - dashboard_page, - imports_page, - import_records_wizard_page, + page, + test_data, ): """ Test: Verify that the import records page passes accessibility checks. @@ -139,15 +162,17 @@ def test_accessibility( Verification: - No accessibility violations are found on the import records page. """ - dashboard_page.click_imports() - accessibility_helper.check_accessibility() + DashboardPage(page).click_imports() + AccessibilityHelper(page).check_accessibility() - imports_page.click_upload_records() - accessibility_helper.check_accessibility() + ImportsPage(page).click_upload_records() + AccessibilityHelper(page).check_accessibility() - import_records_wizard_page.select_child_records() - import_records_wizard_page.click_continue() - accessibility_helper.check_accessibility() + ImportRecordsWizardPage(page, test_data).select_child_records() + ImportRecordsWizardPage(page, test_data).click_continue() + AccessibilityHelper(page).check_accessibility() - import_records_wizard_page.upload_and_verify_output(ChildFileMapping.POSITIVE) - accessibility_helper.check_accessibility() + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ChildFileMapping.POSITIVE + ) + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_import_class_lists.py b/tests/test_import_class_lists.py index 71c40cf48f0..7c44f231c95 100644 --- a/tests/test_import_class_lists.py +++ b/tests/test_import_class_lists.py @@ -2,6 +2,15 @@ from mavis.test.data import ClassFileMapping from mavis.test.models import Programme +from mavis.test.pages import ( + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsSearchPage, +) from mavis.test.utils import get_offset_date @@ -9,25 +18,23 @@ def setup_class_list_import( log_in_as_nurse, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - imports_page, - import_records_wizard_page, + page, + test_data, year_groups, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - if not sessions_overview_page.is_date_scheduled(get_offset_date(7)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=7, skip_weekends=False) - - sessions_overview_page.header.click_imports_header() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_class_list_record_import( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(7)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=7, skip_weekends=False + ) + + SessionsOverviewPage(page).header.click_imports_header() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_class_list_record_import( str(school), year_group ) @@ -35,7 +42,8 @@ def setup_class_list_import( @pytest.mark.classlist def test_class_list_file_upload_valid_data( setup_class_list_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a valid class list file and verify successful import. @@ -48,13 +56,16 @@ def test_class_list_file_upload_valid_data( AllValidValues, YearGroupOverride, SameYearGroup, EmptyPostCode, EmptyYearGroup, UnicodeApostrophe1, UnicodeApostrophe2, UnicodeApostrophe3, DuplicateEmail """ - import_records_wizard_page.upload_and_verify_output(ClassFileMapping.POSITIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ClassFileMapping.POSITIVE + ) @pytest.mark.classlist def test_class_list_file_upload_invalid_data( setup_class_list_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload an invalid class list file and verify error handling. @@ -69,13 +80,16 @@ def test_class_list_file_upload_invalid_data( InvalidLastName, InvalidPrefFirstName, InvalidPrefLastName, InvalidParent1Name, InvalidParent2Name """ - import_records_wizard_page.upload_and_verify_output(ClassFileMapping.NEGATIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ClassFileMapping.NEGATIVE + ) @pytest.mark.classlist def test_class_list_file_upload_invalid_structure( setup_class_list_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a class list file with invalid structure and verify error handling. @@ -85,7 +99,7 @@ def test_class_list_file_upload_invalid_structure( Verification: - Output indicates structural errors. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( ClassFileMapping.INVALID_STRUCTURE ) @@ -93,7 +107,8 @@ def test_class_list_file_upload_invalid_structure( @pytest.mark.classlist def test_class_list_file_upload_header_only( setup_class_list_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a class list file with only headers and verify no @@ -104,13 +119,16 @@ def test_class_list_file_upload_header_only( Verification: - Output indicates no records imported. """ - import_records_wizard_page.upload_and_verify_output(ClassFileMapping.HEADER_ONLY) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ClassFileMapping.HEADER_ONLY + ) @pytest.mark.classlist def test_class_list_file_upload_empty_file( setup_class_list_import, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload an empty class list file and verify error handling. @@ -120,14 +138,17 @@ def test_class_list_file_upload_empty_file( Verification: - Output indicates error or no records imported. """ - import_records_wizard_page.upload_and_verify_output(ClassFileMapping.EMPTY_FILE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + ClassFileMapping.EMPTY_FILE + ) @pytest.mark.classlist def test_class_list_file_upload_wrong_year_group( setup_class_list_import, schools, - import_records_wizard_page, + page, + test_data, year_groups, ): """ @@ -138,7 +159,7 @@ def test_class_list_file_upload_wrong_year_group( Verification: - Output indicates year group mismatch or error. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( ClassFileMapping.WRONG_YEAR_GROUP ) @@ -147,9 +168,8 @@ def test_class_list_file_upload_wrong_year_group( @pytest.mark.bug def test_class_list_file_upload_whitespace_normalization( setup_class_list_import, - import_records_wizard_page, - children_search_page, - imports_page, + page, + test_data, ): """ Test: Upload a class list file with extra whitespace and verify normalization. @@ -160,10 +180,10 @@ def test_class_list_file_upload_whitespace_normalization( Verification: - Imported list matches expected normalized data. """ - input_file, _ = import_records_wizard_page.upload_and_verify_output( + input_file, _ = ImportRecordsWizardPage(page, test_data).upload_and_verify_output( ClassFileMapping.WHITESPACE, ) - imports_page.header.click_children_header() - children_search_page.verify_list_has_been_uploaded( + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).verify_list_has_been_uploaded( input_file, is_vaccinations=False ) diff --git a/tests/test_import_historical_vaccinations.py b/tests/test_import_historical_vaccinations.py index 9e970e8c244..ad562f7c55d 100644 --- a/tests/test_import_historical_vaccinations.py +++ b/tests/test_import_historical_vaccinations.py @@ -2,23 +2,31 @@ from mavis.test.data import VaccsFileMapping from mavis.test.models import Programme +from mavis.test.pages import ( + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, +) @pytest.fixture def setup_hist_vaccs( log_in_as_nurse, - dashboard_page, - imports_page, - import_records_wizard_page, + page, + test_data, ): - dashboard_page.click_imports() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() + DashboardPage(page).click_imports() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_vaccination_records_import() @pytest.mark.vaccinations def test_vaccination_file_upload_historic_valid_data( - setup_hist_vaccs, import_records_wizard_page + setup_hist_vaccs, + page, + test_data, ): """ Test: Upload a historic vaccination records file with valid data and verify import. @@ -40,13 +48,16 @@ def test_vaccination_file_upload_historic_valid_data( MMR, MMR_NFA, MMR_Add_Not_Known, MMR_AllowPastExpiryDate, MMR_SiteRAU, MMR_SiteRAL, MMR_NotVaccinated, MMR_DoseSeq1, MMR_DoseSeq2 """ - import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.HIST_POSITIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + VaccsFileMapping.HIST_POSITIVE + ) @pytest.mark.vaccinations def test_vaccination_file_upload_historic_invalid_data( setup_hist_vaccs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a historic vaccination records file with invalid data and @@ -67,17 +78,16 @@ def test_vaccination_file_upload_historic_invalid_data( InvalidReason, InvalidVaccinatedFlag, InvalidCareSetting, TimeInFuture, LongBatchNumber """ - import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.HIST_NEGATIVE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + VaccsFileMapping.HIST_NEGATIVE + ) def test_historical_vaccination_file_upload_creates_child( setup_hist_vaccs, schools, - dashboard_page, - import_records_wizard_page, - imports_page, - children_search_page, - child_record_page, + page, + test_data, children, ): """ @@ -93,11 +103,13 @@ def test_historical_vaccination_file_upload_creates_child( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.HIST_HPV) - imports_page.header.click_children_header() + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + VaccsFileMapping.HIST_HPV + ) + ImportsPage(page).header.click_children_header() - children_search_page.click_advanced_filters() - children_search_page.check_children_aged_out_of_programmes() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_vaccination_details(school) + ChildrenSearchPage(page).click_advanced_filters() + ChildrenSearchPage(page).check_children_aged_out_of_programmes() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_vaccination_details(school) diff --git a/tests/test_import_offline_vaccinations.py b/tests/test_import_offline_vaccinations.py index b714fe2d06b..9a3908e8881 100644 --- a/tests/test_import_offline_vaccinations.py +++ b/tests/test_import_offline_vaccinations.py @@ -3,6 +3,17 @@ from mavis.test.annotations import issue from mavis.test.data import ClassFileMapping, VaccsFileMapping from mavis.test.models import Programme +from mavis.test.pages import ( + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsSearchPage, + VaccinationRecordPage, +) from mavis.test.utils import get_offset_date @@ -10,37 +21,37 @@ def setup_vaccs( log_in_as_nurse, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - import_records_wizard_page, - imports_page, + page, + test_data, year_groups, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV.group) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=0, skip_weekends=False) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + school, Programme.HPV.group + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=0, skip_weekends=False + ) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( ClassFileMapping.RANDOM_CHILD, year_group ) - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - session_id = sessions_overview_page.get_session_id_from_offline_excel() - sessions_overview_page.header.click_imports_header() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + session_id = SessionsOverviewPage(page).get_session_id_from_offline_excel() + SessionsOverviewPage(page).header.click_imports_header() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_vaccination_records_import() return session_id @pytest.mark.vaccinations -def test_vaccination_file_upload_valid_data(setup_vaccs, import_records_wizard_page): +def test_vaccination_file_upload_valid_data(setup_vaccs, page, test_data): """ Test: Upload a valid vaccination records file and verify successful import. Steps: @@ -67,14 +78,14 @@ def test_vaccination_file_upload_valid_data(setup_vaccs, import_records_wizard_p MMR_BatchName100Chars, MMR_DoseSeq1WithoutSess, MMR_DoseSeq2WithoutSess, MMR_UnknownDoseSeq, MMRNoDelayDose1, MMRNoDelayDose2, MMR_NoDelayDoseUnknown """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( file_mapping=VaccsFileMapping.POSITIVE, session_id=setup_vaccs, ) @pytest.mark.vaccinations -def test_vaccination_file_upload_invalid_data(setup_vaccs, import_records_wizard_page): +def test_vaccination_file_upload_invalid_data(setup_vaccs, page, test_data): """ Test: Upload an invalid vaccination records file and verify error handling. Steps: @@ -96,7 +107,7 @@ def test_vaccination_file_upload_invalid_data(setup_vaccs, import_records_wizard HPV_TimeInFuture, HPV_VaccinatedFlagEmpty, TDIPV_EmptyDoseSeq, TDIPV_InvalidDoseSeq, MenACWY_EmptyDoseSeq, MenACWY_InvalidDoseSeq, MenACWY_LongBatchNumber, MMR_DoseSeq3 """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( file_mapping=VaccsFileMapping.NEGATIVE, session_id=setup_vaccs, ) @@ -106,9 +117,8 @@ def test_vaccination_file_upload_invalid_data(setup_vaccs, import_records_wizard @pytest.mark.vaccinations def test_vaccination_file_upload_duplicate_records( setup_vaccs, - dashboard_page, - import_records_wizard_page, - imports_page, + page, + test_data, ): """ Test: Upload duplicate vaccination records and verify duplicate handling. @@ -121,14 +131,14 @@ def test_vaccination_file_upload_duplicate_records( 1. Duplicate records within the same file, and 2. Duplicate records across 2 different files """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.DUP_1, session_id=setup_vaccs, ) - imports_page.header.click_imports_header() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() - import_records_wizard_page.upload_and_verify_output( + ImportsPage(page).header.click_imports_header() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_vaccination_records_import() + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.DUP_2, session_id=setup_vaccs, ) @@ -136,7 +146,9 @@ def test_vaccination_file_upload_duplicate_records( @pytest.mark.vaccinations def test_vaccination_file_upload_invalid_structure( - setup_vaccs, import_records_wizard_page + setup_vaccs, + page, + test_data, ): """ Test: Upload a vaccination records file with invalid structure and @@ -147,13 +159,13 @@ def test_vaccination_file_upload_invalid_structure( Verification: - Output indicates structural errors. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.INVALID_STRUCTURE ) @pytest.mark.vaccinations -def test_vaccination_file_upload_header_only(setup_vaccs, import_records_wizard_page): +def test_vaccination_file_upload_header_only(setup_vaccs, page, test_data): """ Test: Upload a vaccination records file with only headers and verify no records are imported. @@ -163,11 +175,13 @@ def test_vaccination_file_upload_header_only(setup_vaccs, import_records_wizard_ Verification: - Output indicates no records imported. """ - import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.HEADER_ONLY) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + VaccsFileMapping.HEADER_ONLY + ) @pytest.mark.vaccinations -def test_vaccination_file_upload_empty_file(setup_vaccs, import_records_wizard_page): +def test_vaccination_file_upload_empty_file(setup_vaccs, page, test_data): """ Test: Upload an empty vaccination records file and verify error handling. Steps: @@ -176,7 +190,9 @@ def test_vaccination_file_upload_empty_file(setup_vaccs, import_records_wizard_p Verification: - Output indicates error or no records imported. """ - import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.EMPTY_FILE) + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( + VaccsFileMapping.EMPTY_FILE + ) @issue("MAV-855") @@ -185,11 +201,8 @@ def test_vaccination_file_upload_empty_file(setup_vaccs, import_records_wizard_p def test_vaccination_file_upload_creates_child_no_setting( setup_vaccs, schools, - import_records_wizard_page, - imports_page, - children_search_page, - child_record_page, - vaccination_record_page, + page, + test_data, children, ): """ @@ -206,26 +219,25 @@ def test_vaccination_file_upload_creates_child_no_setting( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.NO_CARE_SETTING ) - imports_page.header.click_children_header() + ImportsPage(page).header.click_children_header() - children_search_page.click_advanced_filters() - children_search_page.check_children_aged_out_of_programmes() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_vaccination_details(school) - vaccination_record_page.expect_vaccination_details("Location", str(school)) + ChildrenSearchPage(page).click_advanced_filters() + ChildrenSearchPage(page).check_children_aged_out_of_programmes() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).expect_vaccination_details("Location", str(school)) @pytest.mark.vaccinations @pytest.mark.bug def test_vaccination_file_upload_whitespace_normalization( setup_vaccs, - import_records_wizard_page, - children_search_page, - imports_page, + page, + test_data, ): """ Test: Upload a vaccination records file with extra whitespace and @@ -239,12 +251,14 @@ def test_vaccination_file_upload_whitespace_normalization( Scenarios covered: TwoSpaces, Tabs, NBSP (non-breaking space), ZWJ (zero-width joiner) """ - input_file, _ = import_records_wizard_page.upload_and_verify_output( + input_file, _ = ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.WHITESPACE, session_id=setup_vaccs, ) - imports_page.header.click_children_header() - children_search_page.verify_list_has_been_uploaded(input_file, is_vaccinations=True) + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).verify_list_has_been_uploaded( + input_file, is_vaccinations=True + ) @issue("MAV-691") @@ -252,7 +266,8 @@ def test_vaccination_file_upload_whitespace_normalization( @pytest.mark.bug def test_vaccination_file_upload_community_clinic_name_case( setup_vaccs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a vaccination file with community clinic name case variations and @@ -263,7 +278,7 @@ def test_vaccination_file_upload_community_clinic_name_case( - Output indicates clinic names are handled case-insensitively and imported correctly. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.CLINIC_NAME_CASE, session_id=setup_vaccs, ) diff --git a/tests/test_import_systmone_nivs.py b/tests/test_import_systmone_nivs.py index b48c143d26b..be7df1c6807 100644 --- a/tests/test_import_systmone_nivs.py +++ b/tests/test_import_systmone_nivs.py @@ -2,24 +2,29 @@ from mavis.test.annotations import issue from mavis.test.data import VaccsFileMapping +from mavis.test.pages import ( + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, +) @pytest.fixture def setup_systmone_nivs( log_in_as_nurse, - dashboard_page, - import_records_wizard_page, - imports_page, + page, + test_data, ): - dashboard_page.click_imports() - imports_page.click_upload_records() - import_records_wizard_page.navigate_to_vaccination_records_import() + DashboardPage(page).click_imports() + ImportsPage(page).click_upload_records() + ImportRecordsWizardPage(page, test_data).navigate_to_vaccination_records_import() @pytest.mark.vaccinations def test_vaccination_file_upload_systmone_valid_data( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a SystmOne vaccination records file with valid data and verify import. @@ -32,7 +37,7 @@ def test_vaccination_file_upload_systmone_valid_data( AllValuesCervarix, AllValuesG9, AllValuesHistorical, MandatoryValues, Batch100Chars, AllValuesMMR_DoseSeq1, AllValuesMMR_DoseSeq2 """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.SYSTMONE_POSITIVE ) @@ -40,7 +45,8 @@ def test_vaccination_file_upload_systmone_valid_data( @pytest.mark.vaccinations def test_vaccination_file_upload_systmone_invalid_data( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a SystmOne vaccination records file with invalid data and @@ -57,7 +63,7 @@ def test_vaccination_file_upload_systmone_invalid_data( PastEventDate, InvalidEventTime, FutureEventTime, InvalidSchoolURN, LongBatchNumber, AllValuesMMR_DoseSeq3 """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.SYSTMONE_NEGATIVE ) @@ -65,7 +71,8 @@ def test_vaccination_file_upload_systmone_invalid_data( @pytest.mark.vaccinations def test_vaccination_file_upload_systmone_historic_invalid_data( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a SystmOne historic vaccination records file with invalid data and @@ -81,7 +88,7 @@ def test_vaccination_file_upload_systmone_historic_invalid_data( InvalidSex, EmptyLastName, EmptyEventDate, InvalidEventDate, FutureEventDate, PastEventDate, InvalidEventTime, InvalidSchoolURN """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.SYSTMONE_HIST_NEGATIVE, ) @@ -90,7 +97,8 @@ def test_vaccination_file_upload_systmone_historic_invalid_data( @pytest.mark.bug def test_vaccination_file_upload_systmone_whitespace_normalization( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a SystmOne vaccination records file with extra whitespace and @@ -103,7 +111,7 @@ def test_vaccination_file_upload_systmone_whitespace_normalization( TwoSpaces, Tabs, NBSP (non-breaking space), ZWJ (zero-width joiner), HistoricalTwoSpaces, HistoricalTabs, HistoricalNBSP, HistoricalZWJ """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.SYSTMONE_WHITESPACE, ) @@ -113,7 +121,8 @@ def test_vaccination_file_upload_systmone_whitespace_normalization( @pytest.mark.bug def test_vaccination_file_upload_nivs_disallow_flu_for_previous_years( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a NIVS historic flu vaccination file for previous years and verify @@ -123,7 +132,7 @@ def test_vaccination_file_upload_nivs_disallow_flu_for_previous_years( Verification: - Output indicates flu vaccinations for previous years are not allowed. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.HIST_FLU_NIVS, ) @@ -133,7 +142,8 @@ def test_vaccination_file_upload_nivs_disallow_flu_for_previous_years( @pytest.mark.bug def test_vaccination_file_upload_systmone_disallow_flu_for_previous_years( setup_systmone_nivs, - import_records_wizard_page, + page, + test_data, ): """ Test: Upload a SystmOne historic flu vaccination file for previous years and verify @@ -143,6 +153,6 @@ def test_vaccination_file_upload_systmone_disallow_flu_for_previous_years( Verification: - Output indicates flu vaccinations for previous years are not allowed. """ - import_records_wizard_page.upload_and_verify_output( + ImportRecordsWizardPage(page, test_data).upload_and_verify_output( VaccsFileMapping.HIST_FLU_SYSTMONE, ) diff --git a/tests/test_log_in.py b/tests/test_log_in.py index e88f7e7e362..1542b606348 100644 --- a/tests/test_log_in.py +++ b/tests/test_log_in.py @@ -1,19 +1,27 @@ import pytest from playwright.sync_api import expect +from mavis.test.accessibility import AccessibilityHelper from mavis.test.models import User +from mavis.test.pages import ( + DashboardPage, + LogInPage, + LogOutPage, + StartPage, + TeamPage, +) pytestmark = pytest.mark.log_in @pytest.fixture(autouse=True) -def go_to_log_in_page(start_page): - start_page.navigate_and_start() +def go_to_log_in_page(page): + StartPage(page).navigate_and_start() @pytest.mark.parametrize("username", ["", "invalid"], ids=lambda v: f"username: {v}") @pytest.mark.parametrize("password", ["", "invalid"], ids=lambda v: f"password: {v}") -def test_login_with_invalid_credentials(username, password, log_in_page): +def test_login_with_invalid_credentials(username, password, page): """ Test: Attempt to log in with invalid or empty credentials and verify error message. Steps: @@ -22,8 +30,8 @@ def test_login_with_invalid_credentials(username, password, log_in_page): Verification: - Error message is displayed indicating invalid credentials. """ - log_in_page.log_in(User(username=username, password=password, role="unknown")) - expect(log_in_page.error_message).to_be_visible() + LogInPage(page).log_in(User(username=username, password=password, role="unknown")) + expect(LogInPage(page).error_message).to_be_visible() @pytest.fixture(scope="session") @@ -45,7 +53,10 @@ def users( ids=lambda v: f"role: {v}", ) def test_login_with_valid_credentials( - role, users, team, dashboard_page, log_in_page, team_page + role, + users, + team, + page, ): """ Test: Log in with valid credentials for each user role and verify dashboard links @@ -60,28 +71,28 @@ def test_login_with_valid_credentials( - Log out button and all dashboard navigation links are visible after login. - Team name and email are visible in the Team page. """ - log_in_page.log_in_and_choose_team_if_necessary(users[role], team) - expect(log_in_page.log_out_button).to_be_visible() + LogInPage(page).log_in_and_choose_team_if_necessary(users[role], team) + expect(LogInPage(page).log_out_button).to_be_visible() - expect(dashboard_page.header.mavis_link).to_be_visible() - expect(dashboard_page.programmes_link).to_be_visible() - expect(dashboard_page.sessions_link).to_be_visible() - expect(dashboard_page.children_link).to_be_visible() - expect(dashboard_page.vaccines_link).to_be_visible() - expect(dashboard_page.unmatched_consent_responses_link).to_be_visible() - expect(dashboard_page.school_moves_link).to_be_visible() - expect(dashboard_page.imports_link).to_be_visible() - expect(dashboard_page.your_team_link).to_be_visible() - expect(dashboard_page.service_guidance_link).to_be_visible() + expect(DashboardPage(page).header.mavis_link).to_be_visible() + expect(DashboardPage(page).programmes_link).to_be_visible() + expect(DashboardPage(page).sessions_link).to_be_visible() + expect(DashboardPage(page).children_link).to_be_visible() + expect(DashboardPage(page).vaccines_link).to_be_visible() + expect(DashboardPage(page).unmatched_consent_responses_link).to_be_visible() + expect(DashboardPage(page).school_moves_link).to_be_visible() + expect(DashboardPage(page).imports_link).to_be_visible() + expect(DashboardPage(page).your_team_link).to_be_visible() + expect(DashboardPage(page).service_guidance_link).to_be_visible() - dashboard_page.click_your_team() - team_page.check_team_name_is_visible(team) - team_page.check_team_email_is_visible(team) + DashboardPage(page).click_your_team() + TeamPage(page).check_team_name_is_visible(team) + TeamPage(page).check_team_email_is_visible(team) - log_in_page.log_out() + LogInPage(page).log_out() -def test_logout_page(log_in_page, log_out_page, users, team): +def test_logout_page(page, users, team): """ Test: Verify the log out page functionality. Steps: @@ -94,13 +105,13 @@ def test_logout_page(log_in_page, log_out_page, users, team): - Log out page is displayed with the correct heading. - After logging out, the start page link is visible. """ - log_in_page.log_in_and_choose_team_if_necessary(users["nurse"], team) - log_out_page.navigate() - log_out_page.verify_log_out_page() + LogInPage(page).log_in_and_choose_team_if_necessary(users["nurse"], team) + LogOutPage(page).navigate() + LogOutPage(page).verify_log_out_page() @pytest.mark.accessibility -def test_accessibility(accessibility_helper, dashboard_page, log_in_page, users, team): +def test_accessibility(page, users, team): """ Test: Verify that the log in, team and dashboard page pass accessibility checks. Steps: @@ -112,10 +123,10 @@ def test_accessibility(accessibility_helper, dashboard_page, log_in_page, users, Verification: - No accessibility issues are found on these pages. """ - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - log_in_page.log_in_and_choose_team_if_necessary(users["nurse"], team) - accessibility_helper.check_accessibility() + LogInPage(page).log_in_and_choose_team_if_necessary(users["nurse"], team) + AccessibilityHelper(page).check_accessibility() - dashboard_page.click_your_team() - accessibility_helper.check_accessibility() + DashboardPage(page).click_your_team() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_nurse_consent.py b/tests/test_nurse_consent.py index df7f36d5350..1d3a78e2d73 100644 --- a/tests/test_nurse_consent.py +++ b/tests/test_nurse_consent.py @@ -1,8 +1,25 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.data import CohortsFileMapping from mavis.test.models import ConsentMethod, DeliverySite, Programme, Vaccine +from mavis.test.pages import ( + DashboardPage, + GillickCompetencePage, + ImportRecordsWizardPage, + ImportsPage, + NurseConsentWizardPage, + SessionsChildrenPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsPatientSessionActivityPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, +) from mavis.test.utils import MAVIS_NOTE_LENGTH_LIMIT, expect_alert_text, get_offset_date pytestmark = pytest.mark.consent @@ -12,30 +29,28 @@ def setup_session_with_file_upload( log_in_as_nurse, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - import_records_wizard_page, + page, + test_data, year_groups, - imports_page, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] def _setup(class_list_file): - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( school, Programme.HPV.group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list(class_list_file, year_group) - imports_page.header.click_sessions_header() + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( + class_list_file, year_group + ) + ImportsPage(page).header.click_sessions_header() yield return _setup @@ -49,12 +64,8 @@ def setup_fixed_child(setup_session_with_file_upload): def test_gillick_competence( setup_fixed_child, schools, - sessions_search_page, - gillick_competence_page, + page, children, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, ): """ Test: Add and edit Gillick competence assessment for a child. @@ -69,27 +80,23 @@ def test_gillick_competence( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_assess_gillick_competence() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_assess_gillick_competence() - gillick_competence_page.add_gillick_competence(is_competent=True) - sessions_patient_page.click_edit_gillick_competence() - gillick_competence_page.edit_gillick_competence(is_competent=False) + GillickCompetencePage(page).add_gillick_competence(is_competent=True) + SessionsPatientPage(page).click_edit_gillick_competence() + GillickCompetencePage(page).edit_gillick_competence(is_competent=False) @issue("MAV-955") def test_gillick_competence_notes( setup_fixed_child, schools, - gillick_competence_page, + page, children, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, ): """ Test: Validate Gillick competence assessment notes length and update. @@ -107,41 +114,36 @@ def test_gillick_competence_notes( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_assess_gillick_competence() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_assess_gillick_competence() - gillick_competence_page.answer_gillick_competence_questions(is_competent=True) - gillick_competence_page.fill_assessment_notes_with_string_of_length( + GillickCompetencePage(page).answer_gillick_competence_questions(is_competent=True) + GillickCompetencePage(page).fill_assessment_notes_with_string_of_length( MAVIS_NOTE_LENGTH_LIMIT + 1 ) - gillick_competence_page.click_complete_assessment() - gillick_competence_page.check_notes_length_error_appears() + GillickCompetencePage(page).click_complete_assessment() + GillickCompetencePage(page).check_notes_length_error_appears() - gillick_competence_page.fill_assessment_notes("Gillick competent") - gillick_competence_page.click_complete_assessment() + GillickCompetencePage(page).fill_assessment_notes("Gillick competent") + GillickCompetencePage(page).click_complete_assessment() - sessions_patient_page.click_edit_gillick_competence() - gillick_competence_page.answer_gillick_competence_questions(is_competent=True) - gillick_competence_page.fill_assessment_notes_with_string_of_length( + SessionsPatientPage(page).click_edit_gillick_competence() + GillickCompetencePage(page).answer_gillick_competence_questions(is_competent=True) + GillickCompetencePage(page).fill_assessment_notes_with_string_of_length( MAVIS_NOTE_LENGTH_LIMIT + 1 ) - gillick_competence_page.click_update_assessment() - gillick_competence_page.check_notes_length_error_appears() + GillickCompetencePage(page).click_update_assessment() + GillickCompetencePage(page).check_notes_length_error_appears() @pytest.mark.bug def test_invalid_consent( setup_fixed_child, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_patient_session_activity_page, + page, schools, - nurse_consent_wizard_page, children, ): """ @@ -158,40 +160,40 @@ def test_invalid_consent( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_needs_consent() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_no_response() - - sessions_children_page.select_needs_consent() - - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[1]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_refuse_consent() - - sessions_children_page.select_has_a_refusal() - sessions_children_page.select_parent_refused() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.invalidate_parent_refusal(child.parents[1]) - sessions_patient_page.click_session_activity_and_notes() - - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_needs_consent() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_no_response() + + SessionsChildrenPage(page).select_needs_consent() + + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[1]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_refuse_consent() + + SessionsChildrenPage(page).select_has_a_refusal() + SessionsChildrenPage(page).select_parent_refused() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).invalidate_parent_refusal(child.parents[1]) + SessionsPatientPage(page).click_session_activity_and_notes() + + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent from {child.parents[1].full_name} invalidated", ) - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent refused by {child.parents[1].name_and_relationship}", ) - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent not_provided by {child.parents[0].name_and_relationship}", ) @@ -199,14 +201,8 @@ def test_invalid_consent( @pytest.mark.bug def test_parent_provides_consent_twice( setup_fixed_child, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_patient_session_activity_page, - sessions_vaccination_wizard_page, + page, schools, - nurse_consent_wizard_page, children, ): """ @@ -225,41 +221,41 @@ def test_parent_provides_consent_twice( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_needs_consent() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_needs_consent() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PAPER) - nurse_consent_wizard_page.record_parent_positive_consent( + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PAPER) + NurseConsentWizardPage(page).record_parent_positive_consent( yes_to_health_questions=True ) - sessions_children_page.select_due_vaccination() - - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_refuse_consent() - - sessions_children_page.select_has_a_refusal() - sessions_children_page.select_parent_refused() - - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_vaccination_wizard_page.expect_consent_refused_text(child.parents[0]) - sessions_patient_page.click_session_activity_and_notes() - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsChildrenPage(page).select_due_vaccination() + + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_refuse_consent() + + SessionsChildrenPage(page).select_has_a_refusal() + SessionsChildrenPage(page).select_parent_refused() + + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsVaccinationWizardPage(page).expect_consent_refused_text(child.parents[0]) + SessionsPatientPage(page).click_session_activity_and_notes() + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent refused by {child.parents[0].name_and_relationship}", ) - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsPatientSessionActivityPage(page).check_session_activity_entry( "Triaged decision: Safe to vaccinate" ) - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent given by {child.parents[0].name_and_relationship}", ) @@ -267,14 +263,8 @@ def test_parent_provides_consent_twice( @pytest.mark.bug def test_conflicting_consent_with_gillick_consent( setup_fixed_child, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_patient_session_activity_page, + page, schools, - nurse_consent_wizard_page, - gillick_competence_page, children, ): """ @@ -295,48 +285,50 @@ def test_conflicting_consent_with_gillick_consent( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_needs_consent() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_positive_consent() - - sessions_children_page.select_due_vaccination() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - - nurse_consent_wizard_page.select_parent(child.parents[1]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_refuse_consent() - - sessions_children_page.select_has_a_refusal() - sessions_children_page.select_parent_refused() - sessions_children_page.select_conflicting_consent() - - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.expect_consent_status(Programme.HPV, "Conflicting consent") - sessions_patient_page.expect_conflicting_consent_text() - sessions_patient_page.click_assess_gillick_competence() - gillick_competence_page.add_gillick_competence(is_competent=True) - sessions_patient_page.click_record_a_new_consent_response() - - nurse_consent_wizard_page.select_gillick_competent_child() - nurse_consent_wizard_page.record_child_positive_consent() - expect_alert_text(nurse_consent_wizard_page.page, f"Consent recorded for {child!s}") - - sessions_children_page.select_due_vaccination() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.expect_consent_status(Programme.HPV, "Consent given") - sessions_patient_page.click_session_activity_and_notes() - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_needs_consent() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_positive_consent() + + SessionsChildrenPage(page).select_due_vaccination() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + + NurseConsentWizardPage(page).select_parent(child.parents[1]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_refuse_consent() + + SessionsChildrenPage(page).select_has_a_refusal() + SessionsChildrenPage(page).select_parent_refused() + SessionsChildrenPage(page).select_conflicting_consent() + + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).expect_consent_status( + Programme.HPV, "Conflicting consent" + ) + SessionsPatientPage(page).expect_conflicting_consent_text() + SessionsPatientPage(page).click_assess_gillick_competence() + GillickCompetencePage(page).add_gillick_competence(is_competent=True) + SessionsPatientPage(page).click_record_a_new_consent_response() + + NurseConsentWizardPage(page).select_gillick_competent_child() + NurseConsentWizardPage(page).record_child_positive_consent() + expect_alert_text(page, f"Consent recorded for {child!s}") + + SessionsChildrenPage(page).select_due_vaccination() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).expect_consent_status(Programme.HPV, "Consent given") + SessionsPatientPage(page).click_session_activity_and_notes() + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent given by {child!s} (Child (Gillick competent))", ) @@ -345,78 +337,71 @@ def test_conflicting_consent_with_gillick_consent( def test_accessibility( setup_fixed_child, add_vaccine_batch, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_register_page, - sessions_record_vaccinations_page, - sessions_vaccination_wizard_page, + page, schools, - nurse_consent_wizard_page, children, - accessibility_helper, - dashboard_page, ): child = children[Programme.HPV][0] school = schools[Programme.HPV][0] batch_name = add_vaccine_batch(Vaccine.GARDASIL_9) - dashboard_page.navigate() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_needs_consent() + DashboardPage(page).navigate() + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_needs_consent() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() - accessibility_helper.check_accessibility() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() + AccessibilityHelper(page).check_accessibility() - nurse_consent_wizard_page.click_radio_button(child.parents[0].name_and_relationship) - nurse_consent_wizard_page.click_continue() + NurseConsentWizardPage(page).click_radio_button( + child.parents[0].name_and_relationship + ) + NurseConsentWizardPage(page).click_continue() - accessibility_helper.check_accessibility() - nurse_consent_wizard_page.click_continue() + AccessibilityHelper(page).check_accessibility() + NurseConsentWizardPage(page).click_continue() - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PAPER) - accessibility_helper.check_accessibility() + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PAPER) + AccessibilityHelper(page).check_accessibility() - nurse_consent_wizard_page.click_yes_they_agree() - nurse_consent_wizard_page.click_continue() - accessibility_helper.check_accessibility() + NurseConsentWizardPage(page).click_yes_they_agree() + NurseConsentWizardPage(page).click_continue() + AccessibilityHelper(page).check_accessibility() - nurse_consent_wizard_page.answer_all_health_questions( + NurseConsentWizardPage(page).answer_all_health_questions( programme=Programme.HPV, ) - nurse_consent_wizard_page.click_continue() - accessibility_helper.check_accessibility() + NurseConsentWizardPage(page).click_continue() + AccessibilityHelper(page).check_accessibility() - nurse_consent_wizard_page.click_confirm() - accessibility_helper.check_accessibility() + NurseConsentWizardPage(page).click_confirm() + AccessibilityHelper(page).check_accessibility() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - accessibility_helper.check_accessibility() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + AccessibilityHelper(page).check_accessibility() - sessions_record_vaccinations_page.search.search_and_click_child(child) - accessibility_helper.check_accessibility() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) + AccessibilityHelper(page).check_accessibility() - sessions_patient_page.confirm_pre_screening_checks(Programme.HPV) - sessions_patient_page.select_identity_confirmed_by_child(child) - sessions_patient_page.select_ready_for_vaccination() - sessions_patient_page.select_delivery_site(DeliverySite.LEFT_ARM_UPPER) - sessions_vaccination_wizard_page.click_continue_button() - accessibility_helper.check_accessibility() + SessionsPatientPage(page).confirm_pre_screening_checks(Programme.HPV) + SessionsPatientPage(page).select_identity_confirmed_by_child(child) + SessionsPatientPage(page).select_ready_for_vaccination() + SessionsPatientPage(page).select_delivery_site(DeliverySite.LEFT_ARM_UPPER) + SessionsVaccinationWizardPage(page).click_continue_button() + AccessibilityHelper(page).check_accessibility() - sessions_vaccination_wizard_page.choose_batch(batch_name) - accessibility_helper.check_accessibility() + SessionsVaccinationWizardPage(page).choose_batch(batch_name) + AccessibilityHelper(page).check_accessibility() - sessions_vaccination_wizard_page.click_confirm_button() - accessibility_helper.check_accessibility() + SessionsVaccinationWizardPage(page).click_confirm_button() + AccessibilityHelper(page).check_accessibility() - sessions_patient_page.click_vaccination_details(school) - accessibility_helper.check_accessibility() + SessionsPatientPage(page).click_vaccination_details(school) + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_online_consent_doubles.py b/tests/test_online_consent_doubles.py index 90be39ab692..b90eedc1527 100644 --- a/tests/test_online_consent_doubles.py +++ b/tests/test_online_consent_doubles.py @@ -1,6 +1,10 @@ import pytest from mavis.test.models import ConsentRefusalReason, Programme +from mavis.test.pages import ( + OnlineConsentWizardPage, + StartPage, +) pytestmark = pytest.mark.consent @@ -15,14 +19,14 @@ def url_with_session_scheduled(schedule_session_and_get_consent_url, schools): @pytest.fixture -def start_consent_with_session_scheduled(url_with_session_scheduled, page, start_page): +def start_consent_with_session_scheduled(url_with_session_scheduled, page): page.goto(url_with_session_scheduled) - start_page.start() + StartPage(page).start() def test_consent_refused_for_doubles_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, ): @@ -40,14 +44,14 @@ def test_consent_refused_for_doubles_vaccination( child = children["doubles"][0] schools = schools["doubles"] - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.dont_agree_to_vaccination() - online_consent_wizard_page.select_consent_not_given_reason( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).dont_agree_to_vaccination() + OnlineConsentWizardPage(page).select_consent_not_given_reason( reason=ConsentRefusalReason.VACCINE_ALREADY_RECEIVED, details="Vaccine already received in previous school", ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.expect_confirmation_text( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).expect_confirmation_text( f"Consent refusedYou’ve told us that you do not want" f" {child.first_name} {child.last_name} to get the MenACWY and Td/IPV" " vaccinations at school", @@ -66,7 +70,7 @@ def test_consent_refused_for_doubles_vaccination( ) def test_consent_given_for_doubles_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, programmes, yes_to_health_questions, @@ -89,29 +93,27 @@ def test_consent_given_for_doubles_vaccination( child = children["doubles"][0] schools = schools["doubles"] - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_doubles_vaccinations(*programmes) - online_consent_wizard_page.fill_address_details(*child.address) + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_doubles_vaccinations(*programmes) + OnlineConsentWizardPage(page).fill_address_details(*child.address) - number_of_health_questions = ( - online_consent_wizard_page.get_number_of_health_questions_for_programmes( - programmes - ) - ) + number_of_health_questions = OnlineConsentWizardPage( + page + ).get_number_of_health_questions_for_programmes(programmes) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=yes_to_health_questions, ) if programmes != [Programme.MENACWY, Programme.TD_IPV]: - online_consent_wizard_page.select_consent_not_given_reason( + OnlineConsentWizardPage(page).select_consent_not_given_reason( ConsentRefusalReason.PERSONAL_CHOICE, ) - online_consent_wizard_page.click_confirm() + OnlineConsentWizardPage(page).click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=programmes, yes_to_health_questions=yes_to_health_questions, diff --git a/tests/test_online_consent_flu.py b/tests/test_online_consent_flu.py index cfb2070fe10..0b24694a812 100644 --- a/tests/test_online_consent_flu.py +++ b/tests/test_online_consent_flu.py @@ -3,6 +3,15 @@ from mavis.test.annotations import issue from mavis.test.data import CohortsFileMapping from mavis.test.models import ConsentOption, ConsentRefusalReason, Programme +from mavis.test.pages import ( + DashboardPage, + ImportRecordsWizardPage, + OnlineConsentWizardPage, + SessionsChildrenPage, + SessionsOverviewPage, + SessionsSearchPage, + StartPage, +) pytestmark = pytest.mark.consent @@ -16,9 +25,9 @@ def url_with_session_scheduled(schedule_session_and_get_consent_url, schools): @pytest.fixture -def start_consent_with_session_scheduled(url_with_session_scheduled, page, start_page): +def start_consent_with_session_scheduled(url_with_session_scheduled, page): page.goto(url_with_session_scheduled) - start_page.start() + StartPage(page).start() @pytest.fixture @@ -26,19 +35,17 @@ def setup_session_with_file_upload( url_with_session_scheduled, log_in_as_nurse, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - import_records_wizard_page, + page, + test_data, year_groups, ): school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.FLU) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( CohortsFileMapping.FIXED_CHILD, year_group, Programme.FLU.group, @@ -48,7 +55,7 @@ def setup_session_with_file_upload( def test_consent_refused_for_flu_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, ): @@ -66,14 +73,14 @@ def test_consent_refused_for_flu_vaccination( child = children[Programme.FLU][0] schools = schools[Programme.FLU] - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.dont_agree_to_vaccination() - online_consent_wizard_page.select_consent_not_given_reason( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).dont_agree_to_vaccination() + OnlineConsentWizardPage(page).select_consent_not_given_reason( reason=ConsentRefusalReason.VACCINE_ALREADY_RECEIVED, details="Vaccine already received in previous school", ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.expect_confirmation_text( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).expect_confirmation_text( f"Consent refusedYou’ve told us that you do not want" f" {child.first_name} {child.last_name} to get the flu vaccination at school", ) @@ -95,7 +102,7 @@ def test_consent_refused_for_flu_vaccination( ) def test_consent_given_for_flu_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, consent_option, yes_to_health_questions, @@ -123,23 +130,25 @@ def test_consent_given_for_flu_vaccination( ConsentOption.INJECTION: 5, } - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_flu_vaccination(consent_option=consent_option) - online_consent_wizard_page.fill_address_details(*child.address) + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_flu_vaccination( + consent_option=consent_option + ) + OnlineConsentWizardPage(page).fill_address_details(*child.address) num_questions = number_of_health_questions[consent_option] if consent_option is not ConsentOption.INJECTION and yes_to_health_questions: - online_consent_wizard_page.answer_yes() + OnlineConsentWizardPage(page).answer_yes() num_questions += 1 - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).answer_health_questions( num_questions, yes_to_health_questions=yes_to_health_questions, ) - online_consent_wizard_page.click_confirm() + OnlineConsentWizardPage(page).click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=yes_to_health_questions, @@ -179,15 +188,10 @@ def test_consent_given_for_flu_vaccination( def test_flu_consent_method_displayed_correctly( setup_session_with_file_upload, start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, consents, - start_page, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - dashboard_page, ): """ Test: Submit multiple online flu consent forms with different methods and @@ -209,15 +213,17 @@ def test_flu_consent_method_displayed_correctly( url = setup_session_with_file_upload # First consent - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_flu_vaccination(consent_option=consents[0]) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu(consents[0]), + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_flu_vaccination(consent_option=consents[0]) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( + consents[0] + ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, @@ -225,18 +231,20 @@ def test_flu_consent_method_displayed_correctly( ) # Second consent (different parent) - online_consent_wizard_page.go_to_url(url) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(url) + StartPage(page).start() - online_consent_wizard_page.fill_details(child, child.parents[1], schools) - online_consent_wizard_page.agree_to_flu_vaccination(consent_option=consents[1]) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu(consents[1]), + OnlineConsentWizardPage(page).fill_details(child, child.parents[1], schools) + OnlineConsentWizardPage(page).agree_to_flu_vaccination(consent_option=consents[1]) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( + consents[1] + ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, @@ -244,18 +252,20 @@ def test_flu_consent_method_displayed_correctly( ) # Verify in session - dashboard_page.navigate() - dashboard_page.click_sessions() + DashboardPage(page).navigate() + DashboardPage(page).click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.FLU) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_due_vaccination() + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.FLU + ) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_due_vaccination() - sessions_children_page.search.search_for(str(child)) - sessions_children_page.verify_child_shows_correct_flu_consent_method( + SessionsChildrenPage(page).search.search_for(str(child)) + SessionsChildrenPage(page).verify_child_shows_correct_flu_consent_method( child, consents[2] ) # Verify in session download - sessions_children_page.tabs.click_overview_tab() - sessions_overview_page.verify_consent_message_in_excel() + SessionsChildrenPage(page).tabs.click_overview_tab() + SessionsOverviewPage(page).verify_consent_message_in_excel() diff --git a/tests/test_online_consent_hpv.py b/tests/test_online_consent_hpv.py index e67214f47cb..dd5c093ce6c 100644 --- a/tests/test_online_consent_hpv.py +++ b/tests/test_online_consent_hpv.py @@ -1,6 +1,10 @@ import pytest from mavis.test.models import ConsentRefusalReason, Programme +from mavis.test.pages import ( + OnlineConsentWizardPage, + StartPage, +) pytestmark = pytest.mark.consent @@ -14,13 +18,13 @@ def url_with_session_scheduled(schedule_session_and_get_consent_url, schools): @pytest.fixture -def start_consent_with_session_scheduled(url_with_session_scheduled, page, start_page): +def start_consent_with_session_scheduled(url_with_session_scheduled, page): page.goto(url_with_session_scheduled) - start_page.start() + StartPage(page).start() def test_consent_refused_for_hpv_vaccination( - start_consent_with_session_scheduled, online_consent_wizard_page, schools, children + start_consent_with_session_scheduled, page, schools, children ): """ Test: Submit an online consent form refusing HPV vaccination and @@ -36,14 +40,14 @@ def test_consent_refused_for_hpv_vaccination( child = children[Programme.HPV][0] schools = schools[Programme.HPV] - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.dont_agree_to_vaccination() - online_consent_wizard_page.select_consent_not_given_reason( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).dont_agree_to_vaccination() + OnlineConsentWizardPage(page).select_consent_not_given_reason( reason=ConsentRefusalReason.VACCINE_ALREADY_RECEIVED, details="Vaccine already received in previous school", ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.expect_confirmation_text( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).expect_confirmation_text( f"Consent refusedYou’ve told us that you do not want" f" {child.first_name} {child.last_name} to get the HPV vaccination at school" ) @@ -56,7 +60,7 @@ def test_consent_refused_for_hpv_vaccination( ) def test_consent_given_for_hpv_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, yes_to_health_questions, children, @@ -78,15 +82,15 @@ def test_consent_given_for_hpv_vaccination( schools = schools[Programme.HPV] number_of_health_questions = len(Programme.health_questions(Programme.HPV)) - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_hpv_vaccination() - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_hpv_vaccination() + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=yes_to_health_questions, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.HPV], yes_to_health_questions=yes_to_health_questions, diff --git a/tests/test_online_consent_mmr.py b/tests/test_online_consent_mmr.py index 3f60cdaf280..9f53b4bafc3 100644 --- a/tests/test_online_consent_mmr.py +++ b/tests/test_online_consent_mmr.py @@ -1,6 +1,10 @@ import pytest from mavis.test.models import ConsentOption, ConsentRefusalReason, Programme +from mavis.test.pages import ( + OnlineConsentWizardPage, + StartPage, +) pytestmark = pytest.mark.consent @@ -15,14 +19,15 @@ def url_with_mmr_session_scheduled(schedule_mmr_session_and_get_consent_url, sch @pytest.fixture def start_consent_with_session_scheduled( - url_with_mmr_session_scheduled, page, start_page + url_with_mmr_session_scheduled, + page, ): page.goto(url_with_mmr_session_scheduled) - start_page.start() + StartPage(page).start() def test_consent_refused_for_mmr_vaccination( - start_consent_with_session_scheduled, online_consent_wizard_page, schools, children + start_consent_with_session_scheduled, page, schools, children ): """ Test: Submit an online consent form refusing MMR vaccination and @@ -38,14 +43,14 @@ def test_consent_refused_for_mmr_vaccination( child = children[Programme.MMR][0] schools = schools[Programme.MMR] - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.dont_agree_to_vaccination() - online_consent_wizard_page.select_consent_not_given_reason( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).dont_agree_to_vaccination() + OnlineConsentWizardPage(page).select_consent_not_given_reason( reason=ConsentRefusalReason.VACCINE_ALREADY_RECEIVED, details="Vaccine already received in previous school", ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.expect_confirmation_text( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).expect_confirmation_text( f"Consent refusedYou’ve told us that you do not want" f" {child.first_name} {child.last_name} to get the MMR vaccination at school" ) @@ -63,7 +68,7 @@ def test_consent_refused_for_mmr_vaccination( ) def test_consent_given_for_mmr_vaccination( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, yes_to_health_questions, consent_option, @@ -88,15 +93,15 @@ def test_consent_given_for_mmr_vaccination( Programme.health_questions(Programme.MMR, consent_option) ) - online_consent_wizard_page.fill_details(child, child.parents[0], schools) - online_consent_wizard_page.agree_to_mmr_vaccination(consent_option) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( + OnlineConsentWizardPage(page).fill_details(child, child.parents[0], schools) + OnlineConsentWizardPage(page).agree_to_mmr_vaccination(consent_option) + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( number_of_health_questions, yes_to_health_questions=yes_to_health_questions, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.MMR], yes_to_health_questions=yes_to_health_questions, diff --git a/tests/test_online_consent_school_moves.py b/tests/test_online_consent_school_moves.py index 59d471c8947..b7e8f66008e 100644 --- a/tests/test_online_consent_school_moves.py +++ b/tests/test_online_consent_school_moves.py @@ -1,7 +1,23 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.data import CohortsFileMapping from mavis.test.models import ConsentOption, Programme +from mavis.test.pages import ( + ConsentResponsePage, + CreateNewRecordConsentResponsePage, + DashboardPage, + ImportRecordsWizardPage, + LogInPage, + OnlineConsentWizardPage, + ReviewSchoolMovePage, + SchoolMovesPage, + SessionsChildrenPage, + SessionsOverviewPage, + SessionsSearchPage, + StartPage, + UnmatchedConsentResponsesPage, +) pytestmark = pytest.mark.consent @@ -15,9 +31,9 @@ def url_with_session_scheduled(schedule_session_and_get_consent_url, schools): @pytest.fixture -def start_consent_with_session_scheduled(url_with_session_scheduled, page, start_page): +def start_consent_with_session_scheduled(url_with_session_scheduled, page): page.goto(url_with_session_scheduled) - start_page.start() + StartPage(page).start() @pytest.fixture @@ -25,19 +41,17 @@ def setup_session_with_file_upload( url_with_session_scheduled, log_in_as_nurse, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - import_records_wizard_page, + page, + test_data, year_groups, ): school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.FLU) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( CohortsFileMapping.FIXED_CHILD, year_group, Programme.FLU.group, @@ -48,15 +62,9 @@ def setup_session_with_file_upload( def test_online_consent_school_moves_with_existing_patient( setup_session_with_file_upload, start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - dashboard_page, - school_moves_page, - review_school_move_page, ): """ Test: Submit online flu consent for an existing child and @@ -73,21 +81,21 @@ def test_online_consent_school_moves_with_existing_patient( schools = schools[Programme.FLU] # First consent - online_consent_wizard_page.fill_details( + OnlineConsentWizardPage(page).fill_details( child, child.parents[0], schools, change_school=True ) - online_consent_wizard_page.agree_to_flu_vaccination( + OnlineConsentWizardPage(page).agree_to_flu_vaccination( consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION ) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu( + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( ConsentOption.NASAL_SPRAY_OR_INJECTION ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, @@ -95,35 +103,29 @@ def test_online_consent_school_moves_with_existing_patient( ) # Verify in session - dashboard_page.navigate() - dashboard_page.click_school_moves() - school_moves_page.click_child(child) - review_school_move_page.confirm() - - school_moves_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[1], Programme.FLU) - - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_due_vaccination() - sessions_children_page.search.search_for(str(child)) - sessions_children_page.verify_child_shows_correct_flu_consent_method( + DashboardPage(page).navigate() + DashboardPage(page).click_school_moves() + SchoolMovesPage(page).click_child(child) + ReviewSchoolMovePage(page).confirm() + + SchoolMovesPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[1], Programme.FLU + ) + + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_due_vaccination() + SessionsChildrenPage(page).search.search_for(str(child)) + SessionsChildrenPage(page).verify_child_shows_correct_flu_consent_method( child, ConsentOption.NASAL_SPRAY_OR_INJECTION ) def test_online_consent_school_moves_with_new_patient( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - dashboard_page, - unmatched_consent_responses_page, - consent_response_page, - create_new_record_consent_response_page, - log_in_page, nurse, team, ): @@ -141,57 +143,58 @@ def test_online_consent_school_moves_with_new_patient( child = children[Programme.FLU][0] schools = schools[Programme.FLU] - online_consent_wizard_page.fill_details( + OnlineConsentWizardPage(page).fill_details( child, child.parents[0], schools, change_school=True ) - online_consent_wizard_page.agree_to_flu_vaccination( + OnlineConsentWizardPage(page).agree_to_flu_vaccination( consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION ) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu( + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( ConsentOption.NASAL_SPRAY_OR_INJECTION ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION, ) - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) - dashboard_page.navigate() - dashboard_page.click_unmatched_consent_responses() - unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) + DashboardPage(page).navigate() + DashboardPage(page).click_unmatched_consent_responses() + UnmatchedConsentResponsesPage(page).click_parent_on_consent_record_for_child(child) - consent_response_page.click_create_new_record() - create_new_record_consent_response_page.create_new_record() + ConsentResponsePage(page).click_create_new_record() + CreateNewRecordConsentResponsePage(page).create_new_record() - unmatched_consent_responses_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[1], Programme.FLU) + UnmatchedConsentResponsesPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[1], Programme.FLU + ) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.select_due_vaccination() - sessions_children_page.search.search_for(str(child)) - sessions_children_page.verify_child_shows_correct_flu_consent_method( + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).select_due_vaccination() + SessionsChildrenPage(page).search.search_for(str(child)) + SessionsChildrenPage(page).verify_child_shows_correct_flu_consent_method( child, ConsentOption.NASAL_SPRAY_OR_INJECTION ) - log_in_page.log_out() + LogInPage(page).log_out() @pytest.mark.accessibility def test_accessibility( start_consent_with_session_scheduled, - online_consent_wizard_page, + page, schools, children, - accessibility_helper, ): """ Test: Validate accessibility of online consent pages when changing schools. @@ -203,42 +206,42 @@ def test_accessibility( child = children[Programme.FLU][0] schools = schools[Programme.FLU] - online_consent_wizard_page.fill_child_name_details(*child.name) - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).fill_child_name_details(*child.name) + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.fill_child_date_of_birth(child.date_of_birth) - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).fill_child_date_of_birth(child.date_of_birth) + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.click_no_they_go_to_a_different_school() - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).click_no_they_go_to_a_different_school() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.fill_school_name(str(schools[1])) - online_consent_wizard_page.click_continue() - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).fill_school_name(str(schools[1])) + OnlineConsentWizardPage(page).click_continue() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.fill_parent_details(child.parents[0]) + OnlineConsentWizardPage(page).fill_parent_details(child.parents[0]) - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.agree_to_flu_vaccination( + OnlineConsentWizardPage(page).agree_to_flu_vaccination( consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION ) - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.fill_address_details(*child.address) - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).fill_address_details(*child.address) + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.answer_yes() - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).answer_yes() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu( + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( ConsentOption.NASAL_SPRAY_OR_INJECTION ) + 1, yes_to_health_questions=True, ) - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - online_consent_wizard_page.click_confirm() - accessibility_helper.check_accessibility() + OnlineConsentWizardPage(page).click_confirm() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_programmes.py b/tests/test_programmes.py index 0a02f2a36e1..7f1fcf06b9c 100644 --- a/tests/test_programmes.py +++ b/tests/test_programmes.py @@ -1,32 +1,43 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.data import CohortsFileMapping from mavis.test.models import Programme, ReportFormat +from mavis.test.pages import ( + ChildArchivePage, + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + EditVaccinationRecordPage, + ImportRecordsWizardPage, + ImportsPage, + ProgrammeChildrenPage, + ProgrammeOverviewPage, + ProgrammesListPage, + VaccinationRecordPage, +) from mavis.test.utils import expect_alert_text @pytest.fixture def setup_cohort_upload( log_in_as_nurse, - dashboard_page, - programmes_list_page, - programme_overview_page, - programme_children_page, + page, ): - dashboard_page.click_programmes() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() + DashboardPage(page).click_programmes() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() @pytest.fixture -def setup_reports(log_in_as_nurse, dashboard_page): - dashboard_page.click_programmes() +def setup_reports(log_in_as_nurse, page): + DashboardPage(page).click_programmes() @pytest.mark.cohorts -def test_cohort_upload_with_valid_file(setup_cohort_upload, import_records_wizard_page): +def test_cohort_upload_with_valid_file(setup_cohort_upload, page, test_data): """ Test: Upload a valid cohort (class list) file and verify successful import. Steps: @@ -35,13 +46,13 @@ def test_cohort_upload_with_valid_file(setup_cohort_upload, import_records_wizar Verification: - Import completes successfully with expected records. """ - import_records_wizard_page.import_class_list(CohortsFileMapping.POSITIVE) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.POSITIVE + ) @pytest.mark.cohorts -def test_cohort_upload_with_invalid_file( - setup_cohort_upload, import_records_wizard_page -): +def test_cohort_upload_with_invalid_file(setup_cohort_upload, page, test_data): """ Test: Upload an invalid cohort (class list) file and verify error handling. Steps: @@ -50,13 +61,13 @@ def test_cohort_upload_with_invalid_file( Verification: - Import fails and error is shown. """ - import_records_wizard_page.import_class_list(CohortsFileMapping.NEGATIVE) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.NEGATIVE + ) @pytest.mark.cohorts -def test_cohort_upload_with_invalid_structure( - setup_cohort_upload, import_records_wizard_page -): +def test_cohort_upload_with_invalid_structure(setup_cohort_upload, page, test_data): """ Test: Upload a cohort file with invalid structure and verify error handling. Steps: @@ -65,13 +76,13 @@ def test_cohort_upload_with_invalid_structure( Verification: - Import fails and structural error is shown. """ - import_records_wizard_page.import_class_list(CohortsFileMapping.INVALID_STRUCTURE) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.INVALID_STRUCTURE + ) @pytest.mark.cohorts -def test_cohort_upload_with_header_only_file( - setup_cohort_upload, import_records_wizard_page -): +def test_cohort_upload_with_header_only_file(setup_cohort_upload, page, test_data): """ Test: Upload a cohort file with only headers and verify no records are imported. Steps: @@ -80,11 +91,13 @@ def test_cohort_upload_with_header_only_file( Verification: - No records are imported and appropriate message is shown. """ - import_records_wizard_page.import_class_list(CohortsFileMapping.HEADER_ONLY) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.HEADER_ONLY + ) @pytest.mark.cohorts -def test_cohort_upload_with_empty_file(setup_cohort_upload, import_records_wizard_page): +def test_cohort_upload_with_empty_file(setup_cohort_upload, page, test_data): """ Test: Upload an empty cohort file and verify error handling. Steps: @@ -93,7 +106,9 @@ def test_cohort_upload_with_empty_file(setup_cohort_upload, import_records_wizar Verification: - Import fails and error is shown. """ - import_records_wizard_page.import_class_list(CohortsFileMapping.EMPTY_FILE) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.EMPTY_FILE + ) @issue("MAV-909") @@ -102,15 +117,8 @@ def test_cohort_upload_with_empty_file(setup_cohort_upload, import_records_wizar @pytest.mark.bug def test_archive_and_unarchive_child_via_cohort_upload( setup_cohort_upload, - programmes_list_page, - programme_overview_page, - programme_children_page, - dashboard_page, - children_search_page, - child_record_page, - child_archive_page, - import_records_wizard_page, - imports_page, + page, + test_data, children, ): """ @@ -125,25 +133,29 @@ def test_archive_and_unarchive_child_via_cohort_upload( """ child = children[Programme.HPV][0] - import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.FIXED_CHILD + ) - imports_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_archive_child_record() - child_archive_page.archive_child_record() + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_archive_child_record() + ChildArchivePage(page).archive_child_record() - child_record_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.tabs.click_children_tab() - programme_children_page.click_import_child_records() + ChildRecordPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).tabs.click_children_tab() + ProgrammeChildrenPage(page).click_import_child_records() - import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) + ImportRecordsWizardPage(page, test_data).import_class_list( + CohortsFileMapping.FIXED_CHILD + ) - imports_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.check_child_is_unarchived() + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).check_child_is_unarchived() @pytest.fixture @@ -155,9 +167,7 @@ def upload_offline_vaccination_hpv(upload_offline_vaccination): @pytest.mark.bug def test_edit_vaccination_dose_to_not_given( upload_offline_vaccination_hpv, - programme_children_page, - vaccination_record_page, - edit_vaccination_record_page, + page, ): """ Test: Edit a vaccination dose to 'not given' and verify outcome. @@ -168,19 +178,18 @@ def test_edit_vaccination_dose_to_not_given( Verification: - Alert confirms vaccination outcome recorded as refused. """ - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_outcome() - edit_vaccination_record_page.click_they_refused_it() - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() - expect_alert_text( - programme_children_page.page, "Vaccination outcome recorded for HPV" - ) + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_outcome() + EditVaccinationRecordPage(page).click_they_refused_it() + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() + expect_alert_text(page, "Vaccination outcome recorded for HPV") @pytest.mark.reports def test_verify_careplus_report_for_hpv( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify CarePlus report for HPV programme. @@ -190,15 +199,16 @@ def test_verify_careplus_report_for_hpv( Verification: - Report is generated in CarePlus format for HPV. """ - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CAREPLUS, ) @pytest.mark.reports def test_verify_careplus_report_for_doubles( - setup_reports, programmes_list_page, programme_overview_page, dashboard_page + setup_reports, + page, ): """ Test: Generate and verify CarePlus report for MenACWY and Td/IPV programmes. @@ -209,20 +219,21 @@ def test_verify_careplus_report_for_doubles( Verification: - Reports are generated in CarePlus format for both MenACWY and Td/IPV. """ - programmes_list_page.click_programme_for_current_year(Programme.MENACWY) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MENACWY) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CAREPLUS, ) - programme_overview_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(Programme.TD_IPV) - programme_overview_page.verify_report_format( + ProgrammeOverviewPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(Programme.TD_IPV) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CAREPLUS, ) @pytest.mark.reports def test_verify_csv_report_for_hpv( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify CSV report for HPV programme. @@ -232,15 +243,16 @@ def test_verify_csv_report_for_hpv( Verification: - Report is generated in CSV format for HPV. """ - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CSV, ) @pytest.mark.reports def test_verify_csv_report_for_doubles( - setup_reports, dashboard_page, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify CSV report for MenACWY and Td/IPV programmes. @@ -251,20 +263,21 @@ def test_verify_csv_report_for_doubles( Verification: - Reports are generated in CSV format for both MenACWY and Td/IPV. """ - programmes_list_page.click_programme_for_current_year(Programme.MENACWY) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MENACWY) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CSV, ) - programme_overview_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(Programme.TD_IPV) - programme_overview_page.verify_report_format( + ProgrammeOverviewPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(Programme.TD_IPV) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CSV, ) @pytest.mark.reports def test_verify_systmone_report_for_hpv( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify SystmOne report for HPV programme. @@ -274,15 +287,16 @@ def test_verify_systmone_report_for_hpv( Verification: - Report is generated in SystmOne format for HPV. """ - programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.HPV) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.SYSTMONE, ) @pytest.mark.reports def test_verify_systmone_report_for_menacwy( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify SystmOne report for MenACWY programme. @@ -292,15 +306,16 @@ def test_verify_systmone_report_for_menacwy( Verification: - Report is generated in SystmOne format for MenACWY. """ - programmes_list_page.click_programme_for_current_year(Programme.MENACWY) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MENACWY) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.SYSTMONE, ) @pytest.mark.reports def test_verify_careplus_report_for_mmr( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify CarePlus report for MMR programme. @@ -310,15 +325,16 @@ def test_verify_careplus_report_for_mmr( Verification: - Report is generated in CarePlus format for MMR. """ - programmes_list_page.click_programme_for_current_year(Programme.MMR) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MMR) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CAREPLUS, ) @pytest.mark.reports def test_verify_csv_report_for_mmr( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify CSV report for MMR programme. @@ -328,15 +344,16 @@ def test_verify_csv_report_for_mmr( Verification: - Report is generated in CSV format for MMR. """ - programmes_list_page.click_programme_for_current_year(Programme.MMR) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MMR) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.CSV, ) @pytest.mark.reports def test_verify_systmone_report_for_mmr( - setup_reports, programmes_list_page, programme_overview_page + setup_reports, + page, ): """ Test: Generate and verify SystmOne report for MMR programme. @@ -346,8 +363,8 @@ def test_verify_systmone_report_for_mmr( Verification: - Report is generated in SystmOne format for MMR. """ - programmes_list_page.click_programme_for_current_year(Programme.MMR) - programme_overview_page.verify_report_format( + ProgrammesListPage(page).click_programme_for_current_year(Programme.MMR) + ProgrammeOverviewPage(page).verify_report_format( report_format=ReportFormat.SYSTMONE, ) @@ -355,10 +372,7 @@ def test_verify_systmone_report_for_mmr( @pytest.mark.accessibility def test_accessibility( setup_reports, - dashboard_page, - accessibility_helper, - programmes_list_page, - programme_overview_page, + page, ): """ Test: Check accessibility of the programmes page. @@ -367,22 +381,22 @@ def test_accessibility( Verification: - Page passes accessibility checks. """ - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - programmes_list_page.click_programme_for_current_year(Programme.FLU) - accessibility_helper.check_accessibility() + ProgrammesListPage(page).click_programme_for_current_year(Programme.FLU) + AccessibilityHelper(page).check_accessibility() - programme_overview_page.click_download_report() - accessibility_helper.check_accessibility() + ProgrammeOverviewPage(page).click_download_report() + AccessibilityHelper(page).check_accessibility() - programme_overview_page.click_continue() - accessibility_helper.check_accessibility() + ProgrammeOverviewPage(page).click_continue() + AccessibilityHelper(page).check_accessibility() - programme_overview_page.header.click_programmes_header() - programmes_list_page.click_programme_for_current_year(Programme.FLU) + ProgrammeOverviewPage(page).header.click_programmes_header() + ProgrammesListPage(page).click_programme_for_current_year(Programme.FLU) - programme_overview_page.tabs.click_sessions_tab() - accessibility_helper.check_accessibility() + ProgrammeOverviewPage(page).tabs.click_sessions_tab() + AccessibilityHelper(page).check_accessibility() - programme_overview_page.tabs.click_children_tab() - accessibility_helper.check_accessibility() + ProgrammeOverviewPage(page).tabs.click_children_tab() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_psd.py b/tests/test_psd.py index 63e9b44552e..23b89dc5292 100644 --- a/tests/test_psd.py +++ b/tests/test_psd.py @@ -1,5 +1,6 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper from mavis.test.data import ClassFileMapping from mavis.test.models import ( ConsentMethod, @@ -8,6 +9,25 @@ VaccinationRecord, Vaccine, ) +from mavis.test.pages import ( + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + LogInPage, + NurseConsentWizardPage, + OnlineConsentWizardPage, + SessionsChildrenPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsPsdPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + StartPage, + VaccinesPage, +) from mavis.test.utils import get_offset_date @@ -15,15 +35,10 @@ def setup_session_with_file_upload( log_in_as_prescriber, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - import_records_wizard_page, - imports_page, + page, + test_data, year_groups, add_vaccine_batch, - vaccines_page, ): def _factory( class_file_mapping: ClassFileMapping, *, schedule_session_for_today: bool = True @@ -31,22 +46,22 @@ def _factory( school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] batch_name = add_vaccine_batch(Vaccine.FLUENZ) - vaccines_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group( + VaccinesPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( school, Programme.FLU.group ) - if schedule_session_for_today and not sessions_overview_page.is_date_scheduled( - get_offset_date(0) - ): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if schedule_session_for_today and not SessionsOverviewPage( + page + ).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( class_file_mapping, year_group, Programme.FLU.group ) - imports_page.header.click_sessions_header() + ImportsPage(page).header.click_sessions_header() return batch_name return _factory @@ -77,22 +92,11 @@ def flu_consent_url(schedule_session_and_get_consent_url, schools): def test_delivering_vaccination_after_psd( setup_session_with_one_child, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - sessions_children_page, - sessions_psd_page, - sessions_patient_page, - sessions_register_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, + page, schools, - nurse_consent_wizard_page, children, - log_in_page, healthcare_assistant, team, - dashboard_page, ): """ Test: A PSD can be created for a child and the vaccination can be @@ -109,45 +113,45 @@ def test_delivering_vaccination_after_psd( school = schools[Programme.FLU][0] fluenz_batch_name = setup_session_with_one_child - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.click_edit_session() - sessions_edit_page.click_change_psd() - sessions_edit_page.answer_whether_psd_should_be_enabled("Yes") - sessions_edit_page.click_continue_button() - sessions_edit_page.click_save_changes() - - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.FLU) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_positive_consent( + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.FLU) + SessionsOverviewPage(page).click_edit_session() + SessionsEditPage(page).click_change_psd() + SessionsEditPage(page).answer_whether_psd_should_be_enabled("Yes") + SessionsEditPage(page).click_continue_button() + SessionsEditPage(page).click_save_changes() + + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.FLU) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_positive_consent( programme=Programme.FLU, consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION, psd_option=True, yes_to_health_questions=True, ) - sessions_overview_page.tabs.click_psds_tab() - sessions_psd_page.search.search_for(str(child)) - sessions_psd_page.check_child_has_psd(child) + SessionsOverviewPage(page).tabs.click_psds_tab() + SessionsPsdPage(page).search.search_for(str(child)) + SessionsPsdPage(page).check_child_has_psd(child) - log_in_page.log_out() - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(healthcare_assistant, team) + LogInPage(page).log_out() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(healthcare_assistant, team) - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.FLU) + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, fluenz_batch_name, ConsentOption.NASAL_SPRAY_OR_INJECTION ) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination( + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination( vaccination_record, psd_option=True ) @@ -155,16 +159,9 @@ def test_delivering_vaccination_after_psd( def test_bulk_adding_psd( flu_consent_url, setup_session_with_two_children, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - sessions_children_page, - sessions_psd_page, + page, schools, children, - dashboard_page, - online_consent_wizard_page, - start_page, ): """ Test: PSDS can be bulk added for children in a session. @@ -178,70 +175,65 @@ def test_bulk_adding_psd( school = schools[Programme.FLU][0] for child in children[Programme.FLU]: - online_consent_wizard_page.go_to_url(flu_consent_url) - start_page.start() + OnlineConsentWizardPage(page).go_to_url(flu_consent_url) + StartPage(page).start() - online_consent_wizard_page.fill_details( + OnlineConsentWizardPage(page).fill_details( child, child.parents[0], schools[Programme.FLU] ) - online_consent_wizard_page.agree_to_flu_vaccination( + OnlineConsentWizardPage(page).agree_to_flu_vaccination( consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION ) - online_consent_wizard_page.fill_address_details(*child.address) - online_consent_wizard_page.answer_health_questions( - online_consent_wizard_page.get_number_of_health_questions_for_flu( + OnlineConsentWizardPage(page).fill_address_details(*child.address) + OnlineConsentWizardPage(page).answer_health_questions( + OnlineConsentWizardPage(page).get_number_of_health_questions_for_flu( ConsentOption.NASAL_SPRAY_OR_INJECTION ), yes_to_health_questions=False, ) - online_consent_wizard_page.click_confirm() - online_consent_wizard_page.check_final_consent_message( + OnlineConsentWizardPage(page).click_confirm() + OnlineConsentWizardPage(page).check_final_consent_message( child, programmes=[Programme.FLU], yes_to_health_questions=False, consent_option=ConsentOption.NASAL_SPRAY_OR_INJECTION, ) - dashboard_page.navigate() - dashboard_page.click_sessions() + DashboardPage(page).navigate() + DashboardPage(page).click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.click_edit_session() - sessions_edit_page.click_change_psd() - sessions_edit_page.answer_whether_psd_should_be_enabled("Yes") - sessions_edit_page.click_continue_button() - sessions_edit_page.click_save_changes() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.FLU) + SessionsOverviewPage(page).click_edit_session() + SessionsEditPage(page).click_change_psd() + SessionsEditPage(page).answer_whether_psd_should_be_enabled("Yes") + SessionsEditPage(page).click_continue_button() + SessionsEditPage(page).click_save_changes() - sessions_overview_page.tabs.click_children_tab() + SessionsOverviewPage(page).tabs.click_children_tab() for child in children[Programme.FLU]: - sessions_children_page.get_flu_consent_status_locator_from_search(child) + SessionsChildrenPage(page).get_flu_consent_status_locator_from_search(child) - sessions_children_page.tabs.click_psds_tab() + SessionsChildrenPage(page).tabs.click_psds_tab() for child in children[Programme.FLU]: - sessions_psd_page.search.search_for(str(child)) - sessions_psd_page.check_child_does_not_have_psd(child) + SessionsPsdPage(page).search.search_for(str(child)) + SessionsPsdPage(page).check_child_does_not_have_psd(child) - sessions_psd_page.verify_psd_banner_has_patients(2) + SessionsPsdPage(page).verify_psd_banner_has_patients(2) - sessions_psd_page.click_add_new_psds() - sessions_psd_page.click_yes_add_psds() + SessionsPsdPage(page).click_add_new_psds() + SessionsPsdPage(page).click_yes_add_psds() - sessions_psd_page.verify_psd_banner_has_patients(0) + SessionsPsdPage(page).verify_psd_banner_has_patients(0) for child in children[Programme.FLU]: - sessions_psd_page.search.search_for(str(child)) - sessions_psd_page.check_child_has_psd(child) + SessionsPsdPage(page).search.search_for(str(child)) + SessionsPsdPage(page).check_child_has_psd(child) @pytest.mark.accessibility def test_accessibility( setup_session_with_one_child, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - sessions_psd_page, - accessibility_helper, - dashboard_page, + page, schools, ): """ @@ -254,22 +246,26 @@ def test_accessibility( """ school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV.group) - if not sessions_overview_page.is_date_scheduled(get_offset_date(7)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=7, skip_weekends=False) - sessions_overview_page.click_edit_session() - sessions_edit_page.click_change_psd() - accessibility_helper.check_accessibility() - - sessions_edit_page.answer_whether_psd_should_be_enabled("Yes") - sessions_edit_page.click_continue_button() - sessions_edit_page.click_save_changes() - sessions_overview_page.tabs.click_psds_tab() - accessibility_helper.check_accessibility() - - sessions_psd_page.click_add_new_psds() - accessibility_helper.check_accessibility() - - sessions_psd_page.click_yes_add_psds() - accessibility_helper.check_accessibility() + SessionsSearchPage(page).click_session_for_programme_group( + school, Programme.HPV.group + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(7)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=7, skip_weekends=False + ) + SessionsOverviewPage(page).click_edit_session() + SessionsEditPage(page).click_change_psd() + AccessibilityHelper(page).check_accessibility() + + SessionsEditPage(page).answer_whether_psd_should_be_enabled("Yes") + SessionsEditPage(page).click_continue_button() + SessionsEditPage(page).click_save_changes() + SessionsOverviewPage(page).tabs.click_psds_tab() + AccessibilityHelper(page).check_accessibility() + + SessionsPsdPage(page).click_add_new_psds() + AccessibilityHelper(page).check_accessibility() + + SessionsPsdPage(page).click_yes_add_psds() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_reporting.py b/tests/test_reporting.py index 3fce48a875a..d76dc60a454 100644 --- a/tests/test_reporting.py +++ b/tests/test_reporting.py @@ -3,28 +3,34 @@ from mavis.test.models import ( Programme, ) +from mavis.test.pages import ( + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + EditVaccinationRecordPage, + LogInPage, + LogOutPage, + ReportsVaccinationsPage, + VaccinationRecordPage, +) pytestmark = pytest.mark.reporting @pytest.fixture def upload_offline_vaccination_injected_flu( - upload_offline_vaccination, reports_vaccinations_page, dashboard_page + upload_offline_vaccination, + page, ): - reports_vaccinations_page.navigate_and_refresh_reports() - dashboard_page.navigate() + ReportsVaccinationsPage(page).navigate_and_refresh_reports() + DashboardPage(page).navigate() yield from upload_offline_vaccination(Programme.FLU) def test_report_view( upload_offline_vaccination_injected_flu, schools, - reports_vaccinations_page, - dashboard_page, - children_search_page, - child_record_page, - vaccination_record_page, - edit_vaccination_record_page, + page, children, ): """ @@ -43,61 +49,61 @@ def test_report_view( child = children[Programme.FLU][0] school = schools[Programme.FLU][0] - reports_vaccinations_page.navigate() - reports_vaccinations_page.check_filter_for_programme(Programme.FLU) + ReportsVaccinationsPage(page).navigate() + ReportsVaccinationsPage(page).check_filter_for_programme(Programme.FLU) - vaccinated_count = reports_vaccinations_page.get_children_count("Vaccinated") - unvaccinated_count = reports_vaccinations_page.get_children_count("Not vaccinated") + vaccinated_count = ReportsVaccinationsPage(page).get_children_count("Vaccinated") + unvaccinated_count = ReportsVaccinationsPage(page).get_children_count( + "Not vaccinated" + ) ( expected_cohort_count, expected_unvaccinated_percentage, expected_vaccinated_percentage, - ) = reports_vaccinations_page.get_expected_cohort_and_percentage_strings( + ) = ReportsVaccinationsPage(page).get_expected_cohort_and_percentage_strings( unvaccinated_count, vaccinated_count ) - reports_vaccinations_page.check_cohort_has_n_children(expected_cohort_count) - reports_vaccinations_page.check_category_percentage( + ReportsVaccinationsPage(page).check_cohort_has_n_children(expected_cohort_count) + ReportsVaccinationsPage(page).check_category_percentage( "Not vaccinated", expected_unvaccinated_percentage ) - reports_vaccinations_page.check_category_percentage( + ReportsVaccinationsPage(page).check_category_percentage( "Vaccinated", expected_vaccinated_percentage ) - reports_vaccinations_page.header.click_children_header() - children_search_page.search_with_all_filters_for_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_vaccination_details(school) - vaccination_record_page.click_edit_vaccination_record() - edit_vaccination_record_page.click_change_outcome() - edit_vaccination_record_page.click_they_refused_it() - edit_vaccination_record_page.click_continue() - edit_vaccination_record_page.click_save_changes() - - reports_vaccinations_page.navigate_and_refresh_reports() - reports_vaccinations_page.check_filter_for_programme(Programme.FLU) + ReportsVaccinationsPage(page).header.click_children_header() + ChildrenSearchPage(page).search_with_all_filters_for_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_vaccination_details(school) + VaccinationRecordPage(page).click_edit_vaccination_record() + EditVaccinationRecordPage(page).click_change_outcome() + EditVaccinationRecordPage(page).click_they_refused_it() + EditVaccinationRecordPage(page).click_continue() + EditVaccinationRecordPage(page).click_save_changes() + + ReportsVaccinationsPage(page).navigate_and_refresh_reports() + ReportsVaccinationsPage(page).check_filter_for_programme(Programme.FLU) ( expected_cohort_count, expected_unvaccinated_percentage, expected_vaccinated_percentage, - ) = reports_vaccinations_page.get_expected_cohort_and_percentage_strings( + ) = ReportsVaccinationsPage(page).get_expected_cohort_and_percentage_strings( unvaccinated_count + 1, vaccinated_count ) - reports_vaccinations_page.check_cohort_has_n_children(expected_cohort_count) - reports_vaccinations_page.check_category_percentage( + ReportsVaccinationsPage(page).check_cohort_has_n_children(expected_cohort_count) + ReportsVaccinationsPage(page).check_category_percentage( "Not vaccinated", expected_unvaccinated_percentage ) - reports_vaccinations_page.check_category_percentage( + ReportsVaccinationsPage(page).check_category_percentage( "Vaccinated", expected_vaccinated_percentage ) def test_log_out_via_reporting_component( - log_in_page, - log_out_page, - reports_vaccinations_page, + page, nurse, team, ): @@ -111,8 +117,8 @@ def test_log_out_via_reporting_component( Verification: - User is successfully logged out and the log out page is shown. """ - log_in_page.navigate() - log_in_page.log_in_and_choose_team_if_necessary(nurse, team) - reports_vaccinations_page.navigate() - log_in_page.log_out_via_reporting_component() - log_out_page.verify_log_out_page() + LogInPage(page).navigate() + LogInPage(page).log_in_and_choose_team_if_necessary(nurse, team) + ReportsVaccinationsPage(page).navigate() + LogInPage(page).log_out_via_reporting_component() + LogOutPage(page).verify_log_out_page() diff --git a/tests/test_reset.py b/tests/test_reset.py index b596df6a8d0..e595fb39df4 100644 --- a/tests/test_reset.py +++ b/tests/test_reset.py @@ -9,6 +9,18 @@ VaccinationRecord, Vaccine, ) +from mavis.test.pages import ( + DashboardPage, + ImportRecordsWizardPage, + NurseConsentWizardPage, + SessionsChildrenPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, +) from mavis.test.utils import ( MAVIS_NOTE_LENGTH_LIMIT, generate_random_string, @@ -21,11 +33,8 @@ def setup_all_programmes( log_in_as_nurse, add_vaccine_batch, schools, - dashboard_page, - import_records_wizard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, + page, + test_data, children, ): school = schools["doubles"][0] @@ -37,16 +46,18 @@ def setup_all_programmes( Programme.FLU: add_vaccine_batch(Vaccine.FLUENZ), } for programme_group in [Programme.HPV, "doubles", Programme.FLU]: - dashboard_page.header.click_mavis_header() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, programme_group) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + DashboardPage(page).header.click_mavis_header() + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + school, programme_group + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( ClassFileMapping.FIXED_CHILD, child.year_group, "doubles", @@ -61,14 +72,7 @@ def setup_all_programmes( def test_pre_screening_questions_prefilled_for_multiple_vaccinations( setup_all_programmes, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_register_page, - sessions_children_page, - sessions_patient_page, - sessions_vaccination_wizard_page, - nurse_consent_wizard_page, + page, children, ): """ @@ -93,14 +97,16 @@ def test_pre_screening_questions_prefilled_for_multiple_vaccinations( batch_names = setup_all_programmes for programme_group in [Programme.HPV, "doubles", Programme.FLU]: - dashboard_page.header.click_mavis_header() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, programme_group) + DashboardPage(page).header.click_mavis_header() + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + school, programme_group + ) if programme_group is Programme.HPV: - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) programmes = ( [Programme.MENACWY, Programme.TD_IPV] if programme_group == "doubles" @@ -113,11 +119,11 @@ def test_pre_screening_questions_prefilled_for_multiple_vaccinations( else ConsentOption.INJECTION ) - sessions_patient_page.click_programme_tab(programme) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_positive_consent( + SessionsPatientPage(page).click_programme_tab(programme) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_positive_consent( programme=programme, consent_option=consent_option, ) @@ -128,8 +134,10 @@ def test_pre_screening_questions_prefilled_for_multiple_vaccinations( target_length=MAVIS_NOTE_LENGTH_LIMIT + 1, generate_spaced_words=True, ) - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.set_up_vaccination(vaccination_record, notes=notes) - sessions_vaccination_wizard_page.record_vaccination( + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).set_up_vaccination( + vaccination_record, notes=notes + ) + SessionsVaccinationWizardPage(page).record_vaccination( vaccination_record, notes=notes ) diff --git a/tests/test_school_moves.py b/tests/test_school_moves.py index 4b3b9ea45ab..7a1243721f3 100644 --- a/tests/test_school_moves.py +++ b/tests/test_school_moves.py @@ -1,9 +1,24 @@ import pytest from playwright.sync_api import expect +from mavis.test.accessibility import AccessibilityHelper from mavis.test.data import ClassFileMapping from mavis.test.models import Programme -from mavis.test.utils import get_offset_date +from mavis.test.pages import ( + ChildActivityLogPage, + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + DownloadSchoolMovesPage, + ImportRecordsWizardPage, + ImportsPage, + ReviewSchoolMovePage, + SchoolMovesPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsSearchPage, +) +from mavis.test.utils import get_current_datetime, get_offset_date pytestmark = pytest.mark.school_moves @@ -11,18 +26,10 @@ @pytest.fixture def setup_confirm_and_ignore( log_in_as_nurse, + page, test_data, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - import_records_wizard_page, - imports_page, year_groups, - children_search_page, - child_record_page, - child_activity_log_page, children, ): schools = schools[Programme.HPV] @@ -34,48 +41,63 @@ def setup_confirm_and_ignore( ) def upload_class_list(): - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.select_year_groups(year_group) - import_records_wizard_page.set_input_file(input_file_path) - import_records_wizard_page.click_continue() - import_records_wizard_page.record_upload_time() - import_records_wizard_page.click_uploaded_file_datetime() - import_records_wizard_page.wait_for_processed() - if import_records_wizard_page.is_preview_page_link_visible(): - import_records_wizard_page.approve_preview_if_shown() - import_records_wizard_page.verify_upload_output(output_file_path) - - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.HPV) - if not sessions_overview_page.is_date_scheduled(get_offset_date(7)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=7, skip_weekends=False) - sessions_overview_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[1], Programme.HPV) - if not sessions_overview_page.is_date_scheduled(get_offset_date(7)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=7, skip_weekends=False) - sessions_overview_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.HPV) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).select_year_groups(year_group) + ImportRecordsWizardPage(page, test_data).set_input_file(input_file_path) + ImportRecordsWizardPage(page, test_data).click_continue() + upload_time = get_current_datetime() + ImportRecordsWizardPage(page, test_data).click_uploaded_file_datetime( + upload_time + ) + ImportRecordsWizardPage(page, test_data).wait_for_processed() + if ImportRecordsWizardPage(page, test_data).is_preview_page_link_visible(): + ImportRecordsWizardPage(page, test_data).approve_preview_if_shown( + upload_time + ) + ImportRecordsWizardPage(page, test_data).verify_upload_output(output_file_path) + + DashboardPage(page).click_sessions() + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.HPV + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(7)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=7, skip_weekends=False + ) + SessionsOverviewPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[1], Programme.HPV + ) + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(7)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=7, skip_weekends=False + ) + SessionsOverviewPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[0], Programme.HPV + ) upload_class_list() - imports_page.header.click_children_header() - children_search_page.search_for_a_child_name(str(children[0])) - children_search_page.click_record_for_child(children[0]) - child_record_page.tabs.click_activity_log() - child_activity_log_page.expect_activity_log_header( + ImportsPage(page).header.click_children_header() + ChildrenSearchPage(page).search_for_a_child_name(str(children[0])) + ChildrenSearchPage(page).click_record_for_child(children[0]) + ChildRecordPage(page).tabs.click_activity_log() + ChildActivityLogPage(page).expect_activity_log_header( f"Added to the session at {schools[0]}" ) - child_activity_log_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(schools[1], Programme.HPV) + ChildActivityLogPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + schools[1], Programme.HPV + ) upload_class_list() - imports_page.header.click_school_moves_header() + ImportsPage(page).header.click_school_moves_header() def test_confirm_and_ignore( setup_confirm_and_ignore, schools, - school_moves_page, - review_school_move_page, + page, children, ): """ @@ -94,31 +116,30 @@ def test_confirm_and_ignore( schools = schools[Programme.HPV] child_1, child_2 = children[Programme.HPV][0], children[Programme.HPV][1] - row1 = school_moves_page.get_row_for_child(child_1) - row2 = school_moves_page.get_row_for_child(child_2) + row1 = SchoolMovesPage(page).get_row_for_child(child_1) + row2 = SchoolMovesPage(page).get_row_for_child(child_2) expect(row1).to_contain_text(f"Class list updated {schools[0]} to {schools[1]}") expect(row2).to_contain_text(f"Class list updated {schools[0]} to {schools[1]}") - school_moves_page.click_child(child_1) - review_school_move_page.confirm() + SchoolMovesPage(page).click_child(child_1) + ReviewSchoolMovePage(page).confirm() - expect(school_moves_page.confirmed_alert).to_contain_text( + expect(SchoolMovesPage(page).confirmed_alert).to_contain_text( f"{child_1!s}’s school record updated", ) - school_moves_page.click_child(child_2) - review_school_move_page.ignore() + SchoolMovesPage(page).click_child(child_2) + ReviewSchoolMovePage(page).ignore() - expect(school_moves_page.ignored_alert).to_contain_text( + expect(SchoolMovesPage(page).ignored_alert).to_contain_text( f"{child_2!s}’s school move ignored", ) def test_download_school_moves_csv( setup_confirm_and_ignore, - school_moves_page, - download_school_moves_page, + page, schools, children, ): @@ -135,10 +156,10 @@ def test_download_school_moves_csv( """ school = schools[Programme.HPV][0] children = children[Programme.HPV] - school_moves_page.click_download() - download_school_moves_page.enter_date_range() - school_moves_csv = download_school_moves_page.confirm_and_get_school_moves_csv() - download_school_moves_page.verify_school_moves_csv_contents( + SchoolMovesPage(page).click_download() + DownloadSchoolMovesPage(page).enter_date_range() + school_moves_csv = DownloadSchoolMovesPage(page).confirm_and_get_school_moves_csv() + DownloadSchoolMovesPage(page).verify_school_moves_csv_contents( school_moves_csv, children, school ) @@ -146,10 +167,7 @@ def test_download_school_moves_csv( @pytest.mark.accessibility def test_accessibility( setup_confirm_and_ignore, - dashboard_page, - accessibility_helper, - school_moves_page, - download_school_moves_page, + page, children, ): """ @@ -163,14 +181,14 @@ def test_accessibility( """ child = children[Programme.HPV][0] - accessibility_helper.check_accessibility() + AccessibilityHelper(page).check_accessibility() - school_moves_page.click_download() - accessibility_helper.check_accessibility() + SchoolMovesPage(page).click_download() + AccessibilityHelper(page).check_accessibility() - download_school_moves_page.click_continue() - accessibility_helper.check_accessibility() + DownloadSchoolMovesPage(page).click_continue() + AccessibilityHelper(page).check_accessibility() - download_school_moves_page.header.click_school_moves_header() - school_moves_page.click_child(child) - accessibility_helper.check_accessibility() + DownloadSchoolMovesPage(page).header.click_school_moves_header() + SchoolMovesPage(page).click_child(child) + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_sessions.py b/tests/test_sessions.py index d6eb44378a1..0a5898bedbb 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -1,46 +1,65 @@ import pytest from playwright.sync_api import expect +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.data import ClassFileMapping from mavis.test.models import ConsentMethod, Programme, VaccinationRecord, Vaccine +from mavis.test.pages import ( + ChildRecordPage, + ChildrenSearchPage, + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + NurseConsentWizardPage, + SessionsChildrenPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsPatientSessionActivityPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, +) from mavis.test.utils import expect_alert_text, expect_details, get_offset_date pytestmark = pytest.mark.sessions @pytest.fixture -def setup_tests(log_in_as_nurse, dashboard_page): - dashboard_page.click_sessions() +def setup_tests(log_in_as_nurse, page): + DashboardPage(page).click_sessions() @pytest.fixture def setup_session_with_file_upload( setup_tests, schools, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - import_records_wizard_page, - imports_page, + page, + test_data, year_groups, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] def _setup(class_list_file): - sessions_search_page.click_session_for_programme_group( + SessionsSearchPage(page).click_session_for_programme_group( school, Programme.HPV.group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list(class_list_file, year_group) - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( + class_list_file, year_group + ) + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + school, Programme.HPV + ) yield return _setup @@ -64,10 +83,7 @@ def setup_fixed_child(setup_session_with_file_upload): def test_session_lifecycle( setup_tests, schools, - dashboard_page, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, + page, ): """ Test: Create, edit, and delete a session for a school and verify lifecycle actions. @@ -81,21 +97,19 @@ def test_session_lifecycle( """ school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=14) - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=1) - sessions_overview_page.click_edit_session() - sessions_edit_page.edit_a_session_to_today() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session(offset_days=14) + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session(offset_days=1) + SessionsOverviewPage(page).click_edit_session() + SessionsEditPage(page).edit_a_session_to_today() def test_create_invalid_session( setup_tests, schools, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, + page, ): """ Test: Attempt to create an invalid session and verify error handling. @@ -107,21 +121,20 @@ def test_create_invalid_session( - Error is shown or invalid session is not created. """ school = schools[Programme.HPV][0] - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.schedule_or_edit_session() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).schedule_or_edit_session() - sessions_edit_page.create_invalid_session() + SessionsEditPage(page).create_invalid_session() - sessions_edit_page.create_session_in_previous_academic_year() + SessionsEditPage(page).create_session_in_previous_academic_year() - sessions_edit_page.create_session_in_next_academic_year() + SessionsEditPage(page).create_session_in_next_academic_year() @pytest.mark.bug def test_attendance_filters_functionality( setup_positive_upload, - sessions_overview_page, - sessions_register_page, + page, year_groups, ): """ @@ -135,25 +148,26 @@ def test_attendance_filters_functionality( """ year_group = year_groups[Programme.HPV] - sessions_overview_page.tabs.click_register_tab() - search_summary = sessions_register_page.page.get_by_text("Showing 1 to") + SessionsOverviewPage(page).tabs.click_register_tab() + search_summary = SessionsRegisterPage(page).page.get_by_text("Showing 1 to") expect(search_summary).not_to_have_text("Showing 1 to 1 of 1 children") - sessions_register_page.search.check_year_checkbox(year_group) - sessions_register_page.search.click_on_update_results() + SessionsRegisterPage(page).search.check_year_checkbox(year_group) + SessionsRegisterPage(page).search.click_on_update_results() expect(search_summary).to_contain_text("Showing 1 to") - sessions_register_page.search.uncheck_year_checkbox(year_group) - sessions_register_page.search.click_advanced_filters() - sessions_register_page.search.check_archived_records_checkbox() - sessions_register_page.search.click_on_update_results() + SessionsRegisterPage(page).search.uncheck_year_checkbox(year_group) + SessionsRegisterPage(page).search.click_advanced_filters() + SessionsRegisterPage(page).search.check_archived_records_checkbox() + SessionsRegisterPage(page).search.click_on_update_results() expect(search_summary).not_to_be_visible() @issue("MAV-1018") @pytest.mark.bug def test_session_search_functionality( - setup_random_child, sessions_overview_page, sessions_children_page + setup_random_child, + page, ): """ Test: Verify the search functionality within a session. @@ -163,18 +177,15 @@ def test_session_search_functionality( Verification: - Search returns expected results for the session. """ - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.verify_search() + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.verify_search() @issue("MAV-1381") @pytest.mark.bug def test_consent_filters( setup_fixed_child, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - nurse_consent_wizard_page, + page, children, ): """ @@ -187,27 +198,23 @@ def test_consent_filters( - Consent refused checkbox is checked for the child. """ child = children[Programme.HPV][0] - sessions_overview_page.review_child_with_no_response() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_record_a_new_consent_response() + SessionsOverviewPage(page).review_child_with_no_response() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PAPER) - nurse_consent_wizard_page.record_parent_refuse_consent() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PAPER) + NurseConsentWizardPage(page).record_parent_refuse_consent() - sessions_children_page.tabs.click_overview_tab() - sessions_overview_page.click_has_a_refusal() - sessions_children_page.expect_has_a_refusal_to_be_selected() + SessionsChildrenPage(page).tabs.click_overview_tab() + SessionsOverviewPage(page).click_has_a_refusal() + SessionsChildrenPage(page).expect_has_a_refusal_to_be_selected() @issue("MAV-1265") def test_session_activity_notes_order( setup_fixed_child, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_patient_session_activity_page, + page, schools, children, ): @@ -226,31 +233,28 @@ def test_session_activity_notes_order( note_1 = "Note 1" note_2 = "Note 2" - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_session_activity_and_notes() - sessions_patient_session_activity_page.add_note(note_1) - sessions_patient_session_activity_page.add_note(note_2) - sessions_patient_session_activity_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_for(str(child)) - sessions_children_page.search.check_note_appears_in_search(child, note_2) - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_session_activity_and_notes() - sessions_patient_session_activity_page.check_notes_appear_in_order([note_2, note_1]) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_session_activity_and_notes() + SessionsPatientSessionActivityPage(page).add_note(note_1) + SessionsPatientSessionActivityPage(page).add_note(note_2) + SessionsPatientSessionActivityPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_for(str(child)) + SessionsChildrenPage(page).search.check_note_appears_in_search(child, note_2) + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_session_activity_and_notes() + SessionsPatientSessionActivityPage(page).check_notes_appear_in_order( + [note_2, note_1] + ) @pytest.mark.rav def test_triage_consent_given_and_triage_outcome( setup_fixed_child, schools, - sessions_search_page, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - dashboard_page, - nurse_consent_wizard_page, + page, children, ): """ @@ -265,38 +269,34 @@ def test_triage_consent_given_and_triage_outcome( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PHONE) - nurse_consent_wizard_page.record_parent_positive_consent( + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PHONE) + NurseConsentWizardPage(page).record_parent_positive_consent( yes_to_health_questions=True ) - sessions_patient_page.header.click_sessions_header() + SessionsPatientPage(page).header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.tabs.click_register_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_update_triage_outcome() - sessions_patient_page.select_yes_safe_to_vaccinate() - sessions_patient_page.click_save_triage() - sessions_patient_page.verify_triage_updated_for_child() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_update_triage_outcome() + SessionsPatientPage(page).select_yes_safe_to_vaccinate() + SessionsPatientPage(page).click_save_triage() + SessionsPatientPage(page).verify_triage_updated_for_child() @pytest.mark.rav def test_consent_refused_and_activity_log( setup_fixed_child, - sessions_overview_page, - sessions_children_page, - sessions_patient_page, - sessions_patient_session_activity_page, - nurse_consent_wizard_page, + page, children, ): """ @@ -310,20 +310,20 @@ def test_consent_refused_and_activity_log( """ child = children[Programme.HPV][0] - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.HPV) - sessions_patient_page.click_record_a_new_consent_response() + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.HPV) + SessionsPatientPage(page).click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PAPER) - nurse_consent_wizard_page.record_parent_refuse_consent() - expect_alert_text(nurse_consent_wizard_page.page, str(child)) + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PAPER) + NurseConsentWizardPage(page).record_parent_refuse_consent() + expect_alert_text(page, str(child)) - sessions_children_page.select_has_a_refusal() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_session_activity_and_notes() - sessions_patient_session_activity_page.check_session_activity_entry( + SessionsChildrenPage(page).select_has_a_refusal() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_session_activity_and_notes() + SessionsPatientSessionActivityPage(page).check_session_activity_entry( f"Consent refused by {child.parents[0].name_and_relationship}", ) @@ -335,17 +335,7 @@ def test_verify_excel_export_and_clinic_invitation( add_vaccine_batch, schools, clinics, - children_search_page, - child_record_page, - sessions_edit_page, - sessions_search_page, - sessions_overview_page, - sessions_patient_page, - sessions_register_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - dashboard_page, - nurse_consent_wizard_page, + page, children, ): """ @@ -363,52 +353,52 @@ def test_verify_excel_export_and_clinic_invitation( school = schools[Programme.HPV][0] batch_name = add_vaccine_batch(Vaccine.GARDASIL_9) - sessions_overview_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group( + SessionsOverviewPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( "Community clinic", Programme.HPV.group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session(offset_days=0, skip_weekends=False) - - sessions_overview_page.header.click_children_header() - children_search_page.search_for_a_child_name(str(child)) - children_search_page.click_record_for_child(child) - child_record_page.click_invite_to_community_clinic() - child_record_page.click_session_for_programme( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( + offset_days=0, skip_weekends=False + ) + + SessionsOverviewPage(page).header.click_children_header() + ChildrenSearchPage(page).search_for_a_child_name(str(child)) + ChildrenSearchPage(page).click_record_for_child(child) + ChildRecordPage(page).click_invite_to_community_clinic() + ChildRecordPage(page).click_session_for_programme( "Community clinic", Programme.HPV, check_date=True, ) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.IN_PERSON) - nurse_consent_wizard_page.record_parent_positive_consent() - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.IN_PERSON) + NurseConsentWizardPage(page).record_parent_positive_consent() + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.HPV, batch_name) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination( + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination( vaccination_record, at_school=False ) - sessions_vaccination_wizard_page.check_location_radio(clinics[0]) - sessions_vaccination_wizard_page.click_continue_button() - sessions_vaccination_wizard_page.click_confirm_button() - expect_alert_text( - sessions_patient_page.page, "Vaccination outcome recorded for HPV" - ) - sessions_patient_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - assert sessions_overview_page.get_session_id_from_offline_excel() + SessionsVaccinationWizardPage(page).check_location_radio(clinics[0]) + SessionsVaccinationWizardPage(page).click_continue_button() + SessionsVaccinationWizardPage(page).click_confirm_button() + expect_alert_text(page, "Vaccination outcome recorded for HPV") + SessionsPatientPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + assert SessionsOverviewPage(page).get_session_id_from_offline_excel() @issue("MAV-2023") def test_session_verify_consent_reminders_and_pdf_downloads( setup_fixed_child, - sessions_overview_page, + page, schools, ): """ @@ -423,17 +413,14 @@ def test_session_verify_consent_reminders_and_pdf_downloads( """ school = schools[Programme.HPV][0] - sessions_overview_page.click_send_reminders(school) - sessions_overview_page.download_consent_form(Programme.HPV) + SessionsOverviewPage(page).click_send_reminders(school) + SessionsOverviewPage(page).download_consent_form(Programme.HPV) def test_editing_session_programmes( setup_fixed_child, children, - sessions_overview_page, - sessions_edit_page, - sessions_children_page, - sessions_patient_page, + page, ): """ Test: Edit the programmes of an existing session and verify changes. @@ -447,29 +434,24 @@ def test_editing_session_programmes( """ child = children[Programme.HPV][0] - sessions_overview_page.click_edit_session() - sessions_edit_page.click_change_programmes() - sessions_edit_page.add_programme(Programme.FLU) - sessions_edit_page.click_continue_button() - expect_details(sessions_edit_page.page, "Programmes", "Flu HPV") - sessions_edit_page.click_save_changes() - sessions_edit_page.expect_session_to_have_programmes([Programme.FLU, Programme.HPV]) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.FLU) + SessionsOverviewPage(page).click_edit_session() + SessionsEditPage(page).click_change_programmes() + SessionsEditPage(page).add_programme(Programme.FLU) + SessionsEditPage(page).click_continue_button() + expect_details(page, "Programmes", "Flu HPV") + SessionsEditPage(page).click_save_changes() + SessionsEditPage(page).expect_session_to_have_programmes( + [Programme.FLU, Programme.HPV] + ) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.FLU) @pytest.mark.accessibility def test_accessibility( setup_fixed_child, - dashboard_page, - accessibility_helper, - sessions_search_page, - sessions_overview_page, - sessions_edit_page, - sessions_children_page, - sessions_patient_page, - sessions_register_page, + page, schools, children, ): @@ -484,29 +466,29 @@ def test_accessibility( school = schools[Programme.HPV][0] child = children[Programme.HPV][0] - sessions_overview_page.header.click_sessions_header() - accessibility_helper.check_accessibility() + SessionsOverviewPage(page).header.click_sessions_header() + AccessibilityHelper(page).check_accessibility() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - accessibility_helper.check_accessibility() + SessionsSearchPage(page).click_session_for_programme_group(school, Programme.HPV) + AccessibilityHelper(page).check_accessibility() - sessions_overview_page.click_edit_session() - accessibility_helper.check_accessibility() + SessionsOverviewPage(page).click_edit_session() + AccessibilityHelper(page).check_accessibility() - sessions_edit_page.click_change_session_dates() - accessibility_helper.check_accessibility() + SessionsEditPage(page).click_change_session_dates() + AccessibilityHelper(page).check_accessibility() - sessions_edit_page.click_back() - sessions_edit_page.click_save_changes() + SessionsEditPage(page).click_back() + SessionsEditPage(page).click_save_changes() - sessions_overview_page.tabs.click_children_tab() - accessibility_helper.check_accessibility() + SessionsOverviewPage(page).tabs.click_children_tab() + AccessibilityHelper(page).check_accessibility() - sessions_children_page.tabs.click_register_tab() - accessibility_helper.check_accessibility() + SessionsChildrenPage(page).tabs.click_register_tab() + AccessibilityHelper(page).check_accessibility() - sessions_register_page.search.search_and_click_child(child) - accessibility_helper.check_accessibility() + SessionsRegisterPage(page).search.search_and_click_child(child) + AccessibilityHelper(page).check_accessibility() - sessions_patient_page.click_session_activity_and_notes() - accessibility_helper.check_accessibility() + SessionsPatientPage(page).click_session_activity_and_notes() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_start.py b/tests/test_start.py index d43531e980a..5622bcb2738 100644 --- a/tests/test_start.py +++ b/tests/test_start.py @@ -1,8 +1,13 @@ import pytest +from mavis.test.accessibility import AccessibilityHelper +from mavis.test.pages import ( + StartPage, +) + @pytest.mark.smoke -def test_start_page_elements_visible(start_page): +def test_start_page_elements_visible(page): """ Test: Verify that the start page heading and start link are visible. Steps: @@ -12,12 +17,12 @@ def test_start_page_elements_visible(start_page): Verification: - Both the heading and start link are present and visible on the page. """ - start_page.navigate() + StartPage(page).navigate() - start_page.check_all_start_page_elements_visible() + StartPage(page).check_all_start_page_elements_visible() -def test_accessibility_statement_link(start_page): +def test_accessibility_statement_link(page): """ Test: Verify that the Accessibility Statement link is present and clickable. Steps: @@ -27,12 +32,12 @@ def test_accessibility_statement_link(start_page): Verification: - The Accessibility Statement page is displayed. """ - start_page.navigate() - start_page.click_accessibility_statement() - start_page.check_accessibility_statement_shown() + StartPage(page).navigate() + StartPage(page).click_accessibility_statement() + StartPage(page).check_accessibility_statement_shown() -def test_service_guidance_link(start_page): +def test_service_guidance_link(page): """ Test: Verify that the Service Guidance link is present and clickable. Steps: @@ -42,12 +47,12 @@ def test_service_guidance_link(start_page): Verification: - The Service Guidance page is displayed in a new tab. """ - start_page.navigate() - start_page.check_service_guidance_tab_opens() + StartPage(page).navigate() + StartPage(page).check_service_guidance_tab_opens() @pytest.mark.accessibility -def test_accessibility(start_page, accessibility_helper): +def test_accessibility(page): """ Test: Verify that the start page passes accessibility checks. Steps: @@ -56,5 +61,5 @@ def test_accessibility(start_page, accessibility_helper): Verification: - No accessibility violations are found on the start page. """ - start_page.navigate() - accessibility_helper.check_accessibility() + StartPage(page).navigate() + AccessibilityHelper(page).check_accessibility() diff --git a/tests/test_tallying.py b/tests/test_tallying.py index cd8cc4fbbf2..87730049110 100644 --- a/tests/test_tallying.py +++ b/tests/test_tallying.py @@ -11,14 +11,29 @@ VaccinationRecord, Vaccine, ) +from mavis.test.pages import ( + DashboardPage, + ImportRecordsWizardPage, + ImportsPage, + NurseConsentWizardPage, + SessionsChildrenPage, + SessionsEditPage, + SessionsOverviewPage, + SessionsPatientPage, + SessionsRecordVaccinationsPage, + SessionsRegisterPage, + SessionsSearchPage, + SessionsVaccinationWizardPage, + VaccinesPage, +) from mavis.test.utils import get_offset_date pytestmark = pytest.mark.tallying @pytest.fixture -def setup_tests(log_in_as_nurse, dashboard_page): - dashboard_page.click_sessions() +def setup_tests(log_in_as_nurse, page): + DashboardPage(page).click_sessions() @pytest.fixture @@ -26,13 +41,8 @@ def setup_session_with_file_upload( setup_tests, add_vaccine_batch, schools, - dashboard_page, - sessions_edit_page, - sessions_search_page, - sessions_overview_page, - import_records_wizard_page, - imports_page, - vaccines_page, + page, + test_data, year_groups, ): school = schools[Programme.FLU][0] @@ -43,21 +53,23 @@ def _setup(class_list_file): vaccine: add_vaccine_batch(vaccine) for vaccine in [Vaccine.SEQUIRUS, Vaccine.FLUENZ] } - vaccines_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group( + VaccinesPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( school, Programme.FLU.group ) - if not sessions_overview_page.is_date_scheduled(get_offset_date(0)): - sessions_overview_page.schedule_or_edit_session() - sessions_edit_page.schedule_a_valid_session( + if not SessionsOverviewPage(page).is_date_scheduled(get_offset_date(0)): + SessionsOverviewPage(page).schedule_or_edit_session() + SessionsEditPage(page).schedule_a_valid_session( offset_days=0, skip_weekends=False ) - sessions_overview_page.click_import_class_lists() - import_records_wizard_page.import_class_list( + SessionsOverviewPage(page).click_import_class_lists() + ImportRecordsWizardPage(page, test_data).import_class_list( class_list_file, year_group, Programme.FLU.group ) - imports_page.header.click_sessions_header() - sessions_search_page.click_session_for_programme_group(school, Programme.FLU) + ImportsPage(page).header.click_sessions_header() + SessionsSearchPage(page).click_session_for_programme_group( + school, Programme.FLU + ) yield batch_names return _setup @@ -72,13 +84,7 @@ def setup_fixed_child(setup_session_with_file_upload): @pytest.mark.bug def test_tallying( # noqa: PLR0915 setup_fixed_child, - sessions_overview_page, - sessions_patient_page, - sessions_register_page, - sessions_children_page, - sessions_vaccination_wizard_page, - sessions_record_vaccinations_page, - nurse_consent_wizard_page, + page, children, schools, ): @@ -95,55 +101,55 @@ def test_tallying( # noqa: PLR0915 batch_name = setup_fixed_child[Vaccine.FLUENZ] school = schools[Programme.FLU][0] - tally_totals = sessions_overview_page.get_all_totals(Programme.FLU) + tally_totals = SessionsOverviewPage(page).get_all_totals(Programme.FLU) assert tally_totals[TallyCategory.NEEDS_CONSENT] > 0 - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.FLU) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[0]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PHONE) - nurse_consent_wizard_page.record_parent_positive_consent( + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.FLU) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[0]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PHONE) + NurseConsentWizardPage(page).record_parent_positive_consent( yes_to_health_questions=False, programme=Programme.FLU ) tally_totals[TallyCategory.NEEDS_CONSENT] -= 1 tally_totals[TallyCategory.DUE_INJECTION] += 1 - sessions_overview_page.check_all_totals(tally_totals) + SessionsOverviewPage(page).check_all_totals(tally_totals) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_response_from_parent(child.parents[0]) - sessions_patient_page.click_withdraw_consent() - nurse_consent_wizard_page.click_consent_refusal_reason( + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_response_from_parent(child.parents[0]) + SessionsPatientPage(page).click_withdraw_consent() + NurseConsentWizardPage(page).click_consent_refusal_reason( ConsentRefusalReason.PERSONAL_CHOICE ) - nurse_consent_wizard_page.give_withdraw_consent_notes("notes") - nurse_consent_wizard_page.click_withdraw_consent() - sessions_patient_page.click_back() - sessions_patient_page.go_back_to_session_for_school(school) + NurseConsentWizardPage(page).give_withdraw_consent_notes("notes") + NurseConsentWizardPage(page).click_withdraw_consent() + SessionsPatientPage(page).click_back() + SessionsPatientPage(page).go_back_to_session_for_school(school) tally_totals[TallyCategory.DUE_INJECTION] -= 1 tally_totals[TallyCategory.HAS_A_REFUSAL] += 1 - sessions_overview_page.check_all_totals(tally_totals) + SessionsOverviewPage(page).check_all_totals(tally_totals) - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.invalidate_parent_refusal(child.parents[0]) - sessions_patient_page.go_back_to_session_for_school(school) + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).invalidate_parent_refusal(child.parents[0]) + SessionsPatientPage(page).go_back_to_session_for_school(school) tally_totals[TallyCategory.HAS_A_REFUSAL] -= 1 tally_totals[TallyCategory.NEEDS_CONSENT] += 1 - sessions_overview_page.check_all_totals(tally_totals) - - sessions_overview_page.tabs.click_children_tab() - sessions_children_page.search.search_and_click_child(child) - sessions_patient_page.click_programme_tab(Programme.FLU) - sessions_patient_page.click_record_a_new_consent_response() - nurse_consent_wizard_page.select_parent(child.parents[1]) - nurse_consent_wizard_page.select_consent_method(ConsentMethod.PHONE) - nurse_consent_wizard_page.record_parent_positive_consent( + SessionsOverviewPage(page).check_all_totals(tally_totals) + + SessionsOverviewPage(page).tabs.click_children_tab() + SessionsChildrenPage(page).search.search_and_click_child(child) + SessionsPatientPage(page).click_programme_tab(Programme.FLU) + SessionsPatientPage(page).click_record_a_new_consent_response() + NurseConsentWizardPage(page).select_parent(child.parents[1]) + NurseConsentWizardPage(page).select_consent_method(ConsentMethod.PHONE) + NurseConsentWizardPage(page).record_parent_positive_consent( yes_to_health_questions=False, programme=Programme.FLU, consent_option=ConsentOption.NASAL_SPRAY, @@ -151,23 +157,23 @@ def test_tallying( # noqa: PLR0915 tally_totals[TallyCategory.NEEDS_CONSENT] -= 1 tally_totals[TallyCategory.DUE_NASAL_SPRAY] += 1 - sessions_overview_page.check_all_totals(tally_totals) + SessionsOverviewPage(page).check_all_totals(tally_totals) - sessions_overview_page.tabs.click_register_tab() - sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.tabs.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search.search_and_click_child(child) + SessionsOverviewPage(page).tabs.click_register_tab() + SessionsRegisterPage(page).register_child_as_attending(child) + SessionsRegisterPage(page).tabs.click_record_vaccinations_tab() + SessionsRecordVaccinationsPage(page).search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, batch_name, ConsentOption.NASAL_SPRAY ) - sessions_patient_page.set_up_vaccination(vaccination_record) - sessions_vaccination_wizard_page.record_vaccination(vaccination_record) - sessions_patient_page.go_back_to_session_for_school(school) + SessionsPatientPage(page).set_up_vaccination(vaccination_record) + SessionsVaccinationWizardPage(page).record_vaccination(vaccination_record) + SessionsPatientPage(page).go_back_to_session_for_school(school) tally_totals[TallyCategory.DUE_NASAL_SPRAY] -= 1 tally_totals[TallyCategory.VACCINATED] += 1 - sessions_overview_page.check_all_totals(tally_totals) + SessionsOverviewPage(page).check_all_totals(tally_totals) @issue("MAV-2689") @@ -176,8 +182,7 @@ def test_tallying( # noqa: PLR0915 ) def test_tallying_totals_match_eligible_patients( setup_fixed_child, - sessions_overview_page, - sessions_children_page, + page, programme, children, schools, @@ -192,14 +197,14 @@ def test_tallying_totals_match_eligible_patients( on the children tab. """ # Get tally totals for the programme - tally_totals = sessions_overview_page.get_all_totals(programme) + tally_totals = SessionsOverviewPage(page).get_all_totals(programme) sum_of_tally_totals = sum(tally_totals.values()) # Navigate to children tab to count eligible children - sessions_overview_page.tabs.click_children_tab() + SessionsOverviewPage(page).tabs.click_children_tab() # Count all children cards displayed (these are the eligible children) - children_cards = sessions_children_page.page.locator( + children_cards = SessionsChildrenPage(page).page.locator( "div.nhsuk-card.app-card.app-card--compact:has(h4)" ) eligible_children_count = children_cards.count() diff --git a/tests/test_vaccines.py b/tests/test_vaccines.py index 52eb500e47b..703f9ed2beb 100644 --- a/tests/test_vaccines.py +++ b/tests/test_vaccines.py @@ -1,25 +1,30 @@ import pytest from playwright.sync_api import expect +from mavis.test.accessibility import AccessibilityHelper from mavis.test.annotations import issue from mavis.test.models import Vaccine +from mavis.test.pages import ( + AddBatchPage, + ArchiveBatchPage, + DashboardPage, + EditBatchPage, + VaccinesPage, +) from mavis.test.utils import get_offset_date pytestmark = pytest.mark.vaccines @pytest.fixture(autouse=True) -def go_to_vaccines_page(log_in_as_nurse, dashboard_page): - dashboard_page.click_vaccines() +def go_to_vaccines_page(log_in_as_nurse, page): + DashboardPage(page).click_vaccines() @pytest.mark.parametrize("vaccine", Vaccine) def test_batch_add_change_archive( vaccine, - add_batch_page, - archive_batch_page, - edit_batch_page, - vaccines_page, + page, ): """ Test: Add, edit, and archive a vaccine batch and verify success alerts. @@ -33,25 +38,25 @@ def test_batch_add_change_archive( """ batch_name = "ABC123" - vaccines_page.click_add_batch(vaccine) - add_batch_page.fill_name(batch_name) - add_batch_page.date.fill_expiry_date(get_offset_date(1)) - add_batch_page.confirm() - expect(add_batch_page.success_alert).to_be_visible() + VaccinesPage(page).click_add_batch(vaccine) + AddBatchPage(page).fill_name(batch_name) + AddBatchPage(page).date.fill_expiry_date(get_offset_date(1)) + AddBatchPage(page).confirm() + expect(AddBatchPage(page).success_alert).to_be_visible() - vaccines_page.click_change_batch(vaccine, batch_name) - edit_batch_page.date.fill_expiry_date(get_offset_date(2)) - edit_batch_page.confirm() - expect(edit_batch_page.success_alert).to_be_visible() + VaccinesPage(page).click_change_batch(vaccine, batch_name) + EditBatchPage(page).date.fill_expiry_date(get_offset_date(2)) + EditBatchPage(page).confirm() + expect(EditBatchPage(page).success_alert).to_be_visible() - vaccines_page.click_archive_batch(vaccine, batch_name) - archive_batch_page.confirm() - expect(archive_batch_page.success_alert).to_be_visible() + VaccinesPage(page).click_archive_batch(vaccine, batch_name) + ArchiveBatchPage(page).confirm() + expect(ArchiveBatchPage(page).success_alert).to_be_visible() @issue("MAV-955") @pytest.mark.parametrize("vaccine", Vaccine) -def test_batch_name_too_short(vaccine, add_batch_page, vaccines_page): +def test_batch_name_too_short(vaccine, page): """ Test: Attempt to add a batch with a name that is too short and verify error message. Steps: @@ -61,12 +66,12 @@ def test_batch_name_too_short(vaccine, add_batch_page, vaccines_page): Verification: - Error message is shown indicating the batch name must be more than 2 characters. """ - vaccines_page.click_add_batch(vaccine) - add_batch_page.fill_name("a") - add_batch_page.date.fill_expiry_date(get_offset_date(1)) - add_batch_page.confirm() + VaccinesPage(page).click_add_batch(vaccine) + AddBatchPage(page).fill_name("a") + AddBatchPage(page).date.fill_expiry_date(get_offset_date(1)) + AddBatchPage(page).confirm() expect( - add_batch_page.error_listitem.filter( + AddBatchPage(page).error_listitem.filter( has_text="Enter a batch that is more than 2 characters long", ), ).to_be_visible() @@ -74,7 +79,7 @@ def test_batch_name_too_short(vaccine, add_batch_page, vaccines_page): @issue("MAV-955") @pytest.mark.parametrize("vaccine", Vaccine) -def test_batch_name_too_long(vaccine, add_batch_page, vaccines_page): +def test_batch_name_too_long(vaccine, page): """ Test: Attempt to add a batch with a name that is too long and verify error message. Steps: @@ -84,18 +89,18 @@ def test_batch_name_too_long(vaccine, add_batch_page, vaccines_page): Verification: - Error message is shown indicating the batch name must be less than 100 characters. """ - vaccines_page.click_add_batch(vaccine) - add_batch_page.fill_name("a" * 101) - add_batch_page.date.fill_expiry_date(get_offset_date(1)) - add_batch_page.confirm() + VaccinesPage(page).click_add_batch(vaccine) + AddBatchPage(page).fill_name("a" * 101) + AddBatchPage(page).date.fill_expiry_date(get_offset_date(1)) + AddBatchPage(page).confirm() expect( - add_batch_page.error_listitem.filter( + AddBatchPage(page).error_listitem.filter( has_text="Enter a batch that is less than 100 characters long", ), ).to_be_visible() -def test_verify_flu_not_available(onboarding, vaccines_page): +def test_verify_flu_not_available(onboarding, page): """ Test: Verify that the flu vaccine is not available for selection if not enabled in onboarding. @@ -107,17 +112,11 @@ def test_verify_flu_not_available(onboarding, vaccines_page): enabled programmes. """ programmes = onboarding.programmes - vaccines_page.verify_flu_not_available(programmes) + VaccinesPage(page).verify_flu_not_available(programmes) @pytest.mark.accessibility -def test_accessibility( - vaccines_page, - add_batch_page, - edit_batch_page, - archive_batch_page, - accessibility_helper, -): +def test_accessibility(page): """ Test: Verify that the vaccines page passes accessibility checks. Steps: @@ -129,20 +128,20 @@ def test_accessibility( batch_name = "ACCESS123" - vaccines_page.click_add_batch(Vaccine.GARDASIL_9) - accessibility_helper.check_accessibility() + VaccinesPage(page).click_add_batch(Vaccine.GARDASIL_9) + AccessibilityHelper(page).check_accessibility() - add_batch_page.fill_name(batch_name) - add_batch_page.date.fill_expiry_date(get_offset_date(1)) - add_batch_page.confirm() - accessibility_helper.check_accessibility() + AddBatchPage(page).fill_name(batch_name) + AddBatchPage(page).date.fill_expiry_date(get_offset_date(1)) + AddBatchPage(page).confirm() + AccessibilityHelper(page).check_accessibility() - vaccines_page.click_change_batch(Vaccine.GARDASIL_9, batch_name) - accessibility_helper.check_accessibility() + VaccinesPage(page).click_change_batch(Vaccine.GARDASIL_9, batch_name) + AccessibilityHelper(page).check_accessibility() - edit_batch_page.date.fill_expiry_date(get_offset_date(2)) - edit_batch_page.confirm() - vaccines_page.click_archive_batch(Vaccine.GARDASIL_9, batch_name) + EditBatchPage(page).date.fill_expiry_date(get_offset_date(2)) + EditBatchPage(page).confirm() + VaccinesPage(page).click_archive_batch(Vaccine.GARDASIL_9, batch_name) - accessibility_helper.check_accessibility() - archive_batch_page.confirm() + AccessibilityHelper(page).check_accessibility() + ArchiveBatchPage(page).confirm()