Skip to content

Commit 72fe3c6

Browse files
authored
Merge pull request #521 from NHSDigital/refactor-import-records
Refactor import records
2 parents 64a3fc1 + 2a357e2 commit 72fe3c6

15 files changed

+116
-137
lines changed

mavis/test/data/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def get_file_paths(
277277

278278
return _input_file_path, _output_file_path
279279

280-
def read_scenario_list_from_file(self, input_file_path: str) -> Optional[str]:
280+
def read_scenario_list_from_file(self, input_file_path: Path) -> Optional[str]:
281281
try:
282282
_df = pd.read_csv(input_file_path)
283283
return (

mavis/test/pages/import_records.py

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ def __init__(
3030
self.import_records_button = self.page.get_by_role(
3131
"button", name="Import records"
3232
)
33-
self.import_class_lists_link = self.page.get_by_role(
34-
"link", name="Import class lists"
35-
)
3633
self.child_records_radio_button = self.page.get_by_role(
3734
"radio", name="Child records"
3835
)
@@ -50,10 +47,6 @@ def __init__(
5047
def click_import_records(self):
5148
self.import_records_button.click()
5249

53-
@step("Click on Import class lists")
54-
def click_import_class_lists(self):
55-
self.import_class_lists_link.click()
56-
5750
@step("Select Child Records")
5851
def select_child_records(self):
5952
self.child_records_radio_button.click()
@@ -67,7 +60,8 @@ def select_vaccination_records(self):
6760
self.vaccination_records_radio_button.click()
6861

6962
@step("Click Continue")
70-
def click_continue(self, coverage=""):
63+
def click_continue(self, coverage: Optional[str] = None):
64+
# coverage is only used for reporting
7165
self.continue_button.click()
7266

7367
@step("Set input file to {1}")
@@ -94,16 +88,8 @@ def navigate_to_child_record_import(self):
9488
self.select_child_records()
9589
self.click_continue()
9690
self.click_add_to_current_year()
97-
self.click_continue()
98-
99-
def navigate_to_class_list_record_import(
100-
self,
101-
location: str,
102-
year_groups: Optional[list[int]] = None,
103-
):
104-
if year_groups is None:
105-
year_groups = [9, 10]
10691

92+
def navigate_to_class_list_record_import(self, location: str, *year_groups: int):
10793
self.click_import_records()
10894
self.select_class_list_records()
10995
self.click_continue()
@@ -112,15 +98,15 @@ def navigate_to_class_list_record_import(
11298

11399
self.fill_location(location)
114100
self.page.get_by_role("option", name=str(location)).first.click()
115-
116101
self.click_continue()
102+
117103
self.click_add_to_current_year()
118-
self.click_continue()
119-
self._select_year_groups(*year_groups)
104+
self.select_year_groups(*year_groups)
120105

121106
@step("Click on 2024 to 2025")
122107
def click_add_to_current_year(self):
123108
self.current_year_radio.check()
109+
self.click_continue()
124110

125111
def navigate_to_vaccination_records_import(self):
126112
self.click_import_records()
@@ -184,10 +170,22 @@ def verify_upload_output(self, file_path: Path):
184170
else:
185171
expect(self.page.get_by_role("main")).to_contain_text(_msg)
186172

187-
def _select_year_groups(self, *year_groups: int) -> None:
173+
def select_year_groups(self, *year_groups: int) -> None:
188174
for year_group in year_groups:
189175
if year_group == 0:
190176
self.page.get_by_label("Reception").check()
191177
else:
192178
self.page.get_by_label(text=f"Year {year_group}", exact=True).check()
193179
self.click_continue()
180+
181+
def import_class_list_for_current_year(
182+
self,
183+
class_list_file: FileMapping,
184+
year_group: Optional[int] = None,
185+
programme_group: str = Programme.HPV.group,
186+
):
187+
self.click_add_to_current_year()
188+
if year_group:
189+
self.select_year_groups(year_group)
190+
191+
self.upload_and_verify_output(class_list_file, programme_group=programme_group)

mavis/test/pages/programmes.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def __init__(self, page: Page, test_data: TestData):
1818
.filter(has_text="2024 to 2025")
1919
.locator("xpath=following-sibling::table[1]")
2020
)
21-
self.current_year_radio = page.get_by_role("radio", name="2024 to 2025")
2221

2322
programme_page_links = (
2423
page.get_by_role("main").get_by_role("listitem").get_by_role("link")
@@ -98,12 +97,6 @@ def navigate_to_cohort_import(self, programme: Programme):
9897
self.click_programme_current_year(programme)
9998
self.click_children()
10099
self.click_import_child_records()
101-
self.click_add_to_current_year()
102-
self.click_continue()
103-
104-
@step("Click on 2024 to 2025")
105-
def click_add_to_current_year(self):
106-
self.current_year_radio.check()
107100

108101
@step("Click on Save changes")
109102
def click_save_changes(self):

mavis/test/pages/sessions.py

Lines changed: 20 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ def __init__(
4949
self.conflicting_consent_checkbox = self.page.get_by_role(
5050
"checkbox", name="Conflicting consent"
5151
)
52-
self.current_year_radio = page.get_by_role("radio", name="2024 to 2025")
5352

5453
self.programme_tab_link = self.page.get_by_role("link", name="Programme")
5554
self.import_class_lists_link = self.page.get_by_role(
@@ -119,7 +118,6 @@ def __init__(
119118
self.update_results_button = self.page.get_by_role(
120119
"button", name="Update results"
121120
)
122-
self.year_10_checkbox = self.page.get_by_role("checkbox", name="Year 10")
123121
self.confirm_button = self.page.get_by_role("button", name="Confirm")
124122
self.search_textbox = self.page.get_by_role("textbox", name="Search")
125123
self.search_button = self.page.get_by_role("button", name="Search")
@@ -183,6 +181,10 @@ def __init__(
183181
vaccinations_card = page.get_by_role("table", name="Vaccinations")
184182
self.vaccinations_card_row = vaccinations_card.get_by_role("row")
185183
self.sessions_link = page.get_by_role("link", name="Sessions", exact=True).first
184+
self.advanced_filters_link = page.get_by_text("Advanced filters")
185+
self.missing_nhs_no_checkbox = self.page.get_by_role(
186+
"checkbox", name="Children missing an NHS number"
187+
)
186188

187189
def __get_display_formatted_date(self, date_to_format: str) -> str:
188190
_parsed_date = datetime.strptime(date_to_format, "%Y%m%d")
@@ -248,6 +250,7 @@ def click_session_for_programme_group(self, location: str, programme_group: str)
248250

249251
self.search_textbox.fill(str(location))
250252
self.search_button.click()
253+
251254
self.page.get_by_role("link", name=str(location)).click()
252255

253256
expect(self.page.locator("h1", has_text=str(location))).to_be_visible(
@@ -395,17 +398,25 @@ def click_confirm_button(self):
395398

396399
@step("Check box for year {1}")
397400
def check_year_checkbox(self, year: str):
398-
self.page.get_by_role("checkbox", name=f"Year {year}").check()
401+
if year == "0":
402+
self.page.get_by_role("checkbox", name="Reception").check()
403+
else:
404+
self.page.get_by_role("checkbox", name=f"Year {year}").check()
399405

400406
@step("Uncheck box for year {1}")
401407
def uncheck_year_checkbox(self, year: str):
402-
self.page.get_by_role("checkbox", name=f"Year {year}").uncheck()
408+
if year == "0":
409+
self.page.get_by_role("checkbox", name="Reception").uncheck()
410+
else:
411+
self.page.get_by_role("checkbox", name=f"Year {year}").uncheck()
403412

404-
@step("Check box for year {1}")
405-
def check_box_for_year_other_than(self, year: str):
406-
self.page.get_by_role("checkbox", name="Year ").filter(
407-
has_not_text=year
408-
).first.check()
413+
@step("Click Advanced filters")
414+
def click_advanced_filters(self):
415+
self.advanced_filters_link.click()
416+
417+
@step("Check Children missing an NHS number")
418+
def check_missing_nhs_no_checkbox(self):
419+
self.missing_nhs_no_checkbox.check()
409420

410421
@step("Click on Record vaccinations")
411422
def click_record_vaccinations_tab(self):
@@ -632,14 +643,6 @@ def verify_scheduled_date(self, message: str):
632643
self.expect_main_to_contain_text(message)
633644
self.click_continue_link()
634645

635-
@step("Click on 2024 to 2025")
636-
def click_add_to_current_year(self):
637-
self.current_year_radio.check()
638-
self.click_continue_button()
639-
640-
def select_current_year(self):
641-
self.page.get_by_role("radio", name="2024 to 2025").check()
642-
643646
def schedule_a_valid_session(
644647
self, location: str, programme_group: str, for_today: bool = False
645648
):
@@ -689,32 +692,6 @@ def get_online_consent_url(self, *programmes: list[Programme]) -> str:
689692
link_text = f"View the {' and '.join(str(programme) for programme in programmes)} online consent form"
690693
return str(self.page.get_by_role("link", name=link_text).get_attribute("href"))
691694

692-
def verify_attendance_filters(self):
693-
self.click_register_tab()
694-
695-
search_summary = self.page.get_by_text("Showing 1 to")
696-
697-
expect(search_summary).not_to_have_text("Showing 1 to 1 of 1 children")
698-
self.year_10_checkbox.check()
699-
self.click_on_update_results()
700-
701-
expect(search_summary).to_have_text("Showing 1 to 1 of 1 children")
702-
703-
self.year_10_checkbox.uncheck()
704-
self.click_on_update_results()
705-
706-
expect(search_summary).not_to_have_text("Showing 1 to 1 of 1 children")
707-
708-
def select_year_groups(self, *year_groups: int) -> None:
709-
for year_group in year_groups:
710-
if year_group == 0:
711-
self.page.get_by_role("checkbox", name="Reception").check()
712-
else:
713-
self.page.get_by_role(
714-
"checkbox", name=f"Year {year_group}", exact=True
715-
).check()
716-
self.click_continue_button()
717-
718695
def register_child_as_attending(self, child: Child):
719696
self.click_register_tab()
720697
self.search_for(str(child))

tests/test_children.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ def _setup(class_list_file):
2929
dashboard_page.click_sessions()
3030
sessions_page.click_session_for_programme_group(school, Programme.HPV)
3131
sessions_page.click_import_class_lists()
32-
sessions_page.click_add_to_current_year()
33-
sessions_page.select_year_groups(year_group)
34-
import_records_page.upload_and_verify_output(class_list_file)
32+
import_records_page.import_class_list_for_current_year(
33+
class_list_file, year_group
34+
)
3535
dashboard_page.click_mavis()
3636
dashboard_page.click_children()
3737
yield
@@ -70,18 +70,18 @@ def setup_mav_853(
7070
dashboard_page.click_sessions()
7171
sessions_page.schedule_a_valid_session(school, Programme.HPV, for_today=True)
7272
sessions_page.click_import_class_lists()
73-
sessions_page.click_add_to_current_year()
74-
sessions_page.select_year_groups(year_group)
75-
import_records_page.upload_and_verify_output(ClassFileMapping.RANDOM_CHILD)
73+
import_records_page.import_class_list_for_current_year(
74+
ClassFileMapping.RANDOM_CHILD, year_group
75+
)
7676
dashboard_page.click_mavis()
7777
dashboard_page.click_sessions()
7878
sessions_page.click_session_for_programme_group(school, Programme.HPV)
7979
session_id = sessions_page.get_session_id_from_offline_excel()
8080
dashboard_page.click_mavis()
8181
dashboard_page.click_programmes()
8282
programmes_page.navigate_to_cohort_import(Programme.HPV)
83-
import_records_page.upload_and_verify_output(
84-
CohortsFileMapping.FIXED_CHILD,
83+
import_records_page.import_class_list_for_current_year(
84+
CohortsFileMapping.FIXED_CHILD
8585
)
8686
dashboard_page.click_mavis()
8787
dashboard_page.click_import_records()

tests/test_consent_responses.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ def test_match(
7373
dashboard_page.click_mavis()
7474
dashboard_page.click_programmes()
7575
programmes_page.navigate_to_cohort_import(Programme.HPV)
76-
import_records_page.upload_and_verify_output(CohortsFileMapping.FIXED_CHILD)
76+
import_records_page.import_class_list_for_current_year(
77+
CohortsFileMapping.FIXED_CHILD
78+
)
7779

7880
dashboard_page.click_mavis()
7981
dashboard_page.click_unmatched_consent_responses()

tests/test_e2e.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from mavis.test.data import CohortsFileMapping
3+
from mavis.test.data import ClassFileMapping
44
from mavis.test.models import Programme, ConsentOption
55

66
pytestmark = pytest.mark.e2e
@@ -29,10 +29,8 @@ def _setup(programme_group):
2929
dashboard_page.click_sessions()
3030
sessions_page.click_session_for_programme_group(school, programme_group)
3131
sessions_page.click_import_class_lists()
32-
sessions_page.click_add_to_current_year()
33-
sessions_page.select_year_groups(child.year_group)
34-
import_records_page.upload_and_verify_output(
35-
CohortsFileMapping.FIXED_CHILD, programme_group=programme_group
32+
import_records_page.import_class_list_for_current_year(
33+
ClassFileMapping.FIXED_CHILD, child.year_group, programme_group
3634
)
3735
return batch_names
3836

tests/test_imms.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ def setup_recording_hpv(
2828
dashboard_page.click_sessions()
2929
sessions_page.schedule_a_valid_session(school, Programme.HPV, for_today=True)
3030
sessions_page.click_import_class_lists()
31-
sessions_page.click_add_to_current_year()
32-
sessions_page.select_year_groups(year_group)
33-
import_records_page.upload_and_verify_output(ClassFileMapping.FIXED_CHILD)
31+
import_records_page.import_class_list_for_current_year(
32+
ClassFileMapping.FIXED_CHILD, year_group
33+
)
3434
dashboard_page.click_mavis()
3535
dashboard_page.click_sessions()
3636
sessions_page.click_session_for_programme_group(school, Programme.HPV)

tests/test_import_records.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ def setup_vaccs(
4848
dashboard_page.click_sessions()
4949
sessions_page.schedule_a_valid_session(school, Programme.HPV, for_today=True)
5050
sessions_page.click_import_class_lists()
51-
sessions_page.click_add_to_current_year()
52-
sessions_page.select_year_groups(year_group)
53-
import_records_page.upload_and_verify_output(ClassFileMapping.RANDOM_CHILD)
51+
import_records_page.import_class_list_for_current_year(
52+
ClassFileMapping.RANDOM_CHILD, year_group
53+
)
5454
dashboard_page.click_mavis()
5555
dashboard_page.click_sessions()
5656
sessions_page.click_session_for_programme_group(school, Programme.HPV)
@@ -136,7 +136,7 @@ def test_class_list_file_upload_positive(
136136
school = schools["doubles"][0]
137137
year_group = year_groups["doubles"]
138138

139-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
139+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
140140
import_records_page.upload_and_verify_output(
141141
ClassFileMapping.POSITIVE, programme_group="doubles"
142142
)
@@ -149,7 +149,7 @@ def test_class_list_file_upload_negative(
149149
school = schools["doubles"][0]
150150
year_group = year_groups["doubles"]
151151

152-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
152+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
153153
import_records_page.upload_and_verify_output(
154154
ClassFileMapping.NEGATIVE, programme_group="doubles"
155155
)
@@ -162,7 +162,7 @@ def test_class_list_file_structure(
162162
school = schools["doubles"][0]
163163
year_group = year_groups["doubles"]
164164

165-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
165+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
166166
import_records_page.upload_and_verify_output(
167167
ClassFileMapping.INVALID_STRUCTURE, programme_group="doubles"
168168
)
@@ -175,7 +175,7 @@ def test_class_list_no_record(
175175
school = schools["doubles"][0]
176176
year_group = year_groups["doubles"]
177177

178-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
178+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
179179
import_records_page.upload_and_verify_output(
180180
ClassFileMapping.HEADER_ONLY, programme_group="doubles"
181181
)
@@ -188,7 +188,7 @@ def test_class_list_empty_file(
188188
school = schools["doubles"][0]
189189
year_group = year_groups["doubles"]
190190

191-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
191+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
192192
import_records_page.upload_and_verify_output(
193193
ClassFileMapping.EMPTY_FILE, programme_group="doubles"
194194
)
@@ -201,7 +201,7 @@ def test_class_list_year_group(
201201
school = schools["doubles"][0]
202202
year_group = year_groups["doubles"]
203203

204-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
204+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
205205
import_records_page.upload_and_verify_output(
206206
ClassFileMapping.WRONG_YEAR_GROUP, programme_group="doubles"
207207
)
@@ -220,7 +220,7 @@ def test_class_list_space_normalization(
220220
school = schools["doubles"][0]
221221
year_group = year_groups["doubles"]
222222

223-
import_records_page.navigate_to_class_list_record_import(str(school), [year_group])
223+
import_records_page.navigate_to_class_list_record_import(str(school), year_group)
224224
input_file, _ = import_records_page.upload_and_verify_output(
225225
ClassFileMapping.WHITESPACE, programme_group="doubles"
226226
)

0 commit comments

Comments
 (0)