|
1 | 1 | import re
|
2 |
| -import time |
3 | 2 | from datetime import datetime
|
4 | 3 | from typing import List
|
5 | 4 |
|
6 | 5 | from playwright.sync_api import Page, expect
|
7 | 6 |
|
8 | 7 | from ..data import TestData
|
9 |
| -from ..models import PrescreeningQuestion, Programme |
| 8 | +from ..models import Programme |
10 | 9 | from ..step import step
|
11 | 10 | from ..wrappers import generate_random_string, get_current_datetime, get_offset_date
|
12 | 11 |
|
@@ -121,13 +120,17 @@ def __init__(
|
121 | 120 | self.notes_length_error = (
|
122 | 121 | page.locator("div").filter(has_text="There is a problemEnter").nth(3)
|
123 | 122 | )
|
124 |
| - self.prescreening_notes = self.page.get_by_role( |
125 |
| - "textbox", name="Pre-screening notes (optional)" |
126 |
| - ) |
127 | 123 | self.vaccination_notes = self.page.get_by_role(
|
128 | 124 | "textbox", name="Notes (optional)"
|
129 | 125 | )
|
130 | 126 |
|
| 127 | + pre_screening = self.page.locator("section").filter( |
| 128 | + has=page.get_by_role("heading", name="Pre-screening checks") |
| 129 | + ) |
| 130 | + self.pre_screening_listitem = pre_screening.get_by_role("listitem") |
| 131 | + self.pre_screening_checkbox = pre_screening.get_by_role("checkbox") |
| 132 | + self.pre_screening_notes = pre_screening.get_by_role("textbox") |
| 133 | + |
131 | 134 | def __get_display_formatted_date(self, date_to_format: str) -> str:
|
132 | 135 | _parsed_date = datetime.strptime(date_to_format, "%Y%m%d")
|
133 | 136 | _formatted_date = _parsed_date.strftime("%A %d %B %Y").replace(" 0", " ")
|
@@ -328,6 +331,14 @@ def click_confirm_button(self):
|
328 | 331 | def click_record_vaccinations(self):
|
329 | 332 | self.record_vaccinations_link.click()
|
330 | 333 |
|
| 334 | + @step("Confirm pre-screening checks are true") |
| 335 | + def confirm_pre_screening_checks(self, programme: Programme): |
| 336 | + for check in programme.pre_screening_checks: |
| 337 | + locator = self.pre_screening_listitem.get_by_text(check) |
| 338 | + # TODO: Can we highlight in the report that we're checking this? |
| 339 | + expect(locator).to_be_visible() |
| 340 | + self.pre_screening_checkbox.check() |
| 341 | + |
331 | 342 | @step("Click on Yes")
|
332 | 343 | def select_yes(self):
|
333 | 344 | self.yes_radio.click()
|
@@ -570,18 +581,6 @@ def select_year_groups(self, *year_groups: int) -> None:
|
570 | 581 | self.page.get_by_role("checkbox", name=f"Year {year_group}").check()
|
571 | 582 | self.click_continue_button()
|
572 | 583 |
|
573 |
| - def _answer_prescreening_questions(self, programme: Programme): |
574 |
| - for question in programme.prescreening_questions: |
575 |
| - locator = self.page.get_by_role("checkbox", name=question) |
576 |
| - |
577 |
| - if question == PrescreeningQuestion.FEELING_WELL and programme in [ |
578 |
| - Programme.MENACWY, |
579 |
| - Programme.TD_IPV, |
580 |
| - ]: |
581 |
| - expect(locator).to_be_checked() |
582 |
| - else: |
583 |
| - locator.check() |
584 |
| - |
585 | 584 | def register_child_as_attending(self, child_name: str):
|
586 | 585 | self.click_register_tab()
|
587 | 586 | self.search_for(child_name)
|
@@ -614,20 +613,16 @@ def record_vaccs_for_child(
|
614 | 613 | self.search_child(child_name=child_name)
|
615 | 614 | self.click_programme_tab(programme)
|
616 | 615 |
|
617 |
| - # FIXME: Figure out why we need this. Without this pause, the form |
618 |
| - # elements seem to clear out when the continue button is pressed |
619 |
| - # and the form fails to submit. |
620 |
| - time.sleep(0.25) |
| 616 | + self.confirm_pre_screening_checks(programme) |
| 617 | + self.pre_screening_notes.fill(notes) |
621 | 618 |
|
622 |
| - self._answer_prescreening_questions(programme=programme) |
623 |
| - self.prescreening_notes.fill(notes) |
624 | 619 | self.select_yes()
|
625 | 620 | self.select_left_arm_upper_position()
|
626 | 621 | self.click_continue_button()
|
627 | 622 |
|
628 | 623 | if len(notes) > 1000:
|
629 | 624 | expect(self.notes_length_error).to_be_visible()
|
630 |
| - self.prescreening_notes.fill("Prescreening notes") |
| 625 | + self.pre_screening_notes.fill("Prescreening notes") |
631 | 626 | self.click_continue_button()
|
632 | 627 |
|
633 | 628 | self.page.get_by_role("radio", name=programme.vaccines[0]).check()
|
|
0 commit comments