diff --git a/mavis/test/fixtures/helpers.py b/mavis/test/fixtures/helpers.py index 9dc18494fd2..472040c91e7 100644 --- a/mavis/test/fixtures/helpers.py +++ b/mavis/test/fixtures/helpers.py @@ -31,7 +31,7 @@ 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.fill_expiry_date(get_offset_date(1)) + add_batch_page.date.fill_expiry_date(get_offset_date(1)) add_batch_page.confirm() return batch_name @@ -163,7 +163,7 @@ def wrapper( msg = "Update upload_offline_vaccination to handle programme" raise ValueError(msg) - dashboard_page.click_mavis() + 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)): @@ -177,12 +177,10 @@ def wrapper( child.year_group, programme.group, ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + 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() - dashboard_page.click_mavis() - dashboard_page.click_imports() + 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( @@ -190,10 +188,9 @@ def wrapper( session_id=session_id, programme_group=programme.group, ) - dashboard_page.click_mavis() - dashboard_page.click_programmes() + imports_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(programme) - programme_overview_page.click_children_tab() + 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) @@ -210,6 +207,7 @@ def setup_session_and_batches_with_fixed_child( sessions_search_page, sessions_overview_page, import_records_wizard_page, + imports_page, children, log_in_page, nurse, @@ -227,8 +225,7 @@ def _setup(programme_group): for vaccine in Vaccine if vaccine.programme.group == programme_group } - dashboard_page.click_mavis() - dashboard_page.click_sessions() + imports_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group( school, programme_group ) diff --git a/mavis/test/fixtures/pages.py b/mavis/test/fixtures/pages.py index bcaf99d2b1d..86d6f70eb63 100644 --- a/mavis/test/fixtures/pages.py +++ b/mavis/test/fixtures/pages.py @@ -168,8 +168,8 @@ def programmes_list_page(page: Page) -> ProgrammesListPage: @pytest.fixture -def programme_overview_page(page: Page, test_data: TestData) -> ProgrammeOverviewPage: - return ProgrammeOverviewPage(page, test_data) +def programme_overview_page(page: Page) -> ProgrammeOverviewPage: + return ProgrammeOverviewPage(page) @pytest.fixture diff --git a/mavis/test/pages/children.py b/mavis/test/pages/children.py index 38727a69cfc..27f039b4c6b 100644 --- a/mavis/test/pages/children.py +++ b/mavis/test/pages/children.py @@ -6,12 +6,14 @@ from mavis.test.annotations import step from mavis.test.data import create_child_list_from_file from mavis.test.models import Child, Programme, School +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import get_current_datetime, reload_until_element_is_visible class ChildrenSearchPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) self.children_heading = self.page.get_by_role( "heading", @@ -117,7 +119,7 @@ def check_children_aged_out_of_programmes(self) -> None: self.children_aged_out_of_programmes_checkbox.check() -class ChildRecordTabsMixin: +class ChildRecordTabs: def __init__(self, page: Page) -> None: self.page = page self.child_record_tab = page.get_by_role("link", name="Child record") @@ -129,9 +131,11 @@ def click_activity_log(self) -> None: self.activity_log_tab.get_by_role("strong").wait_for() -class ChildRecordPage(ChildRecordTabsMixin): +class ChildRecordPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ChildRecordTabs(page) + self.header = HeaderComponent(page) vaccinations_card = page.locator("section").filter( has=page.get_by_role("heading", name="Vaccinations"), @@ -209,6 +213,8 @@ def check_child_is_unarchived(self) -> None: class ChildEditPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.change_nhs_no_link = self.page.get_by_role( "link", name="Change NHS number", @@ -231,6 +237,8 @@ def fill_nhs_no_for_child(self, child: Child, nhs_no: str) -> None: class ChildArchivePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.imported_in_error_radio = self.page.get_by_role( "radio", name="It was imported in error", @@ -270,9 +278,12 @@ def archive_child_record(self) -> None: expect(self.page.get_by_text("Archive reason")).to_be_visible() -class ChildActivityLogPage(ChildRecordTabsMixin): +class ChildActivityLogPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ChildRecordTabs(page) + self.header = HeaderComponent(page) + self.manually_matched_card = self.page.get_by_text( "Consent response manually matched with child record", ) diff --git a/mavis/test/pages/consent_responses.py b/mavis/test/pages/consent_responses.py index ddaf479bf0a..e845a88f6ba 100644 --- a/mavis/test/pages/consent_responses.py +++ b/mavis/test/pages/consent_responses.py @@ -2,12 +2,15 @@ from mavis.test.annotations import step from mavis.test.models import Child, Relationship +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import reload_until_element_is_visible class UnmatchedConsentResponsesPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.rows = page.get_by_role("row") self.empty_paragraph = page.get_by_text( "There are currently no unmatched consent responses.", @@ -42,6 +45,8 @@ def check_response_for_child_not_visible(self, child: Child) -> None: class ConsentResponsePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.archive_link = page.get_by_role("link", name="Archive", exact=True) self.create_new_record_link = page.get_by_role( "link", @@ -66,6 +71,8 @@ def click_match(self) -> None: class ArchiveConsentResponsePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.notes_textbox = page.get_by_role("textbox", name="Notes") self.archive_button = page.get_by_role("button", name="Archive") @@ -78,6 +85,8 @@ def archive(self, notes: str) -> None: class CreateNewRecordConsentResponsePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.create_new_record_button = page.get_by_role( "button", name="Create a new record from response", @@ -91,6 +100,8 @@ def create_new_record(self) -> None: class MatchConsentResponsePage: 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_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/dashboard.py b/mavis/test/pages/dashboard.py index ed343e1a057..eebc3ac093b 100644 --- a/mavis/test/pages/dashboard.py +++ b/mavis/test/pages/dashboard.py @@ -1,16 +1,13 @@ from playwright.sync_api import Page from mavis.test.annotations import step +from mavis.test.pages.header import HeaderComponent class DashboardPage: def __init__(self, page: Page) -> None: self.page = page - - self.mavis_link = page.get_by_role( - "link", - name="Manage vaccinations in schools", - ) + self.header = HeaderComponent(page) links = page.get_by_role("main").get_by_role("listitem").get_by_role("link") @@ -26,10 +23,6 @@ def __init__(self, page: Page) -> None: self.your_team_link = links.get_by_text("Your Team") self.service_guidance_link = links.get_by_text("Service Guidance") - @step("Click on Manage vaccinations in schools") - def click_mavis(self) -> None: - self.mavis_link.click() - @step("Click on Programmes") def click_programmes(self) -> None: self.programmes_link.click() diff --git a/mavis/test/pages/header.py b/mavis/test/pages/header.py new file mode 100644 index 00000000000..63b6db01419 --- /dev/null +++ b/mavis/test/pages/header.py @@ -0,0 +1,63 @@ +from playwright.sync_api import Page + +from mavis.test.annotations import step + + +class HeaderComponent: + def __init__(self, page: Page) -> None: + self.page = page + + self.mavis_link = page.get_by_role( + "link", + name="Manage vaccinations in schools", + ) + + links = page.get_by_label("Menu", exact=True) + + self.programmes_link = links.get_by_role("link", name="Programmes") + self.sessions_link = links.get_by_role("link", name="Sessions") + self.children_link = links.get_by_role("link", name="Children") + self.vaccines_link = links.get_by_role("link", name="Vaccines") + self.unmatched_consent_responses_link = links.get_by_role( + "link", + name="Unmatched Responses", + ) + self.school_moves_link = links.get_by_role("link", name="School Moves") + self.import_records_link = links.get_by_role("link", name="Imports") + self.your_team_link = links.get_by_role("link", name="Your Team") + + @step("Click on Manage vaccinations in schools") + def click_mavis_header(self) -> None: + self.mavis_link.click() + + @step("Click on Programmes") + def click_programmes_header(self) -> None: + self.programmes_link.click() + + @step("Click on Sessions") + def click_sessions_header(self) -> None: + self.sessions_link.click() + + @step("Click on Children") + def click_children_header(self) -> None: + self.children_link.click() + + @step("Click on Vaccines") + def click_vaccines_header(self) -> None: + self.vaccines_link.click() + + @step("Click on Consent Responses") + def click_consent_responses_header(self) -> None: + self.unmatched_consent_responses_link.click() + + @step("Click on School Moves") + def click_school_moves_header(self) -> None: + self.school_moves_link.click() + + @step("Click on Imports") + def click_imports_header(self) -> None: + self.import_records_link.click() + + @step("Click on Your Team") + def click_your_team_header(self) -> None: + self.your_team_link.click() diff --git a/mavis/test/pages/import_records.py b/mavis/test/pages/import_records.py index 271b0ccbe3b..c1fe65e5e4f 100644 --- a/mavis/test/pages/import_records.py +++ b/mavis/test/pages/import_records.py @@ -7,6 +7,7 @@ from mavis.test.annotations import step from mavis.test.data import FileMapping, TestData, read_scenario_list_from_file from mavis.test.models import Programme +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import ( format_datetime_for_upload_link, get_current_datetime, @@ -20,8 +21,9 @@ def __init__( page: Page, test_data: TestData, ) -> None: - self.test_data = test_data self.page = page + self.test_data = test_data + self.header = HeaderComponent(page) self.alert_success = self.page.get_by_text("Import processing started") self.completed_tag = self.page.get_by_role("strong").get_by_text("Completed") @@ -252,6 +254,8 @@ def __init__( page: Page, ) -> None: self.page = page + self.header = HeaderComponent(page) + self.upload_button = self.page.get_by_role( "button", name="Upload records", diff --git a/mavis/test/pages/log_in.py b/mavis/test/pages/log_in.py index fb92da284a6..5b3d4adfdbf 100644 --- a/mavis/test/pages/log_in.py +++ b/mavis/test/pages/log_in.py @@ -4,6 +4,7 @@ from mavis.test.annotations import step from mavis.test.models import Organisation, Team, User +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import get_current_datetime @@ -116,6 +117,8 @@ def log_in_and_choose_team_if_necessary(self, user: User, team: Team) -> None: class LogOutPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.log_out_button = page.locator("#main-content").get_by_role( "button", name="Log out" ) diff --git a/mavis/test/pages/nurse_consent.py b/mavis/test/pages/nurse_consent.py index fff6bf776c6..c2173645285 100644 --- a/mavis/test/pages/nurse_consent.py +++ b/mavis/test/pages/nurse_consent.py @@ -8,12 +8,14 @@ Parent, Programme, ) +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import expect_alert_text, generate_random_string class NurseConsentWizardPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) self.yes_radio = self.page.get_by_role("radio", name="Yes", exact=True) self.no_radio = self.page.get_by_role("radio", name="No", exact=True) @@ -283,6 +285,8 @@ def give_withdraw_consent_notes(self, notes: str) -> None: class GillickCompetencePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.assessment_notes_textbox = self.page.get_by_role( "textbox", name="Assessment notes (optional)", diff --git a/mavis/test/pages/programmes.py b/mavis/test/pages/programmes.py index f49d5379a81..7fa7a3905cb 100644 --- a/mavis/test/pages/programmes.py +++ b/mavis/test/pages/programmes.py @@ -5,14 +5,16 @@ from playwright.sync_api import Page from mavis.test.annotations import step -from mavis.test.data import TestData from mavis.test.models import Child, DeliverySite, Programme, ReportFormat +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import get_current_datetime_compact class ProgrammesListPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.current_year_programmes_card = ( page.get_by_role("heading") .filter(has_text="2025 to 2026") @@ -24,9 +26,11 @@ def click_programme_for_current_year(self, programme: Programme) -> None: self.current_year_programmes_card.get_by_role("link", name=programme).click() -class ProgrammeTabsMixin: +class ProgrammeTabs: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.children_tab = page.get_by_label("Secondary menu").get_by_role( "link", name="Children" ) @@ -45,11 +49,11 @@ def click_sessions_tab(self) -> None: self.sessions_tab.get_by_role("strong").wait_for() -class ProgrammeOverviewPage(ProgrammeTabsMixin): - def __init__(self, page: Page, test_data: TestData) -> None: - super().__init__(page) +class ProgrammeOverviewPage: + def __init__(self, page: Page) -> None: self.page = page - self.test_data = test_data + self.tabs = ProgrammeTabs(page) + self.header = HeaderComponent(page) self.review_link = page.get_by_role("link", name="Review") self.edit_vaccination_record_button = page.get_by_role( @@ -171,14 +175,19 @@ def _download_and_verify_report_headers(self, expected_headers: str) -> None: raise AssertionError(error_message) -class ProgrammeSessionsPage(ProgrammeTabsMixin): +class ProgrammeSessionsPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ProgrammeTabs(page) + self.header = HeaderComponent(page) -class ProgrammeChildrenPage(ProgrammeTabsMixin): +class ProgrammeChildrenPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ProgrammeTabs(page) + 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_button = page.get_by_role("button", name="Search") diff --git a/mavis/test/pages/reports.py b/mavis/test/pages/reports.py index accf323ced8..4bdceac127f 100644 --- a/mavis/test/pages/reports.py +++ b/mavis/test/pages/reports.py @@ -9,12 +9,13 @@ from mavis.test.annotations import step from mavis.test.models import Programme +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import ( get_current_datetime_compact, ) -class ReportsTabsMixin: +class ReportsTabs: def __init__(self, page: Page) -> None: self.page = page self.vaccinations_tab = page.get_by_label("Secondary menu").get_by_role( @@ -35,9 +36,12 @@ def click_download_data_tab(self) -> None: self.download_data_tab.get_by_role("strong").wait_for() -class ReportsVaccinationsPage(ReportsTabsMixin): +class ReportsVaccinationsPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ReportsTabs(page) + self.header = HeaderComponent(page) + self.cohort_heading = self.page.get_by_role( "heading", name="Cohort", exact=True ) @@ -109,9 +113,12 @@ def get_expected_cohort_and_percentage_strings( return str(total), str(unvaccinated_pct), str(vaccinated_pct) -class ReportsDownloadPage(ReportsTabsMixin): +class ReportsDownloadPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = ReportsTabs(page) + self.header = HeaderComponent(page) + self.aggregate_data_radio = self.page.get_by_role( "radio", name="Aggregate vaccination data" ) diff --git a/mavis/test/pages/school_moves.py b/mavis/test/pages/school_moves.py index a7e6ed69cae..aa0fae20650 100644 --- a/mavis/test/pages/school_moves.py +++ b/mavis/test/pages/school_moves.py @@ -7,12 +7,15 @@ from mavis.test.annotations import step from mavis.test.models import SCHOOL_MOVE_HEADERS, Child, School +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import reload_until_element_is_visible class SchoolMovesPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.rows = page.get_by_role("row") self.download_button = page.get_by_role("button", name="Download records") self.confirmed_alert = page.get_by_role("alert", name="Success").filter( @@ -39,6 +42,7 @@ def get_row_for_child(self, child: Child) -> Locator: class DownloadSchoolMovesPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) from_group = page.get_by_role("group", name="From") self.from_day = from_group.get_by_role("textbox", name="Day") @@ -141,6 +145,8 @@ def click_continue(self) -> None: class ReviewSchoolMovePage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.confirm_radio = page.get_by_role( "radio", name="Update record with new school", diff --git a/mavis/test/pages/sessions.py b/mavis/test/pages/sessions.py index 20629eaadbb..6a4743487c7 100644 --- a/mavis/test/pages/sessions.py +++ b/mavis/test/pages/sessions.py @@ -17,6 +17,7 @@ School, VaccinationRecord, ) +from mavis.test.pages.header import HeaderComponent from mavis.test.utils import ( MAVIS_NOTE_LENGTH_LIMIT, expect_alert_text, @@ -30,7 +31,7 @@ ) -class SearchBarMixin: +class SearchComponent: def __init__( self, page: Page, @@ -48,7 +49,7 @@ def __init__( name="Archived records", ) - def _get_patient_card_locator(self, child: Child) -> Locator: + def get_patient_card_locator(self, child: Child) -> Locator: return self.page.locator( f'div.nhsuk-card.app-card.app-card--compact:has(h4:has-text("{child!s}"))' ) @@ -70,7 +71,7 @@ def verify_search(self) -> None: def search_and_click_child(self, child: Child) -> None: self.search_for(str(child)) - child_locator = self._get_patient_card_locator(child).get_by_role( + child_locator = self.get_patient_card_locator(child).get_by_role( "link", name=str(child) ) reload_until_element_is_visible(self.page, child_locator) @@ -78,7 +79,7 @@ def search_and_click_child(self, child: Child) -> None: def search_for_child_that_should_not_exist(self, child: Child) -> None: self.search_for(str(child)) - child_locator = self._get_patient_card_locator(child).get_by_role( + child_locator = self.get_patient_card_locator(child).get_by_role( "link", name=str(child) ) expect(child_locator).not_to_be_visible() @@ -112,7 +113,7 @@ def check_note_appears_in_search(self, child: Child, note: str) -> None: expect(next_element.get_by_role("blockquote")).to_have_text(note) -class SessionsTabsMixin: +class SessionsTabs: def __init__( self, page: Page, @@ -146,14 +147,13 @@ def click_record_vaccinations_tab(self) -> None: def click_children_tab(self) -> None: self._select_tab("Children") - @step("Click on Triage tab") - def click_triage_tab(self) -> None: - self._select_tab("Triage") - -class SessionsPsdPage(SearchBarMixin, SessionsTabsMixin): +class SessionsPsdPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.search = SearchComponent(page) + self.tabs = SessionsTabs(page) + self.header = HeaderComponent(page) self.add_new_psds_link = self.page.get_by_role( "link", @@ -166,16 +166,16 @@ def __init__(self, page: Page) -> None: @step("Check {1} has PSD") def check_child_has_psd(self, child: Child) -> None: - child_with_psd_locator = self._get_patient_card_locator(child).get_by_text( - "PSD added" - ) + child_with_psd_locator = self.search.get_patient_card_locator( + child + ).get_by_text("PSD added") reload_until_element_is_visible(self.page, child_with_psd_locator) @step("Check {1} does not have PSD") def check_child_does_not_have_psd(self, child: Child) -> None: - child_without_psd_locator = self._get_patient_card_locator(child).get_by_text( - "PSD not added" - ) + child_without_psd_locator = self.search.get_patient_card_locator( + child + ).get_by_text("PSD not added") reload_until_element_is_visible(self.page, child_without_psd_locator) @step("Click Add new PSDs") @@ -194,9 +194,11 @@ def verify_psd_banner_has_patients(self, number_of_patients: int) -> None: reload_until_element_is_visible(self.page, psd_banner) -class SessionsSearchPage(SearchBarMixin): +class SessionsSearchPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.search = SearchComponent(page) + self.header = HeaderComponent(page) @step("Click on {2} session at {1}") def click_session_for_programme_group( @@ -209,8 +211,8 @@ def click_session_for_programme_group( else: self.page.get_by_role("checkbox", name=str(programme)).uncheck() - self.search_textbox.fill(str(location)) - self.search_button.click() + self.search.search_textbox.fill(str(location)) + self.search.search_button.click() self.page.get_by_role("link", name=str(location)).first.click() @@ -221,9 +223,12 @@ def click_session_for_programme_group( ) -class SessionsOverviewPage(SessionsTabsMixin): +class SessionsOverviewPage: def __init__(self, page: Page) -> None: self.page = page + self.tabs = SessionsTabs(page) + self.header = HeaderComponent(page) + self.schedule_sessions_link = self.page.get_by_role( "link", name="Schedule sessions", @@ -265,7 +270,7 @@ def get_all_totals(self, programme: Programme) -> dict[str, int]: } def check_all_totals(self, totals: dict[str, int]) -> None: - self.click_overview_tab() + self.tabs.click_overview_tab() for category, expected_total in totals.items(): actual_total = self.get_total_for_category(category) assert actual_total == expected_total, ( @@ -375,6 +380,8 @@ def click_consent_refused(self) -> None: class SessionsEditPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.add_another_date_button = self.page.get_by_role( "button", name="Add another date", @@ -544,6 +551,7 @@ def schedule_a_valid_session( offset_days=offset_days, skip_weekends=skip_weekends ) self.__schedule_session(date=_future_date) + self.page.wait_for_load_state() if self.keep_session_dates_button.is_visible(): self.click_keep_session_dates() # MAV-2066 @@ -597,9 +605,13 @@ def answer_whether_psd_should_be_enabled(self, answer: str) -> None: ).get_by_label(answer).check() -class SessionsChildrenPage(SearchBarMixin, SessionsTabsMixin): +class SessionsChildrenPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = SessionsTabs(page) + self.search = SearchComponent(page) + self.header = HeaderComponent(page) + self.needs_consent_radio = self.page.get_by_role( "radio", name="Needs consent", @@ -657,7 +669,7 @@ def verify_child_shows_correct_flu_consent_method( reload_until_element_is_visible(self.page, method_locator) def get_flu_consent_status_locator_from_search(self, child: Child) -> Locator: - child_locator = self._get_patient_card_locator(child) + child_locator = self.search.get_patient_card_locator(child) flu_consent_section = child_locator.locator("p:has-text('Flu')") reload_until_element_is_visible(self.page, flu_consent_section) @@ -668,14 +680,18 @@ def expect_has_a_refusal_to_be_selected(self) -> None: expect(self.has_a_refusal_radio).to_be_checked() -class SessionsRegisterPage(SearchBarMixin, SessionsTabsMixin): +class SessionsRegisterPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = SessionsTabs(page) + self.search = SearchComponent(page) + self.header = HeaderComponent(page) + self.attending_button = self.page.get_by_role("button", name="Attending").first def register_child_as_attending(self, child: Child) -> None: - self.click_register_tab() - self.search_for(str(child)) + self.tabs.click_register_tab() + self.search.search_for(str(child)) reload_until_element_is_visible( self.page, self.page.get_by_role("link", name=str(child)).first ) @@ -686,14 +702,19 @@ def click_on_attending(self) -> None: self.attending_button.click() -class SessionsRecordVaccinationsPage(SearchBarMixin, SessionsTabsMixin): +class SessionsRecordVaccinationsPage: def __init__(self, page: Page) -> None: - super().__init__(page) + self.page = page + self.tabs = SessionsTabs(page) + self.search = SearchComponent(page) + self.header = HeaderComponent(page) class SessionsPatientPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.update_triage_outcome_link = self.page.get_by_role( "link", name="Update triage outcome", @@ -956,6 +977,8 @@ def click_session_activity_and_notes(self) -> None: class SessionsPatientSessionActivityPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.note_textbox = self.page.get_by_role("textbox", name="Note") self.add_a_note_span = self.page.get_by_text("Add a note") self.save_note_button = self.page.get_by_role("button", name="Save note") @@ -993,6 +1016,8 @@ def check_session_activity_entry(self, text: str) -> None: class SessionsVaccinationWizardPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.confirm_button = self.page.get_by_role("button", name="Confirm") self.vaccination_notes = self.page.get_by_role( "textbox", diff --git a/mavis/test/pages/team.py b/mavis/test/pages/team.py index 9072ca61d21..a23868555a6 100644 --- a/mavis/test/pages/team.py +++ b/mavis/test/pages/team.py @@ -2,11 +2,13 @@ from mavis.test.annotations import step from mavis.test.models import Team +from mavis.test.pages.header import HeaderComponent class TeamPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) @step("Check team name is visible") def check_team_name_is_visible(self, team: Team) -> None: diff --git a/mavis/test/pages/vaccination_record.py b/mavis/test/pages/vaccination_record.py index 4c5f7450303..432ab73e25f 100644 --- a/mavis/test/pages/vaccination_record.py +++ b/mavis/test/pages/vaccination_record.py @@ -4,11 +4,13 @@ from mavis.test.annotations import step from mavis.test.models import DeliverySite +from mavis.test.pages.header import HeaderComponent class VaccinationRecordPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) self.edit_vaccination_record_button = page.get_by_role( "button", name="Edit vaccination record" @@ -37,6 +39,7 @@ def check_vaccination_details_heading_appears(self) -> None: class EditVaccinationRecordPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) self.edit_vaccination_record_button = page.get_by_role( "button", name="Edit vaccination record" diff --git a/mavis/test/pages/vaccines.py b/mavis/test/pages/vaccines.py index b2187446c22..e0b5a93432b 100644 --- a/mavis/test/pages/vaccines.py +++ b/mavis/test/pages/vaccines.py @@ -4,9 +4,10 @@ from mavis.test.annotations import step from mavis.test.models import Vaccine +from mavis.test.pages.header import HeaderComponent -class BatchExpiryDateMixin: +class BatchExpiryDate: def __init__(self, page: Page) -> None: self.expiry_day_textbox = page.get_by_role("textbox", name="Day") self.expiry_month_textbox = page.get_by_role("textbox", name="Month") @@ -19,11 +20,11 @@ def fill_expiry_date(self, value: date) -> None: self.expiry_year_textbox.fill(str(value.year)) -class AddBatchPage(BatchExpiryDateMixin): +class AddBatchPage: def __init__(self, page: Page) -> None: - super().__init__(page) - self.page = page + self.date = BatchExpiryDate(page) + self.header = HeaderComponent(page) self.name_textbox = page.get_by_role("textbox", name="Batch") self.confirm_button = page.get_by_role("button", name="Add batch") @@ -43,11 +44,11 @@ def confirm(self) -> None: self.confirm_button.click() -class EditBatchPage(BatchExpiryDateMixin): +class EditBatchPage: def __init__(self, page: Page) -> None: - super().__init__(page) - self.page = page + self.date = BatchExpiryDate(page) + self.header = HeaderComponent(page) self.confirm_button = page.get_by_role("button", name="Save changes") self.success_alert = page.get_by_role("alert", name="Success").filter( @@ -62,6 +63,8 @@ def confirm(self) -> None: class ArchiveBatchPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) + self.confirm_button = page.get_by_role("button", name="Yes, archive this batch") self.success_alert = page.get_by_role("alert", name="Success").filter( has_text="archived", @@ -75,6 +78,7 @@ def confirm(self) -> None: class VaccinesPage: def __init__(self, page: Page) -> None: self.page = page + self.header = HeaderComponent(page) @step("Go to vaccines page") def navigate(self) -> None: diff --git a/tests/test_children.py b/tests/test_children.py index 39bae6fe5df..5982c1922c3 100644 --- a/tests/test_children.py +++ b/tests/test_children.py @@ -17,13 +17,13 @@ def setup_children_session( 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_mavis() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group( school, Programme.HPV.group @@ -35,8 +35,7 @@ def _setup(class_list_file): ) sessions_overview_page.click_import_class_lists() import_records_wizard_page.import_class_list(class_list_file, year_group) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() yield return _setup @@ -79,26 +78,23 @@ def setup_mav_853( import_records_wizard_page.import_class_list( ClassFileMapping.RANDOM_CHILD, year_group ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + 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() - dashboard_page.click_mavis() - dashboard_page.click_programmes() + sessions_overview_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() programme_children_page.click_import_child_records() import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - dashboard_page.click_mavis() - dashboard_page.click_imports() + + 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( file_mapping=VaccsFileMapping.NOT_GIVEN, session_id=session_id, ) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() @issue("MAV-853") @@ -132,7 +128,7 @@ def test_patient_details_load_with_missing_vaccine_info( children_search_page.search_with_all_filters_for_child_name(str(child)) children_search_page.click_record_for_child(child) # Verify activity log - child_record_page.click_activity_log() + child_record_page.tabs.click_activity_log() child_activity_log_page.expect_activity_log_header( "Vaccinated with Gardasil 9", unique=True ) @@ -227,5 +223,5 @@ def test_accessibility( children_search_page.click_record_for_child(child) accessibility_helper.check_accessibility() - child_record_page.click_activity_log() + child_record_page.tabs.click_activity_log() accessibility_helper.check_accessibility() diff --git a/tests/test_consent_responses.py b/tests/test_consent_responses.py index adc6a7e5a3d..3b255662f3b 100644 --- a/tests/test_consent_responses.py +++ b/tests/test_consent_responses.py @@ -96,7 +96,7 @@ def test_archive_unmatched_consent_response_removes_from_list( def test_match_unmatched_consent_response_and_verify_activity_log( give_online_consent, - go_to_unmatched_consent_responses, + log_in_as_nurse, children, children_search_page, child_record_page, @@ -109,6 +109,7 @@ def test_match_unmatched_consent_response_and_verify_activity_log( programme_children_page, unmatched_consent_responses_page, import_records_wizard_page, + imports_page, ): """ Test: Match an unmatched consent response to a child and verify activity log. @@ -125,15 +126,12 @@ def test_match_unmatched_consent_response_and_verify_activity_log( """ child = children[Programme.HPV][0] - dashboard_page.click_mavis() dashboard_page.click_programmes() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() programme_children_page.click_import_child_records() import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - - dashboard_page.click_mavis() - dashboard_page.click_unmatched_consent_responses() + imports_page.header.click_consent_responses_header() unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) @@ -143,11 +141,10 @@ def test_match_unmatched_consent_response_and_verify_activity_log( expect(unmatched_consent_responses_page.matched_alert).to_be_visible() unmatched_consent_responses_page.check_response_for_child_not_visible(child) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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.click_activity_log() + child_record_page.tabs.click_activity_log() child_activity_log_page.verify_activity_log_for_created_or_matched_child() @@ -160,7 +157,6 @@ def test_create_child_record_from_consent_with_nhs_number( child_activity_log_page, consent_response_page, create_new_record_consent_response_page, - dashboard_page, unmatched_consent_responses_page, ): """ @@ -185,11 +181,10 @@ def test_create_child_record_from_consent_with_nhs_number( expect(unmatched_consent_responses_page.created_alert).to_be_visible() unmatched_consent_responses_page.check_response_for_child_not_visible(child) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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.click_activity_log() + child_record_page.tabs.click_activity_log() child_activity_log_page.verify_activity_log_for_created_or_matched_child() @@ -227,18 +222,17 @@ def test_create_child_record_from_consent_without_nhs_number( expect(unmatched_consent_responses_page.created_alert).to_be_visible() unmatched_consent_responses_page.check_response_for_child_not_visible(child) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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.click_activity_log() + child_record_page.tabs.click_activity_log() child_activity_log_page.verify_activity_log_for_created_or_matched_child() @pytest.mark.accessibility def test_accessibility( give_online_consent, - go_to_unmatched_consent_responses, + log_in_as_nurse, accessibility_helper, children, dashboard_page, @@ -249,6 +243,7 @@ def test_accessibility( match_consent_response_page, consent_response_page, unmatched_consent_responses_page, + imports_page, ): """ Test: Check accessibility of consent response pages. @@ -260,15 +255,13 @@ def test_accessibility( """ child = children[Programme.HPV][0] - dashboard_page.click_mavis() dashboard_page.click_programmes() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() programme_children_page.click_import_child_records() import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - dashboard_page.click_mavis() - dashboard_page.click_unmatched_consent_responses() + imports_page.header.click_consent_responses_header() accessibility_helper.check_accessibility() unmatched_consent_responses_page.click_parent_on_consent_record_for_child(child) @@ -284,10 +277,9 @@ def test_accessibility( @issue("MAV-2681") def test_match_consent_with_vaccination_record_no_service_error( give_online_consent, - go_to_unmatched_consent_responses, + log_in_as_nurse, upload_offline_vaccination, children, - children_search_page, consent_response_page, dashboard_page, match_consent_response_page, @@ -295,6 +287,7 @@ def test_match_consent_with_vaccination_record_no_service_error( programme_overview_page, programme_children_page, import_records_wizard_page, + imports_page, unmatched_consent_responses_page, service_error_page, ): @@ -319,10 +312,9 @@ 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_mavis() dashboard_page.click_programmes() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + 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) @@ -332,8 +324,7 @@ def test_match_consent_with_vaccination_record_no_service_error( child_with_vaccination = children[Programme.HPV][1] # Navigate back to unmatched consent responses - dashboard_page.click_mavis() - dashboard_page.click_unmatched_consent_responses() + imports_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) diff --git a/tests/test_e2e_doubles.py b/tests/test_e2e_doubles.py index b3a11ca3b25..586c0f3aa1d 100644 --- a/tests/test_e2e_doubles.py +++ b/tests/test_e2e_doubles.py @@ -88,10 +88,10 @@ def test_recording_doubles_vaccination_e2e( sessions_search_page.click_session_for_programme_group(schools[0], "doubles") sessions_overview_page.click_set_session_in_progress_for_today() - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.MENACWY, menquadfi_batch_name diff --git a/tests/test_e2e_flu.py b/tests/test_e2e_flu.py index 624ab33d045..4b10b3a1002 100644 --- a/tests/test_e2e_flu.py +++ b/tests/test_e2e_flu.py @@ -100,10 +100,10 @@ def test_recording_flu_vaccination_e2e( 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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, batch_name, consent_option @@ -112,8 +112,7 @@ def test_recording_flu_vaccination_e2e( sessions_vaccination_wizard_page.record_vaccination(vaccination_record) # MAV-1831 - dashboard_page.navigate() - dashboard_page.click_children() + 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]) diff --git a/tests/test_e2e_hpv.py b/tests/test_e2e_hpv.py index 9d59d987c6c..d0683bdaf76 100644 --- a/tests/test_e2e_hpv.py +++ b/tests/test_e2e_hpv.py @@ -76,10 +76,10 @@ def test_recording_hpv_vaccination_e2e( 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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_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) diff --git a/tests/test_e2e_mmr.py b/tests/test_e2e_mmr.py index a15860ae957..f785eddcc56 100644 --- a/tests/test_e2e_mmr.py +++ b/tests/test_e2e_mmr.py @@ -80,8 +80,8 @@ def test_recording_mmr_vaccination_e2e_with_triage( # Triage step added for MMR sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -90,10 +90,10 @@ def test_recording_mmr_vaccination_e2e_with_triage( 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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.MMR, mmr_batch_name) sessions_patient_page.set_up_vaccination(vaccination_record) @@ -169,21 +169,22 @@ def test_verify_child_cannot_be_vaccinated_twice_for_mmr_on_same_day( # 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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_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) # Attempt to record second dose on the same day - dashboard_page.navigate() - dashboard_page.click_sessions() + sessions_patient_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_for_child_that_should_not_exist(child) + sessions_overview_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_for_child_that_should_not_exist( + child + ) dashboard_page.navigate() log_in_page.log_out() @@ -259,19 +260,18 @@ def test_recording_mmr_vaccination_e2e_with_imported_dose_one( # Triage step added for MMR sessions_search_page.click_session_for_programme_group(schools[0], Programme.MMR) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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_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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord(child, Programme.MMR, mmr_batch_name) sessions_patient_page.set_up_vaccination(vaccination_record) diff --git a/tests/test_import_child_lists.py b/tests/test_import_child_lists.py index fe95567ca87..f6d23fc2572 100644 --- a/tests/test_import_child_lists.py +++ b/tests/test_import_child_lists.py @@ -103,7 +103,7 @@ def test_child_list_file_upload_whitespace_normalization( setup_child_import, import_records_wizard_page, children_search_page, - dashboard_page, + imports_page, ): """ Test: Upload a child list file with extra whitespace and verify normalization. @@ -117,8 +117,7 @@ def test_child_list_file_upload_whitespace_normalization( input_file, _ = import_records_wizard_page.upload_and_verify_output( ChildFileMapping.WHITESPACE, ) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() children_search_page.verify_list_has_been_uploaded( input_file, is_vaccinations=False ) diff --git a/tests/test_import_class_lists.py b/tests/test_import_class_lists.py index 6fdd2ab9d47..71c40cf48f0 100644 --- a/tests/test_import_class_lists.py +++ b/tests/test_import_class_lists.py @@ -24,8 +24,8 @@ def setup_class_list_import( 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) - dashboard_page.click_mavis() - dashboard_page.click_imports() + + sessions_overview_page.header.click_imports_header() imports_page.click_upload_records() import_records_wizard_page.navigate_to_class_list_record_import( str(school), year_group @@ -149,7 +149,7 @@ def test_class_list_file_upload_whitespace_normalization( setup_class_list_import, import_records_wizard_page, children_search_page, - dashboard_page, + imports_page, ): """ Test: Upload a class list file with extra whitespace and verify normalization. @@ -163,8 +163,7 @@ def test_class_list_file_upload_whitespace_normalization( input_file, _ = import_records_wizard_page.upload_and_verify_output( ClassFileMapping.WHITESPACE, ) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() children_search_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 ecc35995a66..9e970e8c244 100644 --- a/tests/test_import_historical_vaccinations.py +++ b/tests/test_import_historical_vaccinations.py @@ -11,7 +11,6 @@ def setup_hist_vaccs( imports_page, import_records_wizard_page, ): - dashboard_page.click_mavis() dashboard_page.click_imports() imports_page.click_upload_records() import_records_wizard_page.navigate_to_vaccination_records_import() @@ -76,6 +75,7 @@ def test_historical_vaccination_file_upload_creates_child( schools, dashboard_page, import_records_wizard_page, + imports_page, children_search_page, child_record_page, children, @@ -94,8 +94,7 @@ def test_historical_vaccination_file_upload_creates_child( school = schools[Programme.HPV][0] import_records_wizard_page.upload_and_verify_output(VaccsFileMapping.HIST_HPV) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() children_search_page.click_advanced_filters() children_search_page.check_children_aged_out_of_programmes() diff --git a/tests/test_import_offline_vaccinations.py b/tests/test_import_offline_vaccinations.py index ce4c7c157f2..b714fe2d06b 100644 --- a/tests/test_import_offline_vaccinations.py +++ b/tests/test_import_offline_vaccinations.py @@ -30,12 +30,10 @@ def setup_vaccs( import_records_wizard_page.import_class_list( ClassFileMapping.RANDOM_CHILD, year_group ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + 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() - dashboard_page.click_mavis() - dashboard_page.click_imports() + sessions_overview_page.header.click_imports_header() imports_page.click_upload_records() import_records_wizard_page.navigate_to_vaccination_records_import() return session_id @@ -127,8 +125,7 @@ def test_vaccination_file_upload_duplicate_records( VaccsFileMapping.DUP_1, session_id=setup_vaccs, ) - dashboard_page.click_mavis() - dashboard_page.click_imports() + 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( @@ -188,8 +185,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, - dashboard_page, import_records_wizard_page, + imports_page, children_search_page, child_record_page, vaccination_record_page, @@ -212,8 +209,7 @@ def test_vaccination_file_upload_creates_child_no_setting( import_records_wizard_page.upload_and_verify_output( VaccsFileMapping.NO_CARE_SETTING ) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() children_search_page.click_advanced_filters() children_search_page.check_children_aged_out_of_programmes() @@ -229,7 +225,7 @@ def test_vaccination_file_upload_whitespace_normalization( setup_vaccs, import_records_wizard_page, children_search_page, - dashboard_page, + imports_page, ): """ Test: Upload a vaccination records file with extra whitespace and @@ -247,8 +243,7 @@ def test_vaccination_file_upload_whitespace_normalization( VaccsFileMapping.WHITESPACE, session_id=setup_vaccs, ) - dashboard_page.click_mavis() - dashboard_page.click_children() + imports_page.header.click_children_header() children_search_page.verify_list_has_been_uploaded(input_file, is_vaccinations=True) diff --git a/tests/test_import_systmone_nivs.py b/tests/test_import_systmone_nivs.py index 8ddf9b3481c..b48c143d26b 100644 --- a/tests/test_import_systmone_nivs.py +++ b/tests/test_import_systmone_nivs.py @@ -11,7 +11,6 @@ def setup_systmone_nivs( import_records_wizard_page, imports_page, ): - dashboard_page.click_mavis() dashboard_page.click_imports() imports_page.click_upload_records() import_records_wizard_page.navigate_to_vaccination_records_import() diff --git a/tests/test_log_in.py b/tests/test_log_in.py index 834abf14cc7..e88f7e7e362 100644 --- a/tests/test_log_in.py +++ b/tests/test_log_in.py @@ -63,7 +63,7 @@ def test_login_with_valid_credentials( log_in_page.log_in_and_choose_team_if_necessary(users[role], team) expect(log_in_page.log_out_button).to_be_visible() - expect(dashboard_page.mavis_link).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() diff --git a/tests/test_nurse_consent.py b/tests/test_nurse_consent.py index 9efb80f25f1..df7f36d5350 100644 --- a/tests/test_nurse_consent.py +++ b/tests/test_nurse_consent.py @@ -18,6 +18,7 @@ def setup_session_with_file_upload( sessions_edit_page, import_records_wizard_page, year_groups, + imports_page, ): school = schools[Programme.HPV][0] year_group = year_groups[Programme.HPV] @@ -32,13 +33,9 @@ def _setup(class_list_file): sessions_edit_page.schedule_a_valid_session( offset_days=0, skip_weekends=False ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) sessions_overview_page.click_import_class_lists() import_records_wizard_page.import_class_list(class_list_file, year_group) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + imports_page.header.click_sessions_header() yield return _setup @@ -73,8 +70,8 @@ def test_gillick_competence( school = schools[Programme.HPV][0] sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -111,8 +108,8 @@ def test_gillick_competence_notes( school = schools[Programme.HPV][0] sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -162,9 +159,9 @@ def test_invalid_consent( school = schools[Programme.HPV][0] sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_needs_consent() - sessions_children_page.search_and_click_child(child) + 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() @@ -174,7 +171,7 @@ def test_invalid_consent( sessions_children_page.select_needs_consent() - sessions_children_page.search_and_click_child(child) + 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]) @@ -183,7 +180,7 @@ def test_invalid_consent( sessions_children_page.select_has_a_refusal() sessions_children_page.select_parent_refused() - sessions_children_page.search_and_click_child(child) + 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() @@ -229,10 +226,10 @@ def test_parent_provides_consent_twice( school = schools[Programme.HPV][0] sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_needs_consent() - sessions_children_page.search_and_click_child(child) + 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]) @@ -242,7 +239,7 @@ def test_parent_provides_consent_twice( ) sessions_children_page.select_due_vaccination() - sessions_children_page.search_and_click_child(child) + 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]) @@ -252,7 +249,7 @@ def test_parent_provides_consent_twice( sessions_children_page.select_has_a_refusal() sessions_children_page.select_parent_refused() - sessions_children_page.search_and_click_child(child) + 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() @@ -299,9 +296,9 @@ def test_conflicting_consent_with_gillick_consent( school = schools[Programme.HPV][0] sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_needs_consent() - sessions_children_page.search_and_click_child(child) + 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() @@ -310,7 +307,7 @@ def test_conflicting_consent_with_gillick_consent( nurse_consent_wizard_page.record_parent_positive_consent() sessions_children_page.select_due_vaccination() - sessions_children_page.search_and_click_child(child) + 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() @@ -322,7 +319,7 @@ def test_conflicting_consent_with_gillick_consent( sessions_children_page.select_parent_refused() sessions_children_page.select_conflicting_consent() - sessions_children_page.search_and_click_child(child) + 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() @@ -335,7 +332,7 @@ def test_conflicting_consent_with_gillick_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_and_click_child(child) + 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() @@ -368,10 +365,10 @@ def test_accessibility( dashboard_page.navigate() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_needs_consent() - sessions_children_page.search_and_click_child(child) + 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() @@ -400,12 +397,12 @@ def test_accessibility( nurse_consent_wizard_page.click_confirm() accessibility_helper.check_accessibility() - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() + sessions_register_page.tabs.click_record_vaccinations_tab() accessibility_helper.check_accessibility() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_record_vaccinations_page.search.search_and_click_child(child) accessibility_helper.check_accessibility() sessions_patient_page.confirm_pre_screening_checks(Programme.HPV) diff --git a/tests/test_online_consent_flu.py b/tests/test_online_consent_flu.py index f9844ce26e3..cfb2070fe10 100644 --- a/tests/test_online_consent_flu.py +++ b/tests/test_online_consent_flu.py @@ -35,7 +35,6 @@ def setup_session_with_file_upload( school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] - dashboard_page.click_mavis() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(school, Programme.FLU) sessions_overview_page.click_import_class_lists() @@ -249,16 +248,14 @@ def test_flu_consent_method_displayed_correctly( dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(schools[0], Programme.FLU) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_due_vaccination() - sessions_children_page.search_for(str(child)) + sessions_children_page.search.search_for(str(child)) sessions_children_page.verify_child_shows_correct_flu_consent_method( child, consents[2] ) # Verify in session download - dashboard_page.navigate() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(schools[0], Programme.FLU) + sessions_children_page.tabs.click_overview_tab() sessions_overview_page.verify_consent_message_in_excel() diff --git a/tests/test_online_consent_school_moves.py b/tests/test_online_consent_school_moves.py index c2b855bc35b..59d471c8947 100644 --- a/tests/test_online_consent_school_moves.py +++ b/tests/test_online_consent_school_moves.py @@ -34,7 +34,6 @@ def setup_session_with_file_upload( school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] - dashboard_page.click_mavis() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(school, Programme.FLU) sessions_overview_page.click_import_class_lists() @@ -101,13 +100,12 @@ def test_online_consent_school_moves_with_existing_patient( school_moves_page.click_child(child) review_school_move_page.confirm() - dashboard_page.navigate() - dashboard_page.click_sessions() + school_moves_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(schools[1], Programme.FLU) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_due_vaccination() - sessions_children_page.search_for(str(child)) + sessions_children_page.search.search_for(str(child)) sessions_children_page.verify_child_shows_correct_flu_consent_method( child, ConsentOption.NASAL_SPRAY_OR_INJECTION ) @@ -174,13 +172,12 @@ def test_online_consent_school_moves_with_new_patient( consent_response_page.click_create_new_record() create_new_record_consent_response_page.create_new_record() - dashboard_page.navigate() - dashboard_page.click_sessions() + unmatched_consent_responses_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(schools[1], Programme.FLU) - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() sessions_children_page.select_due_vaccination() - sessions_children_page.search_for(str(child)) + sessions_children_page.search.search_for(str(child)) sessions_children_page.verify_child_shows_correct_flu_consent_method( child, ConsentOption.NASAL_SPRAY_OR_INJECTION ) diff --git a/tests/test_programmes.py b/tests/test_programmes.py index 3cb5832ea3b..0a02f2a36e1 100644 --- a/tests/test_programmes.py +++ b/tests/test_programmes.py @@ -16,7 +16,7 @@ def setup_cohort_upload( ): dashboard_page.click_programmes() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() programme_children_page.click_import_child_records() @@ -110,6 +110,7 @@ def test_archive_and_unarchive_child_via_cohort_upload( child_record_page, child_archive_page, import_records_wizard_page, + imports_page, children, ): """ @@ -126,23 +127,20 @@ def test_archive_and_unarchive_child_via_cohort_upload( import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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() - dashboard_page.click_mavis() - dashboard_page.click_programmes() + child_record_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(Programme.HPV) - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() programme_children_page.click_import_child_records() import_records_wizard_page.import_class_list(CohortsFileMapping.FIXED_CHILD) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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() @@ -215,8 +213,7 @@ def test_verify_careplus_report_for_doubles( programme_overview_page.verify_report_format( report_format=ReportFormat.CAREPLUS, ) - dashboard_page.click_mavis() - dashboard_page.click_programmes() + programme_overview_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(Programme.TD_IPV) programme_overview_page.verify_report_format( report_format=ReportFormat.CAREPLUS, @@ -258,8 +255,7 @@ def test_verify_csv_report_for_doubles( programme_overview_page.verify_report_format( report_format=ReportFormat.CSV, ) - dashboard_page.click_mavis() - dashboard_page.click_programmes() + programme_overview_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(Programme.TD_IPV) programme_overview_page.verify_report_format( report_format=ReportFormat.CSV, @@ -382,12 +378,11 @@ def test_accessibility( programme_overview_page.click_continue() accessibility_helper.check_accessibility() - dashboard_page.click_mavis() - dashboard_page.click_programmes() + programme_overview_page.header.click_programmes_header() programmes_list_page.click_programme_for_current_year(Programme.FLU) - programme_overview_page.click_sessions_tab() + programme_overview_page.tabs.click_sessions_tab() accessibility_helper.check_accessibility() - programme_overview_page.click_children_tab() + programme_overview_page.tabs.click_children_tab() accessibility_helper.check_accessibility() diff --git a/tests/test_psd.py b/tests/test_psd.py index b683c2561f3..63e9b44552e 100644 --- a/tests/test_psd.py +++ b/tests/test_psd.py @@ -20,8 +20,10 @@ def setup_session_with_file_upload( sessions_overview_page, sessions_edit_page, import_records_wizard_page, + imports_page, year_groups, add_vaccine_batch, + vaccines_page, ): def _factory( class_file_mapping: ClassFileMapping, *, schedule_session_for_today: bool = True @@ -29,26 +31,22 @@ def _factory( school = schools[Programme.FLU][0] year_group = year_groups[Programme.FLU] batch_name = add_vaccine_batch(Vaccine.FLUENZ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() - if schedule_session_for_today: - sessions_search_page.click_session_for_programme_group( - school, Programme.FLU.group + vaccines_page.header.click_sessions_header() + sessions_search_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( + offset_days=0, skip_weekends=False ) - 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 - ) - dashboard_page.click_mavis() - 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( class_file_mapping, year_group, Programme.FLU.group ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + imports_page.header.click_sessions_header() return batch_name return _factory @@ -118,8 +116,8 @@ def test_delivering_vaccination_after_psd( sessions_edit_page.click_continue_button() sessions_edit_page.click_save_changes() - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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]) @@ -130,21 +128,20 @@ def test_delivering_vaccination_after_psd( psd_option=True, yes_to_health_questions=True, ) - sessions_overview_page.click_psds_tab() - sessions_psd_page.search_for(str(child)) + sessions_overview_page.tabs.click_psds_tab() + sessions_psd_page.search.search_for(str(child)) sessions_psd_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) - dashboard_page.click_mavis() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(school, Programme.FLU) - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, fluenz_batch_name, ConsentOption.NASAL_SPRAY_OR_INJECTION @@ -215,13 +212,13 @@ def test_bulk_adding_psd( sessions_edit_page.click_continue_button() sessions_edit_page.click_save_changes() - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() for child in children[Programme.FLU]: sessions_children_page.get_flu_consent_status_locator_from_search(child) - sessions_children_page.click_psds_tab() + sessions_children_page.tabs.click_psds_tab() for child in children[Programme.FLU]: - sessions_psd_page.search_for(str(child)) + sessions_psd_page.search.search_for(str(child)) sessions_psd_page.check_child_does_not_have_psd(child) sessions_psd_page.verify_psd_banner_has_patients(2) @@ -232,7 +229,7 @@ def test_bulk_adding_psd( sessions_psd_page.verify_psd_banner_has_patients(0) for child in children[Programme.FLU]: - sessions_psd_page.search_for(str(child)) + sessions_psd_page.search.search_for(str(child)) sessions_psd_page.check_child_has_psd(child) @@ -257,9 +254,6 @@ def test_accessibility( """ school = schools[Programme.HPV][0] - dashboard_page.navigate() - 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(7)): sessions_overview_page.schedule_or_edit_session() @@ -271,7 +265,7 @@ def test_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.click_psds_tab() + sessions_overview_page.tabs.click_psds_tab() accessibility_helper.check_accessibility() sessions_psd_page.click_add_new_psds() diff --git a/tests/test_reporting.py b/tests/test_reporting.py index 5b79851054e..3fce48a875a 100644 --- a/tests/test_reporting.py +++ b/tests/test_reporting.py @@ -65,8 +65,7 @@ def test_report_view( "Vaccinated", expected_vaccinated_percentage ) - dashboard_page.navigate() - dashboard_page.click_children() + 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) diff --git a/tests/test_reset.py b/tests/test_reset.py index b37ebf5c64b..b596df6a8d0 100644 --- a/tests/test_reset.py +++ b/tests/test_reset.py @@ -37,7 +37,7 @@ def setup_all_programmes( Programme.FLU: add_vaccine_batch(Vaccine.FLUENZ), } for programme_group in [Programme.HPV, "doubles", Programme.FLU]: - dashboard_page.click_mavis() + 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)): @@ -93,14 +93,14 @@ 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.click_mavis() + dashboard_page.header.click_mavis_header() dashboard_page.click_sessions() sessions_search_page.click_session_for_programme_group(school, programme_group) if programme_group is Programme.HPV: - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + sessions_register_page.tabs.click_children_tab() + sessions_children_page.search.search_and_click_child(child) programmes = ( [Programme.MENACWY, Programme.TD_IPV] if programme_group == "doubles" @@ -128,7 +128,7 @@ def test_pre_screening_questions_prefilled_for_multiple_vaccinations( target_length=MAVIS_NOTE_LENGTH_LIMIT + 1, generate_spaced_words=True, ) - sessions_children_page.search_and_click_child(child) + 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( vaccination_record, notes=notes diff --git a/tests/test_school_moves.py b/tests/test_school_moves.py index 7b21a22dfd5..4b3b9ea45ab 100644 --- a/tests/test_school_moves.py +++ b/tests/test_school_moves.py @@ -18,6 +18,7 @@ def setup_confirm_and_ignore( sessions_overview_page, sessions_edit_page, import_records_wizard_page, + imports_page, year_groups, children_search_page, child_record_page, @@ -49,30 +50,25 @@ def upload_class_list(): 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) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + 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) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + sessions_overview_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(schools[0], Programme.HPV) upload_class_list() - dashboard_page.click_mavis() - dashboard_page.click_children() + 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.click_activity_log() + child_record_page.tabs.click_activity_log() child_activity_log_page.expect_activity_log_header( f"Added to the session at {schools[0]}" ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + child_activity_log_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(schools[1], Programme.HPV) upload_class_list() - dashboard_page.click_mavis() - dashboard_page.click_school_moves() + imports_page.header.click_school_moves_header() def test_confirm_and_ignore( @@ -167,8 +163,6 @@ def test_accessibility( """ child = children[Programme.HPV][0] - dashboard_page.click_mavis() - dashboard_page.click_school_moves() accessibility_helper.check_accessibility() school_moves_page.click_download() @@ -177,7 +171,6 @@ def test_accessibility( download_school_moves_page.click_continue() accessibility_helper.check_accessibility() - dashboard_page.click_mavis() - dashboard_page.click_school_moves() + download_school_moves_page.header.click_school_moves_header() school_moves_page.click_child(child) accessibility_helper.check_accessibility() diff --git a/tests/test_sessions.py b/tests/test_sessions.py index f72b4027398..d6eb44378a1 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -18,11 +18,11 @@ def setup_tests(log_in_as_nurse, dashboard_page): def setup_session_with_file_upload( setup_tests, schools, - dashboard_page, sessions_search_page, sessions_overview_page, sessions_edit_page, import_records_wizard_page, + imports_page, year_groups, ): school = schools[Programme.HPV][0] @@ -39,8 +39,7 @@ def _setup(class_list_file): ) sessions_overview_page.click_import_class_lists() import_records_wizard_page.import_class_list(class_list_file, year_group) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + imports_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(school, Programme.HPV) yield @@ -87,9 +86,6 @@ def test_session_lifecycle( 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) - dashboard_page.click_mavis() - dashboard_page.click_sessions() - sessions_search_page.click_session_for_programme_group(school, Programme.HPV) sessions_overview_page.click_edit_session() sessions_edit_page.edit_a_session_to_today() @@ -139,18 +135,18 @@ def test_attendance_filters_functionality( """ year_group = year_groups[Programme.HPV] - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() search_summary = sessions_register_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.check_year_checkbox(year_group) - sessions_register_page.click_on_update_results() + sessions_register_page.search.check_year_checkbox(year_group) + sessions_register_page.search.click_on_update_results() expect(search_summary).to_contain_text("Showing 1 to") - sessions_register_page.uncheck_year_checkbox(year_group) - sessions_register_page.click_advanced_filters() - sessions_register_page.check_archived_records_checkbox() - sessions_register_page.click_on_update_results() + 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() expect(search_summary).not_to_be_visible() @@ -167,8 +163,8 @@ def test_session_search_functionality( Verification: - Search returns expected results for the session. """ - sessions_overview_page.click_children_tab() - sessions_children_page.verify_search() + sessions_overview_page.tabs.click_children_tab() + sessions_children_page.search.verify_search() @issue("MAV-1381") @@ -192,14 +188,14 @@ def test_consent_filters( """ child = children[Programme.HPV][0] sessions_overview_page.review_child_with_no_response() - sessions_children_page.search_and_click_child(child) + sessions_children_page.search.search_and_click_child(child) 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_refuse_consent() - sessions_children_page.click_overview_tab() + sessions_children_page.tabs.click_overview_tab() sessions_overview_page.click_has_a_refusal() sessions_children_page.expect_has_a_refusal_to_be_selected() @@ -207,7 +203,6 @@ def test_consent_filters( @issue("MAV-1265") def test_session_activity_notes_order( setup_fixed_child, - dashboard_page, sessions_search_page, sessions_overview_page, sessions_children_page, @@ -231,18 +226,17 @@ def test_session_activity_notes_order( note_1 = "Note 1" note_2 = "Note 2" - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + sessions_patient_session_activity_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_children_tab() - sessions_children_page.search_for(str(child)) - sessions_children_page.check_note_appears_in_search(child, note_2) - sessions_children_page.search_and_click_child(child) + 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]) @@ -271,8 +265,8 @@ def test_triage_consent_given_and_triage_outcome( child = children[Programme.HPV][0] school = schools[Programme.HPV][0] - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -282,13 +276,12 @@ def test_triage_consent_given_and_triage_outcome( yes_to_health_questions=True ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + sessions_patient_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(school, Programme.HPV) - sessions_overview_page.click_register_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -317,8 +310,8 @@ def test_consent_refused_and_activity_log( """ child = children[Programme.HPV][0] - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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() @@ -328,7 +321,7 @@ def test_consent_refused_and_activity_log( expect_alert_text(nurse_consent_wizard_page.page, str(child)) sessions_children_page.select_has_a_refusal() - sessions_children_page.search_and_click_child(child) + 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( f"Consent refused by {child.parents[0].name_and_relationship}", @@ -370,8 +363,7 @@ def test_verify_excel_export_and_clinic_invitation( school = schools[Programme.HPV][0] batch_name = add_vaccine_batch(Vaccine.GARDASIL_9) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + sessions_overview_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group( "Community clinic", Programme.HPV.group ) @@ -379,8 +371,7 @@ def test_verify_excel_export_and_clinic_invitation( sessions_overview_page.schedule_or_edit_session() sessions_edit_page.schedule_a_valid_session(offset_days=0, skip_weekends=False) - dashboard_page.click_mavis() - dashboard_page.click_children() + 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() @@ -393,10 +384,10 @@ def test_verify_excel_export_and_clinic_invitation( 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.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_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( @@ -409,8 +400,7 @@ def test_verify_excel_export_and_clinic_invitation( expect_alert_text( sessions_patient_page.page, "Vaccination outcome recorded for HPV" ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + 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() @@ -464,8 +454,8 @@ def test_editing_session_programmes( 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.click_children_tab() - sessions_children_page.search_and_click_child(child) + sessions_overview_page.tabs.click_children_tab() + sessions_children_page.search.search_and_click_child(child) sessions_patient_page.click_programme_tab(Programme.FLU) @@ -494,8 +484,7 @@ def test_accessibility( school = schools[Programme.HPV][0] child = children[Programme.HPV][0] - dashboard_page.click_mavis() - dashboard_page.click_sessions() + sessions_overview_page.header.click_sessions_header() accessibility_helper.check_accessibility() sessions_search_page.click_session_for_programme_group(school, Programme.HPV) @@ -510,13 +499,13 @@ def test_accessibility( sessions_edit_page.click_back() sessions_edit_page.click_save_changes() - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() accessibility_helper.check_accessibility() - sessions_children_page.click_register_tab() + sessions_children_page.tabs.click_register_tab() accessibility_helper.check_accessibility() - sessions_register_page.search_and_click_child(child) + sessions_register_page.search.search_and_click_child(child) accessibility_helper.check_accessibility() sessions_patient_page.click_session_activity_and_notes() diff --git a/tests/test_tallying.py b/tests/test_tallying.py index 7cdf38748dd..cd8cc4fbbf2 100644 --- a/tests/test_tallying.py +++ b/tests/test_tallying.py @@ -31,6 +31,8 @@ def setup_session_with_file_upload( sessions_search_page, sessions_overview_page, import_records_wizard_page, + imports_page, + vaccines_page, year_groups, ): school = schools[Programme.FLU][0] @@ -41,8 +43,7 @@ def _setup(class_list_file): vaccine: add_vaccine_batch(vaccine) for vaccine in [Vaccine.SEQUIRUS, Vaccine.FLUENZ] } - dashboard_page.click_mavis() - dashboard_page.click_sessions() + vaccines_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group( school, Programme.FLU.group ) @@ -55,8 +56,7 @@ def _setup(class_list_file): import_records_wizard_page.import_class_list( class_list_file, year_group, Programme.FLU.group ) - dashboard_page.click_mavis() - dashboard_page.click_sessions() + imports_page.header.click_sessions_header() sessions_search_page.click_session_for_programme_group(school, Programme.FLU) yield batch_names @@ -98,8 +98,8 @@ def test_tallying( # noqa: PLR0915 tally_totals = sessions_overview_page.get_all_totals(Programme.FLU) assert tally_totals[TallyCategory.NEEDS_CONSENT] > 0 - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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]) @@ -112,8 +112,8 @@ def test_tallying( # noqa: PLR0915 tally_totals[TallyCategory.DUE_INJECTION] += 1 sessions_overview_page.check_all_totals(tally_totals) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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( @@ -128,8 +128,8 @@ def test_tallying( # noqa: PLR0915 tally_totals[TallyCategory.HAS_A_REFUSAL] += 1 sessions_overview_page.check_all_totals(tally_totals) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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) @@ -137,8 +137,8 @@ def test_tallying( # noqa: PLR0915 tally_totals[TallyCategory.NEEDS_CONSENT] += 1 sessions_overview_page.check_all_totals(tally_totals) - sessions_overview_page.click_children_tab() - sessions_children_page.search_and_click_child(child) + 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]) @@ -153,10 +153,10 @@ def test_tallying( # noqa: PLR0915 tally_totals[TallyCategory.DUE_NASAL_SPRAY] += 1 sessions_overview_page.check_all_totals(tally_totals) - sessions_overview_page.click_register_tab() + sessions_overview_page.tabs.click_register_tab() sessions_register_page.register_child_as_attending(str(child)) - sessions_register_page.click_record_vaccinations_tab() - sessions_record_vaccinations_page.search_and_click_child(child) + sessions_register_page.tabs.click_record_vaccinations_tab() + sessions_record_vaccinations_page.search.search_and_click_child(child) vaccination_record = VaccinationRecord( child, Programme.FLU, batch_name, ConsentOption.NASAL_SPRAY @@ -196,7 +196,7 @@ def test_tallying_totals_match_eligible_patients( sum_of_tally_totals = sum(tally_totals.values()) # Navigate to children tab to count eligible children - sessions_overview_page.click_children_tab() + sessions_overview_page.tabs.click_children_tab() # Count all children cards displayed (these are the eligible children) children_cards = sessions_children_page.page.locator( diff --git a/tests/test_vaccines.py b/tests/test_vaccines.py index 24dbe2cbc4c..52eb500e47b 100644 --- a/tests/test_vaccines.py +++ b/tests/test_vaccines.py @@ -35,12 +35,12 @@ def test_batch_add_change_archive( vaccines_page.click_add_batch(vaccine) add_batch_page.fill_name(batch_name) - add_batch_page.fill_expiry_date(get_offset_date(1)) + add_batch_page.date.fill_expiry_date(get_offset_date(1)) add_batch_page.confirm() expect(add_batch_page.success_alert).to_be_visible() vaccines_page.click_change_batch(vaccine, batch_name) - edit_batch_page.fill_expiry_date(get_offset_date(2)) + edit_batch_page.date.fill_expiry_date(get_offset_date(2)) edit_batch_page.confirm() expect(edit_batch_page.success_alert).to_be_visible() @@ -63,7 +63,7 @@ def test_batch_name_too_short(vaccine, add_batch_page, vaccines_page): """ vaccines_page.click_add_batch(vaccine) add_batch_page.fill_name("a") - add_batch_page.fill_expiry_date(get_offset_date(1)) + add_batch_page.date.fill_expiry_date(get_offset_date(1)) add_batch_page.confirm() expect( add_batch_page.error_listitem.filter( @@ -86,7 +86,7 @@ def test_batch_name_too_long(vaccine, add_batch_page, vaccines_page): """ vaccines_page.click_add_batch(vaccine) add_batch_page.fill_name("a" * 101) - add_batch_page.fill_expiry_date(get_offset_date(1)) + add_batch_page.date.fill_expiry_date(get_offset_date(1)) add_batch_page.confirm() expect( add_batch_page.error_listitem.filter( @@ -133,14 +133,14 @@ def test_accessibility( accessibility_helper.check_accessibility() add_batch_page.fill_name(batch_name) - add_batch_page.fill_expiry_date(get_offset_date(1)) + add_batch_page.date.fill_expiry_date(get_offset_date(1)) add_batch_page.confirm() accessibility_helper.check_accessibility() vaccines_page.click_change_batch(Vaccine.GARDASIL_9, batch_name) accessibility_helper.check_accessibility() - edit_batch_page.fill_expiry_date(get_offset_date(2)) + 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)