11import pytest
22import logging
33from playwright .sync_api import Page
4- from classes .subject .subject import Subject
54from classes .user .user import User
5+ from classes .subject .subject import Subject
66from pages .logout .log_out_page import LogoutPage
7- from utils .oracle .oracle import OracleDB
8- from utils .oracle .subject_selection_query_builder import SubjectSelectionQueryBuilder
97from utils .oracle .subject_selector import SubjectSelector
8+ from utils .oracle .oracle import OracleDB
109from utils .user_tools import UserTools
1110from pages .subject .subject_lynch_page import SubjectPage
1211from utils .subject_assertion import subject_assertion
1312from utils import screening_subject_page_searcher
13+ from utils .oracle .subject_selection_query_builder import SubjectSelectionQueryBuilder
1414
1515
1616@pytest .mark .wip
@@ -40,13 +40,16 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
4040 # Retrieve user details and user object
4141 user_details = UserTools .retrieve_user (login_role )
4242
43- # # 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"
43+ # 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"
44+ # TODO: What is involved in receiving an "EPCAM" diagnosis? Is it covered by this code?
4445 # Get or create a subject suitable for Lynch self-referral
4546 nhs_no = SubjectSelector .get_or_create_subject_for_lynch_self_referral (
4647 screening_centre = user_details ["hub_code" ],
4748 base_age = 75 ,
4849 )
4950
51+ OracleDB ().exec_bcss_timed_events (nhs_number = nhs_no )
52+
5053 logging .info (
5154 "[SUBJECT CREATED IN DB] created subject in the database with no screening history who is eligible to self refer"
5255 )
@@ -57,8 +60,9 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
5760 # When I view the subject
5861 screening_subject_page_searcher .navigate_to_subject_summary_page (page , nhs_no )
5962 logging .info (f"[UI ACTION] Navigated to subject summary page for { nhs_no } " )
60-
63+
6164 # When I self refer the subject
65+ # TODO: This step may not be needed as the created subject is already has a status of "Self-referral"
6266 subject_page .self_refer_subject ()
6367 logging .info ("[UI ACTION] Self-referred the subject" )
6468
@@ -119,6 +123,17 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
119123 "surveillance due date reason" : "Null" ,
120124 }
121125
126+ # The below lines down to logging.info are just for debug purposes to show the actual DB row
127+ # Remove them once the test is stable
128+ query , bind_vars = SubjectSelectionQueryBuilder ().build_subject_selection_query (
129+ criteria = {"nhs number" : nhs_no },
130+ user = User (),
131+ subject = Subject (),
132+ subjects_to_retrieve = 1 ,
133+ )
134+ df = OracleDB ().execute_query (query , bind_vars )
135+ logging .info (f"[DEBUG] Subject DB row:\n { df .to_dict (orient = 'records' )} " )
136+
122137 subject_assertion (nhs_no , seeking_further_data_criteria )
123138
124139 # When I set the subject from Seeking Further Data back to "Lynch Self-referral"
@@ -151,48 +166,3 @@ def test_lynch_self_referral_seeking_further_data_flow(page: Page) -> None:
151166
152167 LogoutPage (page ).log_out ()
153168 logging .info ("[TEST END] test_lynch_self_referral_seeking_further_data_flow" )
154-
155-
156- # Helper Functions - TODO: move to a utils file later
157- def prepare_subject_with_lynch_diagnosis (
158- page : Page ,
159- user : User ,
160- nhs_no : str ,
161- age : int ,
162- diagnosis_date : str ,
163- last_colonoscopy_date : str | None = None ,
164- ) -> str :
165- """
166- Helper function to receive a Lynch diagnosis for a new subject.
167- Args:
168- page (Page): Playwright Page object for browser interaction.
169- user (User): User object representing the logged-in user.
170- age (int): Age of the subject.
171- diagnosis_date (str): Date of the Lynch diagnosis.
172- last_colonoscopy_date (str | None): Date of the last colonoscopy, if applicable.
173- """
174-
175- criteria = {"nhs number" : nhs_no }
176-
177- query , bind_vars = SubjectSelectionQueryBuilder ().build_subject_selection_query (
178- criteria = criteria ,
179- user = user ,
180- subject = Subject (),
181- subjects_to_retrieve = 1 ,
182- )
183-
184- nhs_no_df = OracleDB ().execute_query (query , bind_vars )
185- if nhs_no_df .empty :
186- raise ValueError ("[SUBJECT SELECTION] No subject found matching criteria." )
187-
188- nhs_no = nhs_no_df ["subject_nhs_number" ].iloc [0 ]
189- logging .info (f"[SUBJECT SELECTED] NHS number: { nhs_no } " )
190-
191- subject_page = SubjectPage (page )
192- subject_page .receive_lynch_diagnosis (
193- diagnosis_type = SubjectPage .TestData .lynch_diagnosis_type ,
194- age = age ,
195- diagnosis_date = diagnosis_date ,
196- last_colonoscopy_date = last_colonoscopy_date ,
197- )
198- return nhs_no
0 commit comments