Skip to content

Commit 634da6e

Browse files
Merge remote-tracking branch 'origin' into feature/BCSS-20365-compartment-5-pom-for-contact-with-patient-page
2 parents e25d735 + c1d41de commit 634da6e

File tree

14 files changed

+334
-72
lines changed

14 files changed

+334
-72
lines changed

.github/actions/run-playwright-tests/action.yml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ inputs:
88
required: true
99
type: string
1010
marker_to_use:
11-
description: "The test marker to use when running tests (e.g. smokescreen)"
11+
description: "The test marker to use when running tests (e.g. smoke)"
1212
required: true
1313
type: string
1414

@@ -29,13 +29,10 @@ runs:
2929
run: python -m playwright install --with-deps
3030
- name: Run specified tests
3131
shell: bash
32-
run: pytest -m ${{ inputs.marker_to_use }} --base-url=$URL_TO_USE --ignore=tests_utils/
33-
env:
34-
BCSS_PASS: ${{ secrets.BCSS_PASS }}
35-
ORACLE_DB: ${ ${{ secrets.ORACLE_DB }}/<REPLACE>/${{ inputs.bcss_cloud_environment }} }
36-
ORACLE_USERNAME: ${{ secrets.ORACLE_USERNAME }}
37-
ORACLE_PASS: ${{ secrets.ORACLE_PASS }}
38-
URL_TO_USE: ${ ${{ vars.CLOUD_ENV_URL }}/<REPLACE>/${{ inputs.bcss_cloud_environment }} }
32+
run: |
33+
URL_TO_USE="${URL_TO_USE_DEFAULT//<REPLACE>/${{ inputs.bcss_cloud_environment }}}"
34+
ORACLE_DB="${ORACLE_DB_DEFAULT//<REPLACE>/${{ inputs.bcss_cloud_environment }}}"
35+
pytest -m ${{ inputs.marker_to_use }} --base-url=https://$URL_TO_USE --ignore=tests_utils/
3936
- uses: actions/upload-artifact@v4
4037
if: ${{ !cancelled() }}
4138
with:

.github/workflows/execute-tests.yaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
name: "Test Runner"
22

