2828# -------------------------------------------------------------------------------------------------
2929
3030
31- @pytest .fixture
32- def select_user (page : Page ):
33- def _login_as ( user_role : str ):
34- # Log in with the specified user
35- UserTools . user_login ( page , user_role )
36- # Navigate to call and recall page
37- BasePage ( page ). go_to_call_and_recall_page ( )
38- return page
39-
40- return _login_as
41-
42- @ pytest . mark . wip
31+ @pytest .fixture ( scope = "function" , autouse = True )
32+ def before_each (page : Page ):
33+ """
34+ Before every test is executed, this fixture logs in to BCSS as a test user and navigates to the call and recall page
35+ """
36+ # Log in to BCSS
37+ UserTools . user_login ( page , "Hub Manager at BCS01" )
38+
39+ # Go to call and recall page
40+ BasePage ( page ). go_to_call_and_recall_page ()
41+
42+
4343@pytest .mark .regression
4444@pytest .mark .letters_tests
45- def test_all_s83f_letter_parts_are_listed_in_letter_library (select_user ) -> None :
45+ def test_all_s83f_letter_parts_are_listed_in_letter_library (page : Page ) -> None :
4646 """
4747 Scenario: All three parts of the S83f letter exist
4848 Given I log in to BCSS "England" as user role "HubManager"
@@ -55,26 +55,21 @@ def test_all_s83f_letter_parts_are_listed_in_letter_library(select_user) -> None
5555 logging .info (
5656 "[TEST START] Verify all parts of the S83f letter exist in Letter Library"
5757 )
58- user_role = "Hub Manager at BCS01"
59-
60- # Step 1: Log in and land on Call and Recall page
61- page = select_user (user_role )
62- logging .info (f"[LOGIN] Logged in as { user_role } " )
6358
64- # Step 2: Navigate to Letter Library Index
59+ # Navigate to Letter Library Index
6560 base_page = BasePage (page )
6661 base_page .click_main_menu_link ()
6762 base_page .go_to_communications_production_page ()
6863 CommunicationsProductionPage (page ).go_to_letter_library_index_page ()
6964 logging .info ("[NAVIGATION] Navigated to Letter Library Index page" )
7065
71- # Step 3: Apply filter
66+ # Apply filter
7267 letter_index_page = LetterLibraryIndexPage (page )
7368 letter_index_page .filter_by_letters_group ("Invitation Letters" )
7469 letter_index_page .verify_letter_library_index_title ()
7570 logging .info ("[FILTER] Applied 'Invitation Letters' group filter" )
7671
77- # Step 4: Assert that all required letter codes are visible
72+ # Assert that all required letter codes are visible
7873 expected_codes = ["S83f" , "S83f-CSV" , "S83f-ATT" ]
7974 for code in expected_codes :
8075 matching_row = letter_index_page .table_utils .get_row_where ({"Code" : code })
@@ -84,10 +79,9 @@ def test_all_s83f_letter_parts_are_listed_in_letter_library(select_user) -> None
8479 logging .info (f"[ASSERTION PASSED] Letter code '{ code } ' listed in library" )
8580
8681
87- @pytest .mark .wip
8882@pytest .mark .regression
8983@pytest .mark .letters_tests
90- def test_s83f_letter_definition_has_correct_settings (select_user ) -> None :
84+ def test_s83f_letter_definition_has_correct_settings (page : Page ) -> None :
9185 """
9286 Scenario: A current S83f FIT self-referral invitation and test kit letter exists and has the correct settings
9387 Given I log in to BCSS "England" as user role "HubManager"
@@ -103,18 +97,15 @@ def test_s83f_letter_definition_has_correct_settings(select_user) -> None:
10397 And there "is" a current version of the selected letter definition
10498 """
10599 logging .info ("[TEST START] Verify S83f letter definition has correct settings" )
106- user_role = "Hub Manager at BCS01"
107100
108- # Step 1: Log in and navigate to Letter Library
109- page = select_user (user_role )
110- logging .info (f"[LOGIN] Logged in as { user_role } " )
101+ # Navigate to Letter Library
111102 base_page = BasePage (page )
112103 base_page .click_main_menu_link ()
113104 base_page .go_to_communications_production_page ()
114105 CommunicationsProductionPage (page ).go_to_letter_library_index_page ()
115106 logging .info ("[NAVIGATION] Navigated to Letter Library Index page" )
116107
117- # Step 2: Filter and open S83f letter definition
108+ # Filter and open S83f letter definition
118109 letter_index_page = LetterLibraryIndexPage (page )
119110 letter_index_page .filter_by_letters_group ("Invitation Letters" )
120111 letter_index_page .verify_letter_library_index_title ()
@@ -124,7 +115,7 @@ def test_s83f_letter_definition_has_correct_settings(select_user) -> None:
124115 letter_row .locator ("a" ).click ()
125116 logging .info ("[ACTION] Opened S83f letter definition" )
126117
127- # Step 3: Assert letter settings
118+ # Assert letter settings
128119 letter_detail_page = LetterDefinitionDetailPage (page )
129120 letter_detail_page .assert_definition_setting (
130121 "Description" , "Invitation & Test Kit (Self-referral) (FIT)"
@@ -137,17 +128,16 @@ def test_s83f_letter_definition_has_correct_settings(select_user) -> None:
137128 letter_detail_page .assert_definition_setting ("Event Status" , "S83" )
138129 logging .info ("[ASSERTION PASSED] All letter settings match expected values" )
139130
140- # Step 4: Confirm current version exists
131+ # Confirm current version exists
141132 assert (
142133 letter_detail_page .has_current_version ()
143134 ), "[ASSERTION FAILED] No current version for S83f"
144135 logging .info ("[ASSERTION PASSED] S83f has a current version" )
145136
146137
147- @pytest .mark .wip
148138@pytest .mark .regression
149139@pytest .mark .letters_tests
150- def test_s83f_att_letter_definition_has_correct_settings (select_user ) -> None :
140+ def test_s83f_att_letter_definition_has_correct_settings (page : Page ) -> None :
151141 """
152142 Scenario: A current S83f-ATT FIT self-referral pre-invitation letter exists and has the correct settings
153143 Given I log in to BCSS "England" as user role "HubManager"
@@ -164,18 +154,15 @@ def test_s83f_att_letter_definition_has_correct_settings(select_user) -> None:
164154 And there "is" a current version of the selected letter definition
165155 """
166156 logging .info ("[TEST START] Verify S83f-ATT letter definition has correct settings" )
167- user_role = "Hub Manager at BCS01"
168157
169- # Step 1: Log in and navigate to Letter Library Index
170- page = select_user (user_role )
171- logging .info (f"[LOGIN] Logged in as { user_role } " )
158+ # Navigate to Letter Library Index
172159 base_page = BasePage (page )
173160 base_page .click_main_menu_link ()
174161 base_page .go_to_communications_production_page ()
175162 CommunicationsProductionPage (page ).go_to_letter_library_index_page ()
176163 logging .info ("[NAVIGATION] Navigated to Letter Library Index page" )
177164
178- # Step 2: Filter and open S83f-ATT letter definition
165+ # Filter and open S83f-ATT letter definition
179166 letter_index_page = LetterLibraryIndexPage (page )
180167 letter_index_page .filter_by_letters_group ("Invitation Letters" )
181168 letter_index_page .verify_letter_library_index_title ()
@@ -185,10 +172,7 @@ def test_s83f_att_letter_definition_has_correct_settings(select_user) -> None:
185172 letter_row .locator ("a" ).click ()
186173 logging .info ("[ACTION] Opened S83f-ATT letter definition" )
187174
188- # Step 3: Pause to admire the view
189- page .wait_for_timeout (1000 )
190-
191- # Step 4: Assert all settings
175+ # Assert all settings
192176 letter_detail_page = LetterDefinitionDetailPage (page )
193177 letter_detail_page .assert_definition_setting (
194178 "Description" , "Pre-invitation (Self-referral) (FIT)"
@@ -201,17 +185,16 @@ def test_s83f_att_letter_definition_has_correct_settings(select_user) -> None:
201185 letter_detail_page .assert_definition_setting ("Event Status" , "S83" )
202186 logging .info ("[ASSERTION PASSED] All S83f-ATT letter settings match expectations" )
203187
204- # Step 5: Confirm current version exists
188+ # Confirm current version exists
205189 assert (
206190 letter_detail_page .has_current_version ()
207191 ), "[ASSERTION FAILED] No current version for S83f-ATT"
208192 logging .info ("[ASSERTION PASSED] S83f-ATT has a current version" )
209193
210194
211- @pytest .mark .wip
212195@pytest .mark .regression
213196@pytest .mark .letters_tests
214- def test_s83f_define_local_letter_reuses_existing_settings (select_user ) -> None :
197+ def test_s83f_define_local_letter_reuses_existing_settings (page : Page ) -> None :
215198 """
216199 Scenario: As a hub manager, I can safely access and submit the local letter definition flow for S83f
217200 Given I log in to BCSS "England" as user role "HubManager"
@@ -224,11 +207,7 @@ def test_s83f_define_local_letter_reuses_existing_settings(select_user) -> None:
224207 """
225208 logging .info ("[TEST START] Define local version of S83f without altering data" )
226209
227- user_role = "Hub Manager at BCS01"
228- page = select_user (user_role )
229- logging .info (f"[LOGIN] Logged in as { user_role } " )
230-
231- # Step 1: Navigate to Letter Library Index
210+ # Navigate to Letter Library Index
232211 base_page = BasePage (page )
233212 base_page .click_main_menu_link ()
234213 base_page .go_to_communications_production_page ()
@@ -243,7 +222,7 @@ def test_s83f_define_local_letter_reuses_existing_settings(select_user) -> None:
243222
244223 page .wait_for_timeout (1000 )
245224
246- # Step 2: Define Local Version using known-good settings
225+ # Define Local Version using known-good settings
247226 letter_index_page .click_define_supplementary_letter_button ()
248227 letter_index_page .define_supplementary_letter (
249228 description = "Invitation & Test Kit (Self-referral) (FIT)" ,
@@ -256,10 +235,9 @@ def test_s83f_define_local_letter_reuses_existing_settings(select_user) -> None:
256235 logging .info ("[ACTION] Local definition form submitted with existing settings" )
257236
258237
259- @pytest .mark .wip
260238@pytest .mark .regression
261239@pytest .mark .letters_tests
262- def test_s83f_att_define_local_letter_reuses_existing_settings (select_user ) -> None :
240+ def test_s83f_att_define_local_letter_reuses_existing_settings (page : Page ) -> None :
263241 """
264242 Scenario: As a hub manager, I can safely access and submit the local letter definition flow for S83f-ATT
265243 Given I log in to BCSS "England" as user role "HubManager"
@@ -272,11 +250,7 @@ def test_s83f_att_define_local_letter_reuses_existing_settings(select_user) -> N
272250 """
273251 logging .info ("[TEST START] Define local version of S83f-ATT without altering data" )
274252
275- user_role = "Hub Manager at BCS01"
276- page = select_user (user_role )
277- logging .info (f"[LOGIN] Logged in as { user_role } " )
278-
279- # Step 1: Navigate to Letter Library Index
253+ # Navigate to Letter Library Index
280254 base_page = BasePage (page )
281255 base_page .click_main_menu_link ()
282256 base_page .go_to_communications_production_page ()
@@ -291,7 +265,7 @@ def test_s83f_att_define_local_letter_reuses_existing_settings(select_user) -> N
291265
292266 page .wait_for_timeout (1000 )
293267
294- # Step 2: Define Local Version using known-good settings
268+ # Define Local Version using known-good settings
295269 letter_index_page .click_define_supplementary_letter_button ()
296270 letter_index_page .define_supplementary_letter (
297271 description = "Pre-invitation (Self-referral) (FIT)" ,
@@ -304,20 +278,9 @@ def test_s83f_att_define_local_letter_reuses_existing_settings(select_user) -> N
304278 logging .info ("[ACTION] Local definition form submitted with existing settings" )
305279
306280
307- # # Manual Scenario: I set up a local version for S83f-ATT pre-invitation letter
308- # # Given I log in to BCSS England as user role Hub Manager
309- # # When I view the letter library index
310- # # And I view the S83f-ATT pre-invitation letter definition
311- # # Then I define a local version
312-
313- # #-------------------------------------------------------------------------------------------------
314- # # A183 : 1st Positive Appointment Requested letter
315-
316-
317- @pytest .mark .wip
318281@pytest .mark .regression
319282@pytest .mark .letters_tests
320- def test_a183_letter_definition_has_correct_settings (select_user ) -> None :
283+ def test_a183_letter_definition_has_correct_settings (page : Page ) -> None :
321284 """
322285 Scenario: A current A183 letter exists and has the correct settings
323286 Given I log in to BCSS "England" as user role "HubManager"
@@ -334,18 +297,15 @@ def test_a183_letter_definition_has_correct_settings(select_user) -> None:
334297 And there "is" a current version of the selected letter definition
335298 """
336299 logging .info ("[TEST START] Verify A183 letter definition has correct settings" )
337- user_role = "Hub Manager at BCS01"
338300
339- # Step 1: Login and navigate
340- page = select_user (user_role )
341- logging .info (f"[LOGIN] Logged in as { user_role } " )
301+ # Navigate to Letter Library Index
342302 base_page = BasePage (page )
343303 base_page .click_main_menu_link ()
344304 base_page .go_to_communications_production_page ()
345305 CommunicationsProductionPage (page ).go_to_letter_library_index_page ()
346306 logging .info ("[NAVIGATION] Reached Letter Library Index" )
347307
348- # Step 2: Filter and open A183 letter
308+ # Filter and open A183 letter
349309 letter_index_page = LetterLibraryIndexPage (page )
350310 letter_index_page .filter_by_letters_group ("Practitioner Clinic Letters" )
351311 letter_index_page .verify_letter_library_index_title ()
@@ -355,7 +315,7 @@ def test_a183_letter_definition_has_correct_settings(select_user) -> None:
355315 letter_row .locator ("a" ).click ()
356316 logging .info ("[ACTION] Opened A183 letter definition" )
357317
358- # Step 3: Pause and assert settings
318+ # Pause and assert settings
359319 page .wait_for_timeout (1000 )
360320 letter_detail_page = LetterDefinitionDetailPage (page )
361321 letter_detail_page .assert_definition_setting (
@@ -371,7 +331,7 @@ def test_a183_letter_definition_has_correct_settings(select_user) -> None:
371331 letter_detail_page .assert_definition_setting ("Event Status" , "A183" )
372332 logging .info ("[ASSERTION PASSED] All A183 letter settings verified" )
373333
374- # Step 4: Confirm current version exists
334+ # Confirm current version exists
375335 assert (
376336 letter_detail_page .has_current_version ()
377337 ), "[ASSERTION FAILED] No current version for A183"
0 commit comments