Skip to content

Commit 0679433

Browse files
AC - added some more tests
1 parent 731f484 commit 0679433

File tree

9 files changed

+351
-8
lines changed

9 files changed

+351
-8
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
__pycache__/
1616
.pytest_cache/
1717
test-results/
18-
.env
18+
.env
19+
venv

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"MD013": false,
44
"MD024": { "siblings_only": true },
55
"MD033": false
6-
}
6+
},
7+
"makefile.configureOnOpen": false
78
}

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ WORKDIR /test
66
COPY ./requirements.txt ./requirements.txt
77
RUN pip install --no-cache-dir -r requirements.txt
88
RUN playwright install --with-deps
9-
RUN playwright install chrome
9+
RUN playwright install chrome --with-deps
1010

1111
RUN mkdir -p /tests/
1212
COPY ./tests/ ./tests/

pages/bcss_home_page.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,27 @@ class BcssHomePage:
55

66
def __init__(self, page: Page):
77
self.page = page
8+
9+
# Top menu bar
810
self.sub_menu_link = self.page.get_by_role("link", name="Show Sub-menu")
911
self.hide_sub_menu_link = self.page.get_by_role("link", name="Hide Sub-menu")
10-
self.select_org_link = self.page.get_by_role("link", name="Select Org")
1112
self.back_button = self.page.get_by_role("link", name="Back")
12-
self.release_notes_link = self.page.get_by_role("link", name="- Release Notes")
13+
self.main_menu = self.page.get_by_role("link", name="Main Menu")
14+
self.select_org_link = self.page.get_by_role("link", name="Select Org")
15+
self.help_link = self.page.get_by_role("link", name="Help")
16+
self.log_out = self.page.get_by_role("link", name="Log-out")
17+
18+
# Alerts
1319
self.refresh_alerts_link = self.page.get_by_role("link", name="Refresh alerts")
20+
21+
# Footer
22+
self.release_notes_link = self.page.get_by_role("link", name="- Release Notes")
1423
self.user_guide_link = self.page.get_by_role("link", name="User guide")
15-
self.help_link = self.page.get_by_role("link", name="Help")
1624

25+
# Main Menu
26+
self.screening_pracitioners_appointments = self.page.get_by_role(
27+
"link", name="Screening Practitioner Appointments"
28+
)
1729

1830
def click_sub_menu_link(self):
1931
self.sub_menu_link.click()
@@ -38,3 +50,6 @@ def click_user_guide_link(self):
3850

3951
def click_help_link(self):
4052
self.help_link.click()
53+
54+
def click_screening_pracitioners_appointments(self):
55+
self.screening_pracitioners_appointments.click()
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
from playwright.sync_api import Page
2+
3+
4+
class ScreeningPractitionerAppointments:
5+
6+
def __init__(self, page: Page):
7+
self.page = page
8+
# Top menu bar
9+
self.sub_menu_link = self.page.get_by_role("link", name="Show Sub-menu")
10+
self.hide_sub_menu_link = self.page.get_by_role("link", name="Hide Sub-menu")
11+
self.back_button = self.page.get_by_role("link", name="Back")
12+
self.main_menu = self.page.get_by_role("link", name="Main Menu")
13+
self.select_org_link = self.page.get_by_role("link", name="Select Org")
14+
self.help_link = self.page.get_by_role("link", name="Help")
15+
self.log_out = self.page.get_by_role("link", name="Log-out")
16+
17+
# Alerts
18+
self.refresh_alerts_link = self.page.get_by_role("link", name="Refresh alerts")
19+
20+
# Footer
21+
self.release_notes_link = self.page.get_by_role("link", name="- Release Notes")
22+
self.user_guide_link = self.page.get_by_role("link", name="User guide")
23+
24+
# Main Menu
25+
self.view_appointments = self.page.get_by_role("link", name="View appointments")
26+
self.patients_that_require_colonoscopy_assessment_appointments = (
27+
self.page.get_by_role(
28+
"link", name="Patients that Require Colonoscopy Assessment Appointments"
29+
)
30+
)
31+
self.patients_that_require_colonoscopy_assessment_appointments_bowl_scope = (
32+
self.page.get_by_role(
33+
"link",
34+
name="Bowel Scope",
35+
)
36+
)
37+
self.patients_that_require_surveillance_appointments = self.page.get_by_role(
38+
"link", name="Patients that Require Surveillance Appointments"
39+
)
40+
self.patients_that_require_post_investigation_appointments = (
41+
self.page.get_by_role(
42+
"link", name="Patients that Require Post-Investigation Appointments"
43+
)
44+
)
45+
self.set_availability = self.page.get_by_role("link", name="Set Availability")
46+
47+
# Top menu interactions
48+
def click_sub_menu_link(self):
49+
self.sub_menu_link.click()
50+
51+
def click_hide_sub_menu_link(self):
52+
self.hide_sub_menu_link.click()
53+
54+
def click_select_org_link(self):
55+
self.select_org_link.click()
56+
57+
def click_back_button(self):
58+
self.back_button.click()
59+
60+
def click_release_notes_link(self):
61+
self.release_notes_link.click()
62+
63+
def click_refresh_alerts_link(self):
64+
self.refresh_alerts_link.click()
65+
66+
def click_user_guide_link(self):
67+
self.user_guide_link.click()
68+
69+
def click_help_link(self):
70+
self.help_link.click()
71+
72+
# Main Menu interactions
73+
def click_view_appointments(self):
74+
self.view_appointments.click()
75+
76+
def click_patients_that_require_colonoscopy_assessment_appointments(self):
77+
self.patients_that_require_colonoscopy_assessment_appointments.click()
78+
79+
def click_patients_that_require_colonoscopy_assessment_appointments_bowl_scope(
80+
self,
81+
):
82+
self.patients_that_require_colonoscopy_assessment_appointments_bowl_scope.click()
83+
84+
def click_patients_that_require_surveillance_appointments(self):
85+
self.patients_that_require_surveillance_appointments.click()
86+
87+
def click_patients_that_require_post_investigation_appointments(self):
88+
self.patients_that_require_post_investigation_appointments.click()
89+
90+
def click_set_availability(self):
91+
self.set_availability.click()