3+
# This workflow is triggered manually and allows the user to specify the environment and test marker to run.
4+
# It is functional, however will not work against BCSS test environments until we configure some self-hosted
5+
# GitHub runners, as the GitHub-hosted runners are based outside of the UK so get blocked by the WAF on the
6+
# environments.
7+
38
on:
49
workflow_dispatch:
510
inputs:
@@ -17,12 +22,19 @@ jobs:
1722
run-tests:
1823
name: "Run Specified Tests"
1924
runs-on: ubuntu-latest
20-
timeout-minutes: 3
25+
timeout-minutes: 10
2126
steps:
2227
- name: "Checkout code"
2328
uses: actions/checkout@v4
2429
- name: "Run Tests"
30+
id: run-tests
2531
uses: ./.github/actions/run-playwright-tests
2632
with:
2733
bcss_cloud_environment: "${{ inputs.bcss_cloud_environment }}"
2834
marker_to_use: "${{ inputs.marker_to_use }}"
35+
env:
36+
BCSS_PASS: ${{ secrets.BCSS_PASS }}
37+
ORACLE_DB_DEFAULT: ${{ secrets.ORACLE_DB }}
38+
ORACLE_USERNAME: ${{ secrets.ORACLE_USERNAME }}
39+
ORACLE_PASS: ${{ secrets.ORACLE_PASS }}
40+
URL_TO_USE_DEFAULT: ${{ vars.CLOUD_ENV_URL }}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
4+
5+
class AppointmentCalendar(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Appointment Calendar - page filters
10+
self.appointment_type_drowdown = self.page.locator("#UI_APPOINTMENT_TYPE")
11+
self.screening_centre_dropdown = self.page.locator("#UI_SCREENING_CENTRE")
12+
self.site_dropdown = self.page.locator("#UI_SITE")
13+
self.view_appointments_on_this_day_button = self.page.get_by_role(
14+
"button", name="View appointments on this day"
15+
)
16+
17+
def select_appointment_type_dropdown(self, type: str) -> None:
18+
self.appointment_type_drowdown.select_option(label=type)
19+
20+
def select_screening_centre_dropdown(self, screening_centre: str) -> None:
21+
self.screening_centre_dropdown.select_option(label=screening_centre)
22+
23+
def select_site_dropdown(self, site: str) -> None:
24+
self.site_dropdown.select_option(label=site)
25+
26+
def click_view_appointments_on_this_day_button(self) -> None:
27+
self.click(self.view_appointments_on_this_day_button)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
4+
5+
class AppointmentDetail(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Appointment Detail - page filters
10+
self.attendance_radio = self.page.get_by_role("radio", name="Attendance")
11+
self.attended_check_box = self.page.locator("#UI_ATTENDED")
12+
self.calendar_button = self.page.get_by_role("button", name="Calendar")
13+
self.save_button = self.page.get_by_role("button", name="Save")
14+
15+
def check_attendance_radio(self) -> None:
16+
self.attendance_radio.check()
17+
18+
def check_attended_check_box(self) -> None:
19+
self.attended_check_box.check()
20+
21+
def click_calendar_button(self) -> None:
22+
self.click(self.calendar_button)
23+
24+
def click_save_button(self) -> None:
25+
self.click(self.save_button)
26+
27+
def verify_text_visible(self, text: str) -> None:
28+
expect(self.page.get_by_text(text)).to_be_visible()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from playwright.sync_api import Page
2+
from pages.base_page import BasePage
3+
4+
class ScreeningPractitionerDayView(BasePage):
5+
def __init__(self, page: Page):
6+
super().__init__(page)
7+
self.page = page
8+
# Screening Practitioner Day View - page locators
9+
self.calendar_button = page.get_by_role("button", name="Calendar")
10+
11+
def click_calendar_button(self) -> None:
12+
self.click(self.calendar_button)
13+
14+
def click_patient_link(self, patient_name: str) -> None:
15+
self.click(self.page.get_by_role("link", name=patient_name))
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from playwright.sync_api import Page, expect
2+
from pages.base_page import BasePage
3+
from enum import Enum
4+
5+
6+
class SubjectDatasets(BasePage):
7+
def __init__(self, page: Page):
8+
super().__init__(page)
9+
self.page = page
10+
11+
self.show_dataset_button = self.page.get_by_role("link", name="Show Dataset")
12+
13+
self.save_dataset_button = self.page.locator(
14+
"#UI_DIV_BUTTON_SAVE1"
15+
).get_by_role("button", name="Save Dataset")
16+
17+
self.select_asa_grade_dropdown = self.page.get_by_label("ASA Grade")
18+
19+
self.select_fit_for_colonoscopy_dropdown = self.page.get_by_label(
20+
"Fit for Colonoscopy (SSP)"
21+
)
22+
23+
self.dataset_complete_radio_button_yes = self.page.get_by_role(
24+
"radio", name="Yes"
25+
)
26+
27+
self.dataset_complete_radio_button_no = self.page.get_by_role(
28+
"radio", name="No"
29+
)
30+
31+
def click_show_datasets(self) -> None:
32+
self.click(self.show_dataset_button)
33+
34+
def save_dataset(self) -> None:
35+
self.click(self.save_dataset_button)
36+
37+
def select_asa_grade_option(self, option: str) -> None:
38+
self.select_asa_grade_dropdowen.select_option(option)
39+
40+
def select_fit_for_colonoscopy_option(self, option: str) -> None:
41+
self.select_fit_for_colonoscopy_dropdown.select_option(option)
42+
43+
def click_dataset_complete_radio_button_yes(self) -> None:
44+
self.dataset_complete_radio_button_yes.check()
45+
46+
def click_dataset_complete_radio_button_no(self) -> None:
47+
self.dataset_complete_radio_button_no.check()
48+
49+
50+
class AsaGradeOptions(Enum):
51+
FIT = "17009"
52+
53+
54+
class FitForColonoscopySspOptions(Enum):
55+
YES = "17058"
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from playwright.sync_api import Page, expect, Locator
2+
from pages.base_page import BasePage
3+
4+
5+
class AdvanceFOBTScreeningEpisode(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Advance FOBT Screening Episode - page locators
10+
self.suitable_for_endoscopic_test_button = self.page.get_by_role(
11+
"button", name="Suitable for Endoscopic Test"
12+
)
13+
self.calendar_button = self.page.get_by_role("button", name="Calendar")
14+
self.test_type_dropdown = self.page.locator("#UI_EXT_TEST_TYPE_2233")
15+
self.invite_for_diagnostic_test_button = self.page.get_by_role(
16+
"button", name="Invite for Diagnostic Test >>"
17+
)
18+
self.attend_diagnostic_test_button = self.page.get_by_role(
19+
"button", name="Attend Diagnostic Test"
20+
)
21+
self.other_post_investigation_button = self.page.get_by_role(
22+
"button", name="Other Post-investigation"
23+
)
24+
self.record_other_post_investigation_contact_button = self.page.get_by_role(
25+
"button", name="Record other post-"
26+
)
27+
28+
def click_suitable_for_endoscopic_test_button(self) -> None:
29+
AdvanceFOBTScreeningEpisode(self.page).safe_accept_dialog(
30+
self.suitable_for_endoscopic_test_button
31+
)
32+
33+
def click_calendar_button(self) -> None:
34+
self.click(self.calendar_button)
35+
36+
def select_test_type_dropdown_option(self, text: str) -> None:
37+
self.test_type_dropdown.select_option(label=text)
38+
39+
def click_invite_for_diagnostic_test_button(self) -> None:
40+
AdvanceFOBTScreeningEpisode(self.page).safe_accept_dialog(
41+
self.invite_for_diagnostic_test_button
42+
)
43+
44+
def click_attend_diagnostic_test_button(self) -> None:
45+
self.click(self.attend_diagnostic_test_button)
46+
47+
def click_other_post_investigation_button(self) -> None:
48+
AdvanceFOBTScreeningEpisode(self.page).safe_accept_dialog(
49+
self.other_post_investigation_button
50+
)
51+
52+
def get_latest_event_status_cell(self, latest_event_status: str) -> Locator:
53+
return self.page.get_by_role("cell", name=latest_event_status, exact=True)
54+
55+
def verify_latest_event_status_value(self, latest_event_status: str) -> None:
56+
latest_event_status_cell = self.get_latest_event_status_cell(
57+
latest_event_status
58+
)
59+
expect(latest_event_status_cell).to_be_visible()
60+
61+
def click_record_other_post_investigation_contact_button(self) -> None:
62+
self.click(self.record_other_post_investigation_contact_button)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from playwright.sync_api import Page
2+
from pages.base_page import BasePage
3+
4+
5+
class AttendDiagnosticTest(BasePage):
6+
def __init__(self, page: Page):
7+
super().__init__(page)
8+
self.page = page
9+
# Advance Diagnostic Test - page locators
10+
self.actual_type_of_test_dropdown = self.page.locator("#UI_CONFIRMED_TYPE_OF_TEST")
11+
self.calendar_button = self.page.get_by_role("button", name="Calendar")
12+
self.save_button =self.page.get_by_role("button", name="Save")
13+
14+
def select_actual_type_of_test_dropdown_option(self, text: str) -> None:
15+
self.actual_type_of_test_dropdown.select_option(label=text)
16+
17+
def click_calendar_button(self) -> None:
18+
self.click(self.calendar_button)
19+
20+
def click_save_button(self) -> None:
21+
self.click(self.save_button)

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ pandas~=2.2.3
77
python-dotenv~=1.0.1
88
sqlalchemy>=2.0.38
99
jproperties~=2.1.2
10+
pypdf>=5.3.0

tests/smokescreen/bcss_smokescreen_tests.properties

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@
3232
c4_eng_site_name2=The Royal Hospital (Wolverhampton)
3333
c4_eng_practitioner_name=Astonish, Ethanol
3434

35+
# ----------------------------------
36+
# compartment 5
37+
# ----------------------------------
38+
c5_eng_appointment_type=Colonoscopy Assessment
39+
c5_eng_screening_centre=BCS001 - Wolverhampton Bowel Cancer Screening Centre
40+
c5_eng_site=(all)
41+
3542
# ----------------------------------
3643
# compartment 6
3744
# ----------------------------------
@@ -78,7 +85,7 @@
7885
# ----------------------------------
7986
# compartment 5
8087
# ----------------------------------
81-
# c5_eng_number_of_screening_appts_to_attend=6
88+
# c5_eng_number_of_screening_appts_to_attend=5
8289

8390
# ----------------------------------
8491
# compartment 6

0 commit comments

Comments
 (0)