Skip to content

Commit cbf606b

Browse files
authored
Merge pull request #802 from NHSDigital/add-header-object
Add header component
2 parents 2f995d0 + aba97d2 commit cbf606b

35 files changed

+232
-168
lines changed

mavis/test/fixtures/helpers.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def wrapper(
163163
msg = "Update upload_offline_vaccination to handle programme"
164164
raise ValueError(msg)
165165

166-
dashboard_page.click_mavis()
166+
dashboard_page.navigate()
167167
dashboard_page.click_sessions()
168168
sessions_search_page.click_session_for_programme_group(school, programme.group)
169169
if not sessions_overview_page.is_date_scheduled(get_offset_date(0)):
@@ -177,21 +177,18 @@ def wrapper(
177177
child.year_group,
178178
programme.group,
179179
)
180-
dashboard_page.click_mavis()
181-
dashboard_page.click_sessions()
180+
imports_page.header.click_sessions_header()
182181
sessions_search_page.click_session_for_programme_group(school, programme)
183182
session_id = sessions_overview_page.get_session_id_from_offline_excel()
184-
dashboard_page.click_mavis()
185-
dashboard_page.click_imports()
183+
sessions_overview_page.header.click_imports_header()
186184
imports_page.click_upload_records()
187185
import_records_wizard_page.navigate_to_vaccination_records_import()
188186
import_records_wizard_page.upload_and_verify_output(
189187
file_mapping=vaccs_file,
190188
session_id=session_id,
191189
programme_group=programme.group,
192190
)
193-
dashboard_page.click_mavis()
194-
dashboard_page.click_programmes()
191+
imports_page.header.click_programmes_header()
195192
programmes_list_page.click_programme_for_current_year(programme)
196193
programme_overview_page.tabs.click_children_tab()
197194
programme_children_page.search_for_child(child)
@@ -210,6 +207,7 @@ def setup_session_and_batches_with_fixed_child(
210207
sessions_search_page,
211208
sessions_overview_page,
212209
import_records_wizard_page,
210+
imports_page,
213211
children,
214212
log_in_page,
215213
nurse,
@@ -227,8 +225,7 @@ def _setup(programme_group):
227225
for vaccine in Vaccine
228226
if vaccine.programme.group == programme_group
229227
}
230-
dashboard_page.click_mavis()
231-
dashboard_page.click_sessions()
228+
imports_page.header.click_sessions_header()
232229
sessions_search_page.click_session_for_programme_group(
233230
school, programme_group
234231
)

mavis/test/pages/children.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
from mavis.test.annotations import step
77
from mavis.test.data import create_child_list_from_file
88
from mavis.test.models import Child, Programme, School
9+
from mavis.test.pages.header import HeaderComponent
910
from mavis.test.utils import get_current_datetime, reload_until_element_is_visible
1011

1112

1213
class ChildrenSearchPage:
1314
def __init__(self, page: Page) -> None:
1415
self.page = page
16+
self.header = HeaderComponent(page)
1517

1618
self.children_heading = self.page.get_by_role(
1719
"heading",
@@ -133,6 +135,7 @@ class ChildRecordPage:
133135
def __init__(self, page: Page) -> None:
134136
self.page = page
135137
self.tabs = ChildRecordTabs(page)
138+
self.header = HeaderComponent(page)
136139

137140
vaccinations_card = page.locator("section").filter(
138141
has=page.get_by_role("heading", name="Vaccinations"),
@@ -210,6 +213,8 @@ def check_child_is_unarchived(self) -> None:
210213
class ChildEditPage:
211214
def __init__(self, page: Page) -> None:
212215
self.page = page
216+
self.header = HeaderComponent(page)
217+
213218
self.change_nhs_no_link = self.page.get_by_role(
214219
"link",
215220
name="Change NHS number",
@@ -232,6 +237,8 @@ def fill_nhs_no_for_child(self, child: Child, nhs_no: str) -> None:
232237
class ChildArchivePage:
233238
def __init__(self, page: Page) -> None:
234239
self.page = page
240+
self.header = HeaderComponent(page)
241+
235242
self.imported_in_error_radio = self.page.get_by_role(
236243
"radio",
237244
name="It was imported in error",
@@ -275,6 +282,8 @@ class ChildActivityLogPage:
275282
def __init__(self, page: Page) -> None:
276283
self.page = page
277284
self.tabs = ChildRecordTabs(page)
285+
self.header = HeaderComponent(page)
286+
278287
self.manually_matched_card = self.page.get_by_text(
279288
"Consent response manually matched with child record",
280289
)

mavis/test/pages/consent_responses.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
from mavis.test.annotations import step
44
from mavis.test.models import Child, Relationship
5+
from mavis.test.pages.header import HeaderComponent
56
from mavis.test.utils import reload_until_element_is_visible
67

78

89
class UnmatchedConsentResponsesPage:
910
def __init__(self, page: Page) -> None:
1011
self.page = page
12+
self.header = HeaderComponent(page)
13+
1114
self.rows = page.get_by_role("row")
1215
self.empty_paragraph = page.get_by_text(
1316
"There are currently no unmatched consent responses.",
@@ -42,6 +45,8 @@ def check_response_for_child_not_visible(self, child: Child) -> None:
4245
class ConsentResponsePage:
4346
def __init__(self, page: Page) -> None:
4447
self.page = page
48+
self.header = HeaderComponent(page)
49+
4550
self.archive_link = page.get_by_role("link", name="Archive", exact=True)
4651
self.create_new_record_link = page.get_by_role(
4752
"link",
@@ -66,6 +71,8 @@ def click_match(self) -> None:
6671
class ArchiveConsentResponsePage:
6772
def __init__(self, page: Page) -> None:
6873
self.page = page
74+
self.header = HeaderComponent(page)
75+
6976
self.notes_textbox = page.get_by_role("textbox", name="Notes")
7077
self.archive_button = page.get_by_role("button", name="Archive")
7178

@@ -78,6 +85,8 @@ def archive(self, notes: str) -> None:
7885
class CreateNewRecordConsentResponsePage:
7986
def __init__(self, page: Page) -> None:
8087
self.page = page
88+
self.header = HeaderComponent(page)
89+
8190
self.create_new_record_button = page.get_by_role(
8291
"button",
8392
name="Create a new record from response",
@@ -91,6 +100,8 @@ def create_new_record(self) -> None:
91100
class MatchConsentResponsePage:
92101
def __init__(self, page: Page) -> None:
93102
self.page = page
103+
self.header = HeaderComponent(page)
104+
94105
self.search_textbox = page.get_by_role("textbox", name="Search")
95106
self.search_button = page.get_by_role("button", name="Search")
96107
self.link_button = page.get_by_role("button", name="Link response with record")

mavis/test/pages/dashboard.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
from playwright.sync_api import Page
22

33
from mavis.test.annotations import step
4+
from mavis.test.pages.header import HeaderComponent
45

56

67
class DashboardPage:
78
def __init__(self, page: Page) -> None:
89
self.page = page
9-
10-
self.mavis_link = page.get_by_role(
11-
"link",
12-
name="Manage vaccinations in schools",
13-
)
10+
self.header = HeaderComponent(page)
1411

1512
links = page.get_by_role("main").get_by_role("listitem").get_by_role("link")
1613

@@ -26,10 +23,6 @@ def __init__(self, page: Page) -> None:
2623
self.your_team_link = links.get_by_text("Your Team")
2724
self.service_guidance_link = links.get_by_text("Service Guidance")
2825

29-
@step("Click on Manage vaccinations in schools")
30-
def click_mavis(self) -> None:
31-
self.mavis_link.click()
32-
3326
@step("Click on Programmes")
3427
def click_programmes(self) -> None:
3528
self.programmes_link.click()

mavis/test/pages/header.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from playwright.sync_api import Page
2+
3+
from mavis.test.annotations import step
4+
5+
6+
class HeaderComponent:
7+
def __init__(self, page: Page) -> None:
8+
self.page = page
9+
10+
self.mavis_link = page.get_by_role(
11+
"link",
12+
name="Manage vaccinations in schools",
13+
)
14+
15+
links = page.get_by_label("Menu", exact=True)
16+
17+
self.programmes_link = links.get_by_role("link", name="Programmes")
18+
self.sessions_link = links.get_by_role("link", name="Sessions")
19+
self.children_link = links.get_by_role("link", name="Children")
20+
self.vaccines_link = links.get_by_role("link", name="Vaccines")
21+
self.unmatched_consent_responses_link = links.get_by_role(
22+
"link",
23+
name="Unmatched Responses",
24+
)
25+
self.school_moves_link = links.get_by_role("link", name="School Moves")
26+
self.import_records_link = links.get_by_role("link", name="Imports")
27+
self.your_team_link = links.get_by_role("link", name="Your Team")
28+
29+
@step("Click on Manage vaccinations in schools")
30+
def click_mavis_header(self) -> None:
31+
self.mavis_link.click()
32+
33+
@step("Click on Programmes")
34+
def click_programmes_header(self) -> None:
35+
self.programmes_link.click()
36+
37+
@step("Click on Sessions")
38+
def click_sessions_header(self) -> None:
39+
self.sessions_link.click()
40+
41+
@step("Click on Children")
42+
def click_children_header(self) -> None:
43+
self.children_link.click()
44+
45+
@step("Click on Vaccines")
46+
def click_vaccines_header(self) -> None:
47+
self.vaccines_link.click()
48+
49+
@step("Click on Consent Responses")
50+
def click_consent_responses_header(self) -> None:
51+
self.unmatched_consent_responses_link.click()
52+
53+
@step("Click on School Moves")
54+
def click_school_moves_header(self) -> None:
55+
self.school_moves_link.click()
56+
57+
@step("Click on Imports")
58+
def click_imports_header(self) -> None:
59+
self.import_records_link.click()
60+
61+
@step("Click on Your Team")
62+
def click_your_team_header(self) -> None:
63+
self.your_team_link.click()

mavis/test/pages/import_records.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from mavis.test.annotations import step
88
from mavis.test.data import FileMapping, TestData, read_scenario_list_from_file
99
from mavis.test.models import Programme
10+
from mavis.test.pages.header import HeaderComponent
1011
from mavis.test.utils import (
1112
format_datetime_for_upload_link,
1213
get_current_datetime,
@@ -20,8 +21,9 @@ def __init__(
2021
page: Page,
2122
test_data: TestData,
2223
) -> None:
23-
self.test_data = test_data
2424
self.page = page
25+
self.test_data = test_data
26+
self.header = HeaderComponent(page)
2527

2628
self.alert_success = self.page.get_by_text("Import processing started")
2729
self.completed_tag = self.page.get_by_role("strong").get_by_text("Completed")
@@ -252,6 +254,8 @@ def __init__(
252254
page: Page,
253255
) -> None:
254256
self.page = page
257+
self.header = HeaderComponent(page)
258+
255259
self.upload_button = self.page.get_by_role(
256260
"button",
257261
name="Upload records",

mavis/test/pages/log_in.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from mavis.test.annotations import step
66
from mavis.test.models import Organisation, Team, User
7+
from mavis.test.pages.header import HeaderComponent
78
from mavis.test.utils import get_current_datetime
89

910

@@ -116,6 +117,8 @@ def log_in_and_choose_team_if_necessary(self, user: User, team: Team) -> None:
116117
class LogOutPage:
117118
def __init__(self, page: Page) -> None:
118119
self.page = page
120+
self.header = HeaderComponent(page)
121+
119122
self.log_out_button = page.locator("#main-content").get_by_role(
120123
"button", name="Log out"
121124
)

mavis/test/pages/nurse_consent.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
Parent,
99
Programme,
1010
)
11+
from mavis.test.pages.header import HeaderComponent
1112
from mavis.test.utils import expect_alert_text, generate_random_string
1213

1314

1415
class NurseConsentWizardPage:
1516
def __init__(self, page: Page) -> None:
1617
self.page = page
18+
self.header = HeaderComponent(page)
1719

1820
self.yes_radio = self.page.get_by_role("radio", name="Yes", exact=True)
1921
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:
283285
class GillickCompetencePage:
284286
def __init__(self, page: Page) -> None:
285287
self.page = page
288+
self.header = HeaderComponent(page)
289+
286290
self.assessment_notes_textbox = self.page.get_by_role(
287291
"textbox",
288292
name="Assessment notes (optional)",

mavis/test/pages/programmes.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66

77
from mavis.test.annotations import step
88
from mavis.test.models import Child, DeliverySite, Programme, ReportFormat
9+
from mavis.test.pages.header import HeaderComponent
910
from mavis.test.utils import get_current_datetime_compact
1011

1112

1213
class ProgrammesListPage:
1314
def __init__(self, page: Page) -> None:
1415
self.page = page
16+
self.header = HeaderComponent(page)
17+
1518
self.current_year_programmes_card = (
1619
page.get_by_role("heading")
1720
.filter(has_text="2025 to 2026")
@@ -26,6 +29,8 @@ def click_programme_for_current_year(self, programme: Programme) -> None:
2629
class ProgrammeTabs:
2730
def __init__(self, page: Page) -> None:
2831
self.page = page
32+
self.header = HeaderComponent(page)
33+
2934
self.children_tab = page.get_by_label("Secondary menu").get_by_role(
3035
"link", name="Children"
3136
)
@@ -48,6 +53,7 @@ class ProgrammeOverviewPage:
4853
def __init__(self, page: Page) -> None:
4954
self.page = page
5055
self.tabs = ProgrammeTabs(page)
56+
self.header = HeaderComponent(page)
5157

5258
self.review_link = page.get_by_role("link", name="Review")
5359
self.edit_vaccination_record_button = page.get_by_role(
@@ -173,12 +179,14 @@ class ProgrammeSessionsPage:
173179
def __init__(self, page: Page) -> None:
174180
self.page = page
175181
self.tabs = ProgrammeTabs(page)
182+
self.header = HeaderComponent(page)
176183

177184

178185
class ProgrammeChildrenPage:
179186
def __init__(self, page: Page) -> None:
180187
self.page = page
181188
self.tabs = ProgrammeTabs(page)
189+
self.header = HeaderComponent(page)
182190

183191
self.import_child_records_link = page.get_by_text("Import child records")
184192
self.search_textbox = page.get_by_role("textbox", name="Search")

mavis/test/pages/reports.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from mavis.test.annotations import step
1111
from mavis.test.models import Programme
12+
from mavis.test.pages.header import HeaderComponent
1213
from mavis.test.utils import (
1314
get_current_datetime_compact,
1415
)
@@ -39,6 +40,7 @@ class ReportsVaccinationsPage:
3940
def __init__(self, page: Page) -> None:
4041
self.page = page
4142
self.tabs = ReportsTabs(page)
43+
self.header = HeaderComponent(page)
4244

4345
self.cohort_heading = self.page.get_by_role(
4446
"heading", name="Cohort", exact=True
@@ -115,6 +117,7 @@ class ReportsDownloadPage:
115117
def __init__(self, page: Page) -> None:
116118
self.page = page
117119
self.tabs = ReportsTabs(page)
120+
self.header = HeaderComponent(page)
118121

119122
self.aggregate_data_radio = self.page.get_by_role(
120123
"radio", name="Aggregate vaccination data"

0 commit comments

Comments
 (0)