Skip to content

Commit 7ad7c3e

Browse files
committed
Addressing sonarqube issues
1 parent 97cff97 commit 7ad7c3e

File tree

1 file changed

+57
-158
lines changed

1 file changed

+57
-158
lines changed

tests/regression/subject_diagnosis_date/test_subject_episodes_diagnosis_date.py

Lines changed: 57 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -39,42 +39,52 @@ def compose_diagnosis_text_with_reason(
3939
return item_text
4040

4141

42+
def prepare_subject_for_test(
43+
page: Page, criteria: dict, role: str, select_episode_radio: bool = True
44+
) -> str:
45+
"""
46+
Queries subject by criteria, logs in with role, navigates to search, and opens profile.
47+
48+
Returns:
49+
str: The subject's NHS number
50+
"""
51+
user = User()
52+
subject = Subject()
53+
builder = SubjectSelectionQueryBuilder()
54+
query, bind_vars = builder.build_subject_selection_query(
55+
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
56+
)
57+
df = OracleDB().execute_query(query, bind_vars)
58+
if df.empty:
59+
raise ValueError("No matching subject found with provided episode criteria.")
60+
61+
nhs_number = df.iloc[0]["subject_nhs_number"]
62+
UserTools.user_login(page, role)
63+
BasePage(page).go_to_screening_subject_search_page()
64+
if select_episode_radio:
65+
page.get_by_role("radio", name="Episodes").check()
66+
search_subject_episode_by_nhs_number(page, nhs_number)
67+
return nhs_number
68+
69+
4270
# Scenario 1
4371
@pytest.mark.regression
4472
@pytest.mark.vpn_required
4573
@pytest.mark.fobt_diagnosis_date_entry
4674
def test_screening_centre_manager_records_diagnosis_date_for_subject_with_referral_no_diag(
4775
page: Page,
4876
):
49-
# Step 1: Obtain NHS number for a subject matching criteria
77+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
5078
criteria = {
5179
"latest episode type": "FOBT",
5280
"latest episode status": "Open",
5381
"latest episode has referral date": "Past",
5482
"latest episode has diagnosis date": "No",
5583
"latest episode diagnosis date reason": "NULL",
5684
}
57-
user = User()
58-
subject = Subject()
59-
builder = SubjectSelectionQueryBuilder()
60-
query, bind_vars = builder.build_subject_selection_query(
61-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
62-
)
63-
df = OracleDB().execute_query(query, bind_vars)
64-
if df.empty:
65-
raise ValueError("No matching subject found with provided episode criteria.")
85+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
6686

67-
# Step 2: Login and search for subject
68-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
69-
BasePage(page).go_to_screening_subject_search_page()
70-
71-
# Step 3: Select episode radio button
72-
page.get_by_role("radio", name="Episodes").check()
73-
74-
# Step 4: Search subject and go to profile
75-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
76-
77-
# Step 5: Interact with subject page
87+
# Step 2: Interact with subject page
7888
subject_page_s1 = RecordDiagnosisDatePage(page)
7989
page.get_by_role("button", name="Advance FOBT Screening Episode").click()
8090
page.get_by_role("button", name="Record Diagnosis Date").click()
@@ -83,7 +93,7 @@ def test_screening_centre_manager_records_diagnosis_date_for_subject_with_referr
8393
page.get_by_role("link", name="List Episodes").click()
8494
page.get_by_role("link", name="events").click()
8595

86-
# Step 6: Assertions
96+
# Step 3: Assertions
8797
subject_event_s1 = SubjectEpisodeEventsAndNotesPage(page)
8898
event_details = subject_event_s1.get_latest_event_details()
8999
assert "A50" not in event_details["latest_event_status"]
@@ -103,35 +113,17 @@ def test_screening_centre_manager_records_diagnosis_date_for_subject_with_referr
103113
@pytest.mark.vpn_required
104114
@pytest.mark.fobt_diagnosis_date_entry
105115
def test_cannot_record_diagnosis_date_without_referral(page: Page):
106-
# Step 1: Obtain NHS number for a subject matching criteria
116+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
107117
criteria = {
108118
"latest episode type": "FOBT",
109119
"latest episode status": "Open",
110120
"latest episode has referral date": "No",
111121
"latest episode has diagnosis date": "No",
112122
"latest episode diagnosis date reason": "NULL",
113123
}
114-
user = User()
115-
subject = Subject()
116-
builder = SubjectSelectionQueryBuilder()
117-
query, bind_vars = builder.build_subject_selection_query(
118-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
119-
)
120-
df = OracleDB().execute_query(query, bind_vars)
121-
if df.empty:
122-
raise ValueError("No matching subject found with provided episode criteria.")
123-
124-
# Step 2: Login and search for subject
125-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
126-
BasePage(page).go_to_screening_subject_search_page()
124+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
127125

128-
# Step 3: Select episode radio button
129-
page.get_by_role("radio", name="Episodes").check()
130-
131-
# Step 4: Search subject and go to profile
132-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
133-
134-
# Step 5: Interact with subject page
126+
# Step 2: Interact with subject page
135127
advance_fobt_button_s2 = page.get_by_role(
136128
"button", name="Advance FOBT Screening Episode"
137129
)
@@ -140,7 +132,7 @@ def test_cannot_record_diagnosis_date_without_referral(page: Page):
140132
else:
141133
print("Advance FOBT Screening Episode Button is disabled, skipping click.")
142134

143-
# Step 6: Assert that the "Record Diagnosis Date" option is not available
135+
# Step 3: Assert that the "Record Diagnosis Date" option is not available
144136
subject_event_s2 = SubjectEpisodeEventsAndNotesPage(page)
145137
assert (
146138
not subject_event_s2.is_record_diagnosis_date_option_available()
@@ -152,35 +144,17 @@ def test_cannot_record_diagnosis_date_without_referral(page: Page):
152144
@pytest.mark.vpn_required
153145
@pytest.mark.fobt_diagnosis_date_entry
154146
def test_cannot_record_diagnosis_date_with_existing_diagnosis(page: Page):
155-
# Step 1: Obtain NHS number for a subject matching criteria
147+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
156148
criteria = {
157149
"latest episode type": "FOBT",
158150
"latest episode status": "Open",
159151
"latest episode has referral date": "Past",
160152
"latest episode has diagnosis date": "Yes",
161153
"latest episode diagnosis date reason": "NULL",
162154
}
163-
user = User()
164-
subject = Subject()
165-
builder = SubjectSelectionQueryBuilder()
166-
query, bind_vars = builder.build_subject_selection_query(
167-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
168-
)
169-
df = OracleDB().execute_query(query, bind_vars)
170-
if df.empty:
171-
raise ValueError("No matching subject found with provided episode criteria.")
155+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
172156

173-
# Step 2: Login and search for subject
174-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
175-
BasePage(page).go_to_screening_subject_search_page()
176-
177-
# Step 3: Select episode radio button
178-
page.get_by_role("radio", name="Episodes").check()
179-
180-
# Step 4: Search subject and go to profile
181-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
182-
183-
# Step 5: Interact with subject page
157+
# Step 2: Interact with subject page
184158
advance_fobt_button_s3 = page.get_by_role(
185159
"button", name="Advance FOBT Screening Episode"
186160
)
@@ -199,7 +173,7 @@ def test_cannot_record_diagnosis_date_with_existing_diagnosis(page: Page):
199173
else:
200174
print("Record Diagnosis Date button is not available, skipping click.")
201175

202-
# Step 6: Assert that the "Record Diagnosis Date" option is not available
176+
# Step 3: Assert that the "Record Diagnosis Date" option is not available
203177
subject_event_s3 = SubjectEpisodeEventsAndNotesPage(page)
204178
assert (
205179
not subject_event_s3.is_record_diagnosis_date_option_available()
@@ -278,41 +252,26 @@ def test_hub_user_can_record_diagnosis_date_with_referral_no_diag(page: Page):
278252
@pytest.mark.vpn_required
279253
@pytest.mark.fobt_diagnosis_date_entry
280254
def test_record_diagnosis_date_no_date_or_reason_alert(page: Page):
281-
# Step 1: Obtain NHS number for a subject matching criteria
255+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
282256
criteria = {
283257
"latest episode type": "FOBT",
284258
"latest episode status": "Open",
285259
"latest episode has referral date": "Past",
286260
"latest episode has diagnosis date": "No",
287261
"latest episode diagnosis date reason": "NULL",
288262
}
289-
user = User()
290-
subject = Subject()
291-
builder = SubjectSelectionQueryBuilder()
292-
query, bind_vars = builder.build_subject_selection_query(
293-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
294-
)
295-
df = OracleDB().execute_query(query, bind_vars)
296-
if df.empty:
297-
raise ValueError("No matching subject found with provided episode criteria.")
298-
299-
# Step 2: Login and search for subject
300-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
301-
BasePage(page).go_to_screening_subject_search_page()
302-
303-
# Step 3: Search subject and go to profile
304-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
263+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
305264

306-
# Step 4: Interact with subject page
265+
# Step 2: Interact with subject page
307266
subject_page_s5 = RecordDiagnosisDatePage(page)
308267
page.get_by_role("button", name="Advance FOBT Screening Episode").click()
309268
page.get_by_role("button", name="Record Diagnosis Date").click()
310269
subject_page_s5.click_save_button()
311270

312-
# Step 5: Do not enter a diagnosis date or reason
271+
# Step 3: Do not enter a diagnosis date or reason
313272
time.sleep(2) # Pause for 2 seconds to let the process complete
314273

315-
# Step 6: Assertions
274+
# Step 4: Assertions
316275
alert_message = subject_page_s5.get_alert_message()
317276
assert (
318277
"must not be earlier than the referral date" in alert_message
@@ -324,32 +283,17 @@ def test_record_diagnosis_date_no_date_or_reason_alert(page: Page):
324283
@pytest.mark.vpn_required
325284
@pytest.mark.fobt_diagnosis_date_entry
326285
def test_record_diagnosis_date_reason_only(page: Page):
327-
# Step 1: Obtain NHS number for a subject matching criteria
286+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
328287
criteria = {
329288
"latest episode type": "FOBT",
330289
"latest episode status": "Open",
331290
"latest episode has referral date": "Past",
332291
"latest episode has diagnosis date": "No",
333292
"latest episode diagnosis date reason": "NULL",
334293
}
335-
user = User()
336-
subject = Subject()
337-
builder = SubjectSelectionQueryBuilder()
338-
query, bind_vars = builder.build_subject_selection_query(
339-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
340-
)
341-
df = OracleDB().execute_query(query, bind_vars)
342-
if df.empty:
343-
raise ValueError("No matching subject found with provided episode criteria.")
294+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
344295

345-
# Step 2: Login and search for subject
346-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
347-
BasePage(page).go_to_screening_subject_search_page()
348-
349-
# Step 3: Search subject and go to profile
350-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
351-
352-
# Step 4: Interact with subject page
296+
# Step 2: Interact with subject page
353297
subject_page_s6 = RecordDiagnosisDatePage(page)
354298
page.get_by_role("button", name="Advance FOBT Screening Episode").click()
355299
page.get_by_role("button", name="Record Diagnosis Date").click()
@@ -372,24 +316,9 @@ def test_amend_diagnosis_date_without_reason_alert(page: Page):
372316
"latest episode has diagnosis date": "No",
373317
"latest episode diagnosis date reason": "NULL",
374318
}
375-
user = User()
376-
subject = Subject()
377-
builder = SubjectSelectionQueryBuilder()
378-
query, bind_vars = builder.build_subject_selection_query(
379-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
380-
)
381-
df = OracleDB().execute_query(query, bind_vars)
382-
if df.empty:
383-
raise ValueError("No matching subject found with provided episode criteria.")
384-
385-
# Step 2: Login and search for subject
386-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
387-
BasePage(page).go_to_screening_subject_search_page()
388-
389-
# Step 3: Search subject and go to profile
390-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
319+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
391320

392-
# Step 4: Interact with subject page
321+
# Step 2: Interact with subject page
393322
subject_page_s8 = RecordDiagnosisDatePage(page)
394323
page.get_by_role("button", name="Advance FOBT Screening Episode").click()
395324
page.get_by_role("button", name="Record Diagnosis Date").click()
@@ -401,7 +330,7 @@ def test_amend_diagnosis_date_without_reason_alert(page: Page):
401330
page.get_by_role("link", name="List Episodes").click()
402331
page.get_by_role("link", name="events").click()
403332

404-
# Step 5: Assert that the "Record Diagnosis Date" option is available
333+
# Step 3: Assert that the "Record Diagnosis Date" option is available
405334
subject_event_s8 = SubjectEpisodeEventsAndNotesPage(page)
406335
event_details = subject_event_s8.get_latest_event_details()
407336
assert "A50" not in event_details["latest_event_status"]
@@ -545,32 +474,20 @@ def get_diagnosis_reason():
545474
@pytest.mark.vpn_required
546475
@pytest.mark.fobt_diagnosis_date_entry
547476
def test_amend_diagnosis_date_no_change_alert(page: Page):
548-
# Step 1: Obtain NHS number for a subject matching criteria
477+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
549478
criteria = {
550479
"latest episode type": "FOBT",
551480
"latest episode status": "Open",
552481
"latest episode has referral date": "Past",
553482
"latest episode has diagnosis date": "Yes",
554483
"latest episode diagnosis date reason": "NULL",
555484
}
556-
user = User()
557-
subject = Subject()
558-
builder = SubjectSelectionQueryBuilder()
559-
query, bind_vars = builder.build_subject_selection_query(
560-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
561-
)
562-
df = OracleDB().execute_query(query, bind_vars)
563-
if df.empty:
564-
raise ValueError("No matching subject found with provided episode criteria.")
485+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
565486

566-
# Step 2: Login and search for subject
567-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
568-
BasePage(page).go_to_screening_subject_search_page()
569-
570-
# Step 3: Search subject and go to profile
487+
# Step 2: Search subject and go to profile
571488
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
572489

573-
# Step 4: Interact with subject page
490+
# Step 3: Interact with subject page
574491
subject_page_s11 = RecordDiagnosisDatePage(page)
575492
page.get_by_role("button", name="Advance FOBT Screening Episode").click()
576493
page.get_by_role("checkbox").check()
@@ -739,7 +656,7 @@ def test_hub_user_cannot_amend_diagnosis_date(page: Page):
739656
@pytest.mark.vpn_required
740657
@pytest.mark.fobt_diagnosis_date_entry
741658
def test_record_and_amend_diagnosis_date_multiple_times(page: Page):
742-
# Step 1: Obtain NHS number for a subject matching criteria
659+
# Step 1: # Query subject by criteria, log in, navigate to search page, select "Episodes" radio button, and open subject profile
743660
criteria = {
744661
"latest episode type": "FOBT",
745662
"latest episode status": "Open",
@@ -749,25 +666,7 @@ def test_record_and_amend_diagnosis_date_multiple_times(page: Page):
749666
}
750667
amend_reason = "Incorrect information previously entered"
751668
remove_reason = "Patient choice"
752-
user = User()
753-
subject = Subject()
754-
builder = SubjectSelectionQueryBuilder()
755-
query, bind_vars = builder.build_subject_selection_query(
756-
criteria=criteria, user=user, subject=subject, subjects_to_retrieve=1
757-
)
758-
df = OracleDB().execute_query(query, bind_vars)
759-
if df.empty:
760-
raise ValueError("No matching subject found with provided episode criteria.")
761-
762-
# Step 2: Login and search for subject
763-
UserTools.user_login(page, "Screening Centre Manager at BCS001")
764-
BasePage(page).go_to_screening_subject_search_page()
765-
766-
# Step 3: Select episode radio button
767-
page.get_by_role("radio", name="Episodes").check()
768-
769-
# Step 4: Search subject and go to profile
770-
search_subject_episode_by_nhs_number(page, df.iloc[0]["subject_nhs_number"])
669+
prepare_subject_for_test(page, criteria, role="Screening Centre Manager at BCS001")
771670
subject_page_s15 = RecordDiagnosisDatePage(page)
772671

773672
# --- First: Record Diagnosis Date (today) ---

0 commit comments

Comments
 (0)