3030)
3131
3232
33- class SearchBarMixin :
33+ class SearchComponent :
3434 def __init__ (
3535 self ,
3636 page : Page ,
@@ -48,7 +48,7 @@ def __init__(
4848 name = "Archived records" ,
4949 )
5050
51- def _get_patient_card_locator (self , child : Child ) -> Locator :
51+ def get_patient_card_locator (self , child : Child ) -> Locator :
5252 return self .page .locator (
5353 f'div.nhsuk-card.app-card.app-card--compact:has(h4:has-text("{ child !s} "))'
5454 )
@@ -70,15 +70,15 @@ def verify_search(self) -> None:
7070
7171 def search_and_click_child (self , child : Child ) -> None :
7272 self .search_for (str (child ))
73- child_locator = self ._get_patient_card_locator (child ).get_by_role (
73+ child_locator = self .get_patient_card_locator (child ).get_by_role (
7474 "link" , name = str (child )
7575 )
7676 reload_until_element_is_visible (self .page , child_locator )
7777 child_locator .click ()
7878
7979 def search_for_child_that_should_not_exist (self , child : Child ) -> None :
8080 self .search_for (str (child ))
81- child_locator = self ._get_patient_card_locator (child ).get_by_role (
81+ child_locator = self .get_patient_card_locator (child ).get_by_role (
8282 "link" , name = str (child )
8383 )
8484 expect (child_locator ).not_to_be_visible ()
@@ -112,7 +112,7 @@ def check_note_appears_in_search(self, child: Child, note: str) -> None:
112112 expect (next_element .get_by_role ("blockquote" )).to_have_text (note )
113113
114114
115- class SessionsTabsMixin :
115+ class SessionsTabs :
116116 def __init__ (
117117 self ,
118118 page : Page ,
@@ -146,14 +146,12 @@ def click_record_vaccinations_tab(self) -> None:
146146 def click_children_tab (self ) -> None :
147147 self ._select_tab ("Children" )
148148
149- @step ("Click on Triage tab" )
150- def click_triage_tab (self ) -> None :
151- self ._select_tab ("Triage" )
152149
153-
154- class SessionsPsdPage (SearchBarMixin , SessionsTabsMixin ):
150+ class SessionsPsdPage :
155151 def __init__ (self , page : Page ) -> None :
156- super ().__init__ (page )
152+ self .page = page
153+ self .search = SearchComponent (page )
154+ self .tabs = SessionsTabs (page )
157155
158156 self .add_new_psds_link = self .page .get_by_role (
159157 "link" ,
@@ -166,16 +164,16 @@ def __init__(self, page: Page) -> None:
166164
167165 @step ("Check {1} has PSD" )
168166 def check_child_has_psd (self , child : Child ) -> None :
169- child_with_psd_locator = self ._get_patient_card_locator ( child ). get_by_text (
170- "PSD added"
171- )
167+ child_with_psd_locator = self .search . get_patient_card_locator (
168+ child
169+ ). get_by_text ( "PSD added" )
172170 reload_until_element_is_visible (self .page , child_with_psd_locator )
173171
174172 @step ("Check {1} does not have PSD" )
175173 def check_child_does_not_have_psd (self , child : Child ) -> None :
176- child_without_psd_locator = self ._get_patient_card_locator ( child ). get_by_text (
177- "PSD not added"
178- )
174+ child_without_psd_locator = self .search . get_patient_card_locator (
175+ child
176+ ). get_by_text ( "PSD not added" )
179177 reload_until_element_is_visible (self .page , child_without_psd_locator )
180178
181179 @step ("Click Add new PSDs" )
@@ -194,9 +192,10 @@ def verify_psd_banner_has_patients(self, number_of_patients: int) -> None:
194192 reload_until_element_is_visible (self .page , psd_banner )
195193
196194
197- class SessionsSearchPage ( SearchBarMixin ) :
195+ class SessionsSearchPage :
198196 def __init__ (self , page : Page ) -> None :
199- super ().__init__ (page )
197+ self .page = page
198+ self .search = SearchComponent (page )
200199
201200 @step ("Click on {2} session at {1}" )
202201 def click_session_for_programme_group (
@@ -209,8 +208,8 @@ def click_session_for_programme_group(
209208 else :
210209 self .page .get_by_role ("checkbox" , name = str (programme )).uncheck ()
211210
212- self .search_textbox .fill (str (location ))
213- self .search_button .click ()
211+ self .search . search_textbox .fill (str (location ))
212+ self .search . search_button .click ()
214213
215214 self .page .get_by_role ("link" , name = str (location )).first .click ()
216215
@@ -221,9 +220,11 @@ def click_session_for_programme_group(
221220 )
222221
223222
224- class SessionsOverviewPage ( SessionsTabsMixin ) :
223+ class SessionsOverviewPage :
225224 def __init__ (self , page : Page ) -> None :
226225 self .page = page
226+ self .tabs = SessionsTabs (page )
227+
227228 self .schedule_sessions_link = self .page .get_by_role (
228229 "link" ,
229230 name = "Schedule sessions" ,
@@ -265,7 +266,7 @@ def get_all_totals(self, programme: Programme) -> dict[str, int]:
265266 }
266267
267268 def check_all_totals (self , totals : dict [str , int ]) -> None :
268- self .click_overview_tab ()
269+ self .tabs . click_overview_tab ()
269270 for category , expected_total in totals .items ():
270271 actual_total = self .get_total_for_category (category )
271272 assert actual_total == expected_total , (
@@ -597,9 +598,12 @@ def answer_whether_psd_should_be_enabled(self, answer: str) -> None:
597598 ).get_by_label (answer ).check ()
598599
599600
600- class SessionsChildrenPage ( SearchBarMixin , SessionsTabsMixin ) :
601+ class SessionsChildrenPage :
601602 def __init__ (self , page : Page ) -> None :
602- super ().__init__ (page )
603+ self .page = page
604+ self .tabs = SessionsTabs (page )
605+ self .search = SearchComponent (page )
606+
603607 self .needs_consent_radio = self .page .get_by_role (
604608 "radio" ,
605609 name = "Needs consent" ,
@@ -657,7 +661,7 @@ def verify_child_shows_correct_flu_consent_method(
657661 reload_until_element_is_visible (self .page , method_locator )
658662
659663 def get_flu_consent_status_locator_from_search (self , child : Child ) -> Locator :
660- child_locator = self ._get_patient_card_locator (child )
664+ child_locator = self .search . get_patient_card_locator (child )
661665 flu_consent_section = child_locator .locator ("p:has-text('Flu')" )
662666 reload_until_element_is_visible (self .page , flu_consent_section )
663667
@@ -668,14 +672,17 @@ def expect_has_a_refusal_to_be_selected(self) -> None:
668672 expect (self .has_a_refusal_radio ).to_be_checked ()
669673
670674
671- class SessionsRegisterPage ( SearchBarMixin , SessionsTabsMixin ) :
675+ class SessionsRegisterPage :
672676 def __init__ (self , page : Page ) -> None :
673- super ().__init__ (page )
677+ self .page = page
678+ self .tabs = SessionsTabs (page )
679+ self .search = SearchComponent (page )
680+
674681 self .attending_button = self .page .get_by_role ("button" , name = "Attending" ).first
675682
676683 def register_child_as_attending (self , child : Child ) -> None :
677- self .click_register_tab ()
678- self .search_for (str (child ))
684+ self .tabs . click_register_tab ()
685+ self .search . search_for (str (child ))
679686 reload_until_element_is_visible (
680687 self .page , self .page .get_by_role ("link" , name = str (child )).first
681688 )
@@ -686,9 +693,11 @@ def click_on_attending(self) -> None:
686693 self .attending_button .click ()
687694
688695
689- class SessionsRecordVaccinationsPage ( SearchBarMixin , SessionsTabsMixin ) :
696+ class SessionsRecordVaccinationsPage :
690697 def __init__ (self , page : Page ) -> None :
691- super ().__init__ (page )
698+ self .page = page
699+ self .tabs = SessionsTabs (page )
700+ self .search = SearchComponent (page )
692701
693702
694703class SessionsPatientPage :
0 commit comments