Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions pages/logout/log_out_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ def __init__(self, page: Page):
def verify_log_out_page(self) -> None:
expect(self.log_out_msg).to_be_visible()

def log_out(self) -> None:
logging.info("Test Complete - Logging Out")
def log_out(self, close_page: bool = True) -> None:
logging.info("Logging Out")
self.click_log_out_link()
expect(self.log_out_msg).to_be_visible()
self.page.close()
if close_page:
self.page.close()
37 changes: 37 additions & 0 deletions pages/screening_practitioner_appointments/book_appointment_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from playwright.sync_api import Page, expect
from pages.base_page import BasePage


class BookAppointmentPage(BasePage):
def __init__(self, page: Page):
super().__init__(page)
self.page = page
# Book Appointment - page locators
self.screening_center_dropdown = page.locator("#UI_NEW_SCREENING_CENTRE")
self.site_dropdown = page.locator("#UI_NEW_SITE")
self.day_with_available_slots = page.locator(
'input.twoColumnCalendar[style*="background-color: rgb(102, 255, 153);"]'
).last
self.appointment_time_radio_button = page.locator(
page.get_by_role("radio", name="UI_NEW_SLOT_SELECTION_ID")
)
self.save_button = page.get_by_role("button", name="Save")

def select_screening_centre_dropdown_option(self, screening_centre: str) -> None:
self.screening_center_dropdown.select_option(label=screening_centre)

def select_site_dropdown_option(self, screening_site: str) -> None:
self.site_dropdown.select_option(label=screening_site)
self.site_dropdown.press("Enter")

def choose_day_with_available_slots(self) -> None:
self.click(self.day_with_available_slots)

def choose_appointment_time(self) -> None:
self.appointment_time_radio_button.check()

def click_save_button(self) -> None:
self.click(self.save_button)

def appointment_booked_confirmation_is_displayed(self, message: str) -> None:
expect(self.page.get_by_text(message)).to_be_visible()
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,16 @@ def __init__(self, page: Page):
self.page = page
# Colonoscopy Assessment Appointments - page locators
self.page_header = self.page.locator("#page-title")
self.nhs_number_filter_text_field = self.page.locator("#nhsNumberFilter")

def verify_page_header(self) -> None:
expect(self.page_header).to_contain_text(
"Patients that Require Colonoscopy Assessment Appointments"
)

def filter_by_nhs_number(self, nhs_number: str) -> None:
self.nhs_number_filter_text_field.fill(nhs_number)
self.nhs_number_filter_text_field.press("Enter")

def click_nhs_number_link(self, nhs_number: str) -> None:
self.click(self.page.get_by_role("link", name=nhs_number))
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from playwright.sync_api import Page, expect
from pages.base_page import BasePage


class PractitionerAvailabilityPage(BasePage):
def __init__(self, page: Page):
super().__init__(page)
self.page = page
# Practitioner Availability - page locators
self.site_id_dropdown = page.locator("#UI_SITE_ID")
self.screening_practitioner_dropdown = page.locator("#UI_PRACTITIONER_ID")
self.calendar_button = page.get_by_role("button", name="Calendar")
self.show_button = page.get_by_role("button", name="Show")
self.time_from_text_field = page.get_by_role("textbox", name="From:")
self.time_to_text_field = page.get_by_role("textbox", name="To:")
self.calculate_slots_button = page.get_by_role("button", name="Calculate Slots")
self.number_of_weeks_text_field = page.locator("#FOR_WEEKS")
self.save_button = page.get_by_role("button", name="Save")

def select_site_dropdown_option(self, site_to_use: str) -> None:
self.site_id_dropdown.select_option(label=site_to_use)

def select_practitioner_dropdown_option(self, practitioner: str) -> None:
self.screening_practitioner_dropdown.select_option(label=practitioner)

def click_calendar_button(self) -> None:
self.click(self.calendar_button)

def click_show_button(self) -> None:
self.click(self.show_button)

def enter_start_time(self, start_time: str) -> None:
self.time_from_text_field.fill(start_time)

def enter_end_time(self, end_time: str) -> None:
self.time_to_text_field.fill(end_time)

def click_calculate_slots_button(self) -> None:
self.click(self.calculate_slots_button)

def enter_number_of_weeks(self, weeks: str) -> None:
self.number_of_weeks_text_field.fill(weeks)

def click_save_button(self) -> None:
self.click(self.save_button)

def slots_updated_message_is_displayed(self, message: str) -> None:
expect(self.page.get_by_text(message)).to_be_visible()
15 changes: 15 additions & 0 deletions pages/screening_practitioner_appointments/set_availability_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from playwright.sync_api import Page
from pages.base_page import BasePage


class SetAvailabilityPage(BasePage):
def __init__(self, page: Page):
super().__init__(page)
self.page = page
# Set Availability - page locators
self.practitioner_availability_link = page.get_by_role(
"link", name="Practitioner Availability -"
)

def go_to_practitioner_availability_page(self) -> None:
self.click(self.practitioner_availability_link)
14 changes: 14 additions & 0 deletions pages/screening_subject_search/episode_events_and_notes_page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from playwright.sync_api import Page, expect
from pages.base_page import BasePage


class EpisodeEventsAndNotesPage(BasePage):
def __init__(self, page: Page):
super().__init__(page)
self.page = page
# List of episode events and notes - page locators

def expected_episode_event_is_displayed(self, event_description: str) -> None:
expect(
self.page.get_by_role("cell", name=event_description, exact=True)
).to_be_visible()
10 changes: 10 additions & 0 deletions pages/screening_subject_search/subject_screening_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def __init__(self, page: Page):
"link", name="Subject Events & Notes"
)
self.list_episodes = self.page.get_by_role("link", name="List Episodes")
self.episodes_list_expander_icon = self.page.locator("#ID_LINK_EPISODES_img")
self.subject_demographics = self.page.get_by_role(
"link", name="Subject Demographics"
)
Expand All @@ -44,6 +45,9 @@ def __init__(self, page: Page):
)
self.subject_search_results_title = self.page.locator("#ntshPageTitle")
self.display_rs = self.page.locator("#displayRS")
self.first_fobt_episode_link = page.get_by_role(
"link", name="FOBT Screening"
).first

def verify_result_contains_text(self, text) -> None:
expect(self.display_rs).to_contain_text(text)
Expand Down Expand Up @@ -112,6 +116,12 @@ def select_change_screening_status(self, option: str) -> None:
def select_reason(self, option: str) -> None:
self.reason.select_option(option)

def expand_episodes_list(self) -> None:
self.click(self.episodes_list_expander_icon)

def click_first_fobt_episode_link(self) -> None:
self.click(self.first_fobt_episode_link)


class ChangeScreeningStatusOptions(Enum):
SEEKING_FURTHER_DATA = "4007"
Expand Down
99 changes: 63 additions & 36 deletions tests/smokescreen/test_compartment_4.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,28 @@
import logging
import pytest
from playwright.sync_api import Page, expect
from playwright.sync_api import Page
from pages.logout.log_out_page import Logout
from pages.base_page import BasePage
from pages.screening_practitioner_appointments.screening_practitioner_appointments import (
ScreeningPractitionerAppointmentsPage,
)
from pages.screening_practitioner_appointments.set_availability_page import (
SetAvailabilityPage,
)
from pages.screening_practitioner_appointments.practitioner_availability_page import (
PractitionerAvailabilityPage,
)
from pages.screening_practitioner_appointments.colonoscopy_assessment_appointments_page import (
ColonoscopyAssessmentAppointments,
)
from pages.screening_practitioner_appointments.book_appointment_page import (
BookAppointmentPage,
)
from pages.screening_subject_search.subject_screening_summary import (
SubjectScreeningSummary,
)
from pages.screening_subject_search.episode_events_and_notes_page import (
EpisodeEventsAndNotesPage,
)
from utils.user_tools import UserTools
from utils.load_properties_file import PropertiesFile
from utils.calendar_picker import CalendarPicker
Expand Down Expand Up @@ -46,42 +66,48 @@ def test_compartment_4(page: Page, smokescreen_properties: dict) -> None:

UserTools.user_login(page, "Screening Centre Manager at BCS001")
BasePage(page).go_to_screening_practitioner_appointments_page()
page.get_by_role("link", name="Set Availability").click()
page.get_by_role("link", name="Practitioner Availability -").click()
page.locator("#UI_SITE_ID").select_option(index=1)
page.locator("#UI_PRACTITIONER_ID").select_option(index=1)
page.get_by_role("button", name="Calendar").click()
ScreeningPractitionerAppointmentsPage(page).go_to_set_availability_page()
SetAvailabilityPage(page).go_to_practitioner_availability_page()
PractitionerAvailabilityPage(page).select_site_dropdown_option(
"THE ROYAL HOSPITAL (WOLVERHAMPTON)"
)
PractitionerAvailabilityPage(page).select_practitioner_dropdown_option(
"Astonish, Ethanol"
)
PractitionerAvailabilityPage(page).click_calendar_button()
CalendarPicker(page).select_day(
datetime.today()
) # This will make it so that we can only run this test once a day, or we need to restore the DB back to the snapshot
page.get_by_role("button", name="Show").dblclick()
page.get_by_role("textbox", name="From:").click()
page.get_by_role("textbox", name="From:").fill("09:00")
page.get_by_role("textbox", name="To:").click()
page.get_by_role("textbox", name="To:").fill("17:15")
page.get_by_role("button", name="Calculate Slots").click()
page.locator("#FOR_WEEKS").click()
page.locator("#FOR_WEEKS").fill("6")
page.locator("#FOR_WEEKS").press("Enter")
page.get_by_role("button", name="Save").click()
expect(page.get_by_text("Slots Updated for 6 Weeks")).to_be_visible()
Logout(page).log_out()
PractitionerAvailabilityPage(page).click_show_button()
PractitionerAvailabilityPage(page).enter_start_time("09:00")
PractitionerAvailabilityPage(page).enter_end_time("17:15")
PractitionerAvailabilityPage(page).click_calculate_slots_button()
PractitionerAvailabilityPage(page).enter_number_of_weeks("6")
PractitionerAvailabilityPage(page).click_save_button()
PractitionerAvailabilityPage(page).slots_updated_message_is_displayed(
"Slots Updated for 6 Weeks"
)
Logout(page).log_out(close_page=False)

page.get_by_role("button", name="Log in").click()
ScreeningPractitionerAppointmentsPage(page).go_to_log_in_page()
UserTools.user_login(page, "Hub Manager State Registered at BCS01")
BasePage(page).go_to_screening_practitioner_appointments_page()
page.get_by_role("link", name="Patients that Require").click()
ScreeningPractitionerAppointmentsPage(page).go_to_patients_that_require_page()
# Add for loop to loop x times (depends on how many we want to run it for) 70 - 79
page.locator("#nhsNumberFilter").click()
page.locator("#nhsNumberFilter").fill("9991406131")
page.locator("#nhsNumberFilter").press("Enter")
page.get_by_role("link", name="999 140 6131").click()
page.get_by_label("Screening Centre ( All)").select_option("23162")
page.locator("#UI_NEW_SITE").select_option("42808")
page.locator('input[name="fri2"]').click() # Todays date if available
page.locator("#UI_NEW_SLOT_SELECTION_ID_359119").check()
page.get_by_role("button", name="Save").click()
expect(page.get_by_text("Appointment booked")).to_be_visible()
ColonoscopyAssessmentAppointments(page).filter_by_nhs_number("999 205 6339")
ColonoscopyAssessmentAppointments(page).click_nhs_number_link("999 205 6339")
BookAppointmentPage(page).select_screening_centre_dropdown_option(
"BCS001 - Wolverhampton Bowel Cancer Screening Centre"
)
BookAppointmentPage(page).select_site_dropdown_option("Holly Hall Clinic (? km)")
BookAppointmentPage(page).choose_day_with_available_slots()
# page.locator("#UI_NEW_SLOT_SELECTION_ID_359119").check()
# Will be revisited as part of Utilities update
BookAppointmentPage(page).choose_appointment_time()
BookAppointmentPage(page).click_save_button()
BookAppointmentPage(page).appointment_booked_confirmation_is_displayed(
"Appointment booked"
)

batch_processing(
page,
Expand All @@ -96,9 +122,10 @@ def test_compartment_4(page: Page, smokescreen_properties: dict) -> None:
"GP Result (Abnormal)",
"A25 - 1st Colonoscopy Assessment Appointment Booked, letter sent",
)
page.locator("#ID_LINK_EPISODES_img").click()
page.get_by_role("link", name="FOBT Screening").click()
expect(
page.get_by_role("cell", name="A167 - GP Abnormal FOBT Result Sent", exact=True)
).to_be_visible()

SubjectScreeningSummary(page).expand_episodes_list()
SubjectScreeningSummary(page).click_first_fobt_episode_link()
EpisodeEventsAndNotesPage(page).expected_episode_event_is_displayed(
"A167 - GP Abnormal FOBT Result Sent"
)
Logout(page).log_out()
Loading