pytest.ini

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,8 @@ markers =
1313
branch: tests designed to run at a branch level
1414
main: tests designed to run against the main branch
1515
release: tests designed to run specifically against a release branch
16-
pythonpath = .
16+
pythonpath = .
17+
timeout = 60
18+
retries = 3
19+
retry_delay = 1
20+
cumulative_timing = false

requirements.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
pytest-playwright>=0.5.1
22
pytest-html>=4.1.1
33
pytest-json-report>=1.5.0
4-
python-dotenv>=1.0.1
4+
pytest-timeout>=2.3.1
5+
python-dotenv>=1.0.1
6+
pytest-retry>=1.6.3
7+
PyMuPDF>=1.24.13

tests/test_homepage_links.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from os import environ
2+
import pytest
3+
from playwright.sync_api import Page, expect
4+
from pages.login import BcssLoginPage
5+
from pages.bcss_home_page import BcssHomePage
6+
from dotenv import load_dotenv
7+
8+
load_dotenv()
9+
expect.set_options(timeout=30_000)
10+
11+
12+
@pytest.fixture(scope="function", autouse=True)
13+
def before_each(page: Page):
14+
# This will run before every other job and log in to the homepage.
15+
username = environ.get("BCSS_USERNAME")
16+
password = environ.get("BCSS_PASSWORD")
17+
login_page = BcssLoginPage(page)
18+
login_page.login(username, password)
19+
20+
21+
def test_homepage_sub_menu(page: Page) -> None:
22+
homepage = BcssHomePage(page)
23+
24+
# Check the show and hide sub menu works
25+
homepage.click_sub_menu_link()
26+
page.screenshot(path="test-results/sub_menu_screen.png")
27+
expect(page.get_by_role("link", name="Organisation Parameters")).to_be_visible()
28+
homepage.click_hide_sub_menu_link()
29+
page.screenshot(path="test-results/menu_screen.png")
30+
expect(page.get_by_role("cell", name="Alerts", exact=True)).to_be_visible()
31+
32+
33+
def test_homepage_select_org(page: Page) -> None:
34+
homepage = BcssHomePage(page)
35+
36+
# check the select org link works
37+
homepage.click_select_org_link()
38+
page.screenshot(path="test-results/select_org_screen.png")
39+
expect(page.locator("form[action*='/changeorg']")).to_contain_text(
40+
"Choose an Organisation"
41+
)
42+
# Check there is at least one entry in the organisation list
43+
table_locator = page.locator("table#organisations tr")
44+
row_count = table_locator.count()
45+
assert row_count > 0
46+
# Go back to the home page and make sure it loaded
47+
homepage.click_back_button()
48+
expect(page.get_by_role("cell", name="Alerts", exact=True)).to_be_visible()
49+
50+
51+
def test_homepage_release_notes(page: Page) -> None:
52+
homepage = BcssHomePage(page)
53+
54+
# Click release notes link
55+
homepage.click_release_notes_link()
56+
page.screenshot(path="test-results/release_notes_screen.png")
57+
expect(page.locator("#page-title")).to_contain_text("Release Notes")
58+
59+
60+
def test_homepage_help(page: Page) -> None:
61+
homepage = BcssHomePage(page)
62+
63+
# check the help link works
64+
with page.expect_popup() as popup_info:
65+
homepage.click_help_link()
66+
help_page = popup_info.value
67+
help_page.screenshot(path="test-results/help_screen.png")
68+
expect(
69+
help_page.get_by_text("Bowel Cancer Screening System Help")
70+
).to_be_visible
71+
72+
73+
def test_homepage_user_guide(page: Page) -> None:
74+
homepage = BcssHomePage(page)
75+
76+
# check the user guide works
77+
with page.expect_popup() as popup_info:
78+
homepage.click_user_guide_link()
79+
# homepage.screenshot(path="test-results/help_screen.png")
80+
user_guide = popup_info.value
81+
# user_guide.screenshot(path="test-results/help_screen.png")
82+
expect(user_guide.get_by_text("Bowel Cancer Screening System"))

0 commit comments

Comments
 (0)