Skip to content

Commit 8ffa5ee

Browse files
committed
wip
1 parent 6acb6b3 commit 8ffa5ee

File tree

3 files changed

+110
-38
lines changed

3 files changed

+110
-38
lines changed

pages/subject/subject_lynch_page.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ def self_refer_subject(self) -> None:
2323
logging.warning("[TODO] self_refer_subject not yet implemented.")
2424
# TODO: Implement UI steps to self-refer the subject
2525

26-
def confirm_prompt(self) -> None:
27-
"""Implement UI steps to confirm the prompt (e.g., confirmation dialog)."""
28-
logging.warning("[TODO] confirm_prompt not yet implemented.")
29-
# TODO: Implement UI steps to confirm the prompt
30-
3126
def set_seeking_further_data(self) -> None:
3227
"""Set the subject to Seeking Further Data."""
3328

@@ -36,18 +31,32 @@ def set_seeking_further_data(self) -> None:
3631
)
3732

3833
# Select 'Seeking Further Data' from the screening status dropdown
39-
self.page.get_by_label("Change Screening Status").select_option("4007") # Seeking Further Data
34+
self.page.get_by_label("Change Screening Status").select_option(
35+
"4007"
36+
) # Seeking Further Data
4037

4138
# Select 'Uncertified Death' as the reason
42-
self.page.get_by_label("Reason", exact=True).select_option("11314") # Uncertified Death
39+
self.page.get_by_label("Reason", exact=True).select_option(
40+
"11314"
41+
) # Uncertified Death
4342

4443
# Click the update button
45-
self.page.get_by_role("button", name="Update Subject Data").click()
44+
self.safe_accept_dialog(
45+
self.page.get_by_role("button", name="Update Subject Data")
46+
)
47+
48+
def set_self_referral_screening_status(self) -> None:
49+
"""Set the screening status to 'Lynch Self-referral' with reason 'Reset seeking further data to Lynch Self-referral'."""
50+
logging.info("[UI ACTION] Setting screening status to 'Lynch Self-referral'")
4651

47-
def set_screening_status(self, status) -> None:
48-
"""Set the screening status."""
49-
logging.warning("[TODO] set_screening_status not yet implemented.")
50-
# TODO: Implement UI steps to set the screening status
52+
# Select 'Lynch Self-referral' (value: 4005)
53+
self.page.get_by_label("Change Screening Status").select_option("4005")
54+
55+
# Select reason: 'Reset seeking further data to Lynch Self-referral' (value: 11529)
56+
self.page.get_by_label("Reason").select_option("11529")
57+
58+
# Click the update button
59+
self.page.get_by_role("button", name="Update Subject Data").click()
5160

5261
def receive_lynch_diagnosis(
5362
self, diagnosis_type, age, diagnosis_date, last_colonoscopy_date=None

tests/test_lynch_self_referral_seeking_further_data_flow.py

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
from pages.logout.log_out_page import LogoutPage
77
from utils.oracle.oracle import OracleDB, OracleSubjectTools
88
from utils.oracle.subject_selection_query_builder import SubjectSelectionQueryBuilder
9+
from utils.oracle.subject_selector import SubjectSelector
910
from utils.user_tools import UserTools
1011
from pages.subject.subject_lynch_page import SubjectPage
1112
from utils.subject_assertion import subject_assertion
13+
from utils import screening_subject_page_searcher
1214

1315

1416
@pytest.mark.wip
@@ -27,46 +29,44 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
2729
Set to Seeking Further Data
2830
Revert to Lynch Self-referral
2931
"""
32+
subject_page = SubjectPage(page)
33+
3034
logging.info("[TEST START] test_lynch_self_referral_seeking_further_data_flow")
3135

3236
# Given I log in to BCSS "England" as user role "Hub Manager"
3337
login_role = "Hub Manager at BCS01"
34-
35-
# Log in using the string
3638
UserTools.user_login(page, login_role)
3739

38-
# Retrieve user details using the same string
40+
criteria = {
41+
"subject age": "75",
42+
"subject has lynch diagnosis": "Yes",
43+
"screening status": "Lynch Self-referral",
44+
"subject hub code": "BCS01",
45+
}
46+
47+
# Retrieve user details and user object
3948
user_details = UserTools.retrieve_user(login_role)
4049
user = UserTools.get_user_object(user_details)
4150

42-
# And I have created a new subject ready for self-referral using OracleSubjectTools
43-
nhs_no = OracleSubjectTools().create_self_referral_ready_subject(
44-
screening_centre=user_details["hub_code"], base_age=75
51+
# # TODO: When I receive Lynch diagnosis "EPCAM" for a new subject in my hub aged "75" with diagnosis date "3 years ago" and last colonoscopy date "2 years ago"
52+
# Get or create a subject suitable for Lynch self-referral
53+
nhs_no = SubjectSelector.get_or_create_subject_for_lynch_self_referral(
54+
screening_centre=user_details["hub_code"],
55+
base_age=75,
4556
)
4657

4758
logging.info(
4859
"[SUBJECT CREATED IN DB] created subject in the database with no screening history who is eligible to self refer"
4960
)
5061

51-
# TODO: When I receive Lynch diagnosis "EPCAM" for a new subject in my hub aged "75" with diagnosis date "3 years ago" and last colonoscopy date "2 years ago"
52-
prepare_subject_with_lynch_diagnosis(
53-
page,
54-
user,
55-
nhs_no,
56-
SubjectPage.TestData.subject_age,
57-
SubjectPage.TestData.diagnosis_date,
58-
SubjectPage.TestData.last_colonoscopy_date,
59-
)
60-
6162
# Then Comment: NHS number
6263
logging.info(f"[SUBJECT CREATION] Created subject's NHS number: {nhs_no}")
6364

64-
# When I self refer the subject
65-
subject_page = SubjectPage(page)
65+
# TODO: When I self refer the subject
66+
# And I press OK on my confirmation prompt
6667
subject_page.self_refer_subject()
67-
subject_page.confirm_prompt()
68+
logging.info("[UI ACTION] Self-referred the subject")
6869

69-
# TODO: And I press OK on my confirmation prompt
7070
# Then my subject has been updated as follows:
7171
criteria = {
7272
"calculated fobt due date": "Null",
@@ -91,6 +91,12 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
9191
}
9292

9393
subject_assertion(nhs_no, criteria)
94+
logging.info(
95+
"[ASSERTION PASSED] Subject details after self-referral are as expected"
96+
)
97+
98+
# When I view the subject
99+
screening_subject_page_searcher.navigate_to_subject_summary_page(page, nhs_no)
94100

95101
# When I set the subject to Seeking Further Data
96102
subject_page.set_seeking_further_data()
@@ -121,9 +127,7 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
121127
subject_assertion(nhs_no, criteria)
122128

123129
# When I set the subject from Seeking Further Data back to "Lynch Self-referral"
124-
subject_page.set_screening_status(
125-
SubjectPage.TestData.screening_status_lynch_self_referral
126-
)
130+
subject_page.set_self_referral_screening_status()
127131

128132
# Then my subject has been updated as follows:
129133
criteria = {
@@ -149,6 +153,7 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
149153
}
150154

151155
subject_assertion(nhs_no, criteria)
156+
152157
LogoutPage(page).log_out()
153158
logging.info("[TEST END] test_lynch_self_referral_seeking_further_data_flow")
154159

@@ -174,9 +179,6 @@ def prepare_subject_with_lynch_diagnosis(
174179

175180
criteria = {"nhs number": nhs_no}
176181

177-
# if last_colonoscopy_date:
178-
# criteria["lynch last colonoscopy date"] = last_colonoscopy_date
179-
180182
query, bind_vars = SubjectSelectionQueryBuilder().build_subject_selection_query(
181183
criteria=criteria,
182184
user=user,

utils/oracle/subject_selector.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pandas as pd
12
from oracle.oracle import OracleDB
23
import logging
34
from utils.oracle.subject_selection_query_builder import SubjectSelectionQueryBuilder
@@ -96,3 +97,63 @@ def get_subject_for_pre_invitation(criteria: dict) -> str:
9697
nhs_number = result_df["subject_nhs_number"].iloc[0]
9798
logging.info(f"[SUBJECT SELECTOR] Found subject NHS number: {nhs_number}")
9899
return nhs_number
100+
101+
@staticmethod
102+
def get_or_create_subject_for_lynch_self_referral(
103+
screening_centre: str = "BCS01", base_age: int = 75
104+
) -> str:
105+
"""
106+
Retrieves a subject NHS number suitable for Lynch self-referral scenarios.
107+
If no subject is found, creates one and returns its NHS number.
108+
109+
Args:
110+
screening_centre (str): Screening centre code for subject association.
111+
base_age (int): Minimum age to filter subject candidates.
112+
113+
Returns:
114+
str: The NHS number of the selected or created subject.
115+
"""
116+
from utils.oracle.oracle import OracleSubjectTools # avoid circular import
117+
118+
criteria = {
119+
"subject age": str(base_age),
120+
"subject has lynch diagnosis": "Yes",
121+
"screening status": "Lynch Self-referral",
122+
"subject hub code": screening_centre,
123+
}
124+
125+
logging.info(
126+
"[SUBJECT SELECTOR] Attempting to find or create Lynch self-referral subject"
127+
)
128+
user_details = UserTools.retrieve_user(f"Hub Manager at {screening_centre}")
129+
user = UserTools.get_user_object(user_details)
130+
subject = Subject()
131+
query_builder = SubjectSelectionQueryBuilder()
132+
133+
query, bind_vars = query_builder.build_subject_selection_query(
134+
criteria=criteria,
135+
user=user,
136+
subject=subject,
137+
)
138+
result_df = OracleDB().execute_query(query, bind_vars)
139+
140+
if not result_df.empty:
141+
nhs_number = result_df["subject_nhs_number"].iloc[0]
142+
logging.info(
143+
f"[SUBJECT SELECTOR] Found existing subject NHS number: {nhs_number}"
144+
)
145+
return nhs_number
146+
147+
logging.warning("[SUBJECT SELECTOR] No existing subject found — creating one")
148+
nhs_number = OracleSubjectTools().create_self_referral_ready_subject(
149+
screening_centre=screening_centre,
150+
base_age=base_age,
151+
)
152+
logging.info(
153+
f"[SUBJECT CREATED - LYNCH SELF-REFERRAL] NHS number: {nhs_number}"
154+
)
155+
156+
nhs_df = pd.DataFrame({"subject_nhs_number": [nhs_number]})
157+
OracleDB().exec_bcss_timed_events(nhs_df)
158+
159+
return nhs_number

0 commit comments

Comments
 (0)