# -*- coding: utf-8 -*- ## # Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. # copyright # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, # IN PART OR IN WHOLE, # WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # file tst_Treatment_BloodDialysateFlowRate # date 2020/02/15 # author Joseph varghese # import names from dialin.ui import utils from dialin.common.hd_defs import BloodLeakZeroingStates from dialin.ui.hd_simulator import HDSimulator from configuration import config BLOOD_DIALYSATE_FLOW_TESTING_OPTION = { "OPTION_1" : [0, 0, 0, 0, 0, 0, 0, 0,0, 'None'], "OPTION_2" : [100, 1, 1, 1, 1, 1, 1, 1, 1, 'blood'], "OPTION_3" : [125, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 125, 125, 'blood'], "OPTION_4" : [550, 24, 32, 425, 85, 18, 36, 45,550,'blood'], "OPTION_5" : [80, 12, 12, 12, 12, 12, 12, 12, 80,'blood'], "OPTION_6" : [100, 0, 0, 0, 0, 0, 0, 0,100, 'dialysate'], "OPTION_7" : [180, 1, 1, 1, 1, 1, 1, 1,180, 'dialysate'], "OPTION_8" : [220, 1.45, 1.45, 1.45, 1.45, 1.45, 1.45, 145,220, 'blood'], "OPTION_9" : [250, 1.45, 1.45, 1.45, 1.45, 1.45, 1.45, 145,250, 'dialysate'], } DUMMY_INTIGER = 12 #This value is used for arguments which is not part of verification hd_simulator = HDSimulator() def set_rejection_message(text): if isinstance(text, pyStr): names.o_treatment_notification_bar["text"] = text return names.o_treatment_notification_bar else: test.log("Invalid \"text\": " +text+" for object.") names.o_treatment_notification_bar["text"] = None def verify_blood_dialysate_adjustment(expected_blood_flow_value = "_", expected_dialysate_flow_rate = "_"): """ Tests to verify blood dialysate rate on flow adjustment screen @param expected_blood_flow_value: (str) expected blood flow rate @param expected_dialysate_flow_rate: (str) expected dialysate flow rate """ test.compare(str(waitForObjectExists(names.o_treatment_blood_flow_adjustment).label), str(expected_blood_flow_value)) test.compare(str(waitForObjectExists(names.o_treatment_dialysate_flow_adjustment).label), str(expected_dialysate_flow_rate)) def drag_and_drop_blood_flow_slider(slider_value): """ Tests to verify blood flow slider range @param slider_value: (int) value of the slider to set. """ slider_buffer = slider_value - config.BLOOD_FLOW_MINIMUM_VALUE slider_width = (slider_buffer/config.BLOOD_FLOW_BUFFER) * config.FLOW_SLIDER_WIDTH_BUFFER if slider_value < config.BLOOD_FLOW_MINIMUM_VALUE: slider_value = config.BLOOD_FLOW_MINIMUM_VALUE slider_width = 0 #minimum slider width if slider_value > config.BLOOD_FLOW_MAXIMUM_VALUE: slider_value = config.BLOOD_FLOW_MAXIMUM_VALUE slider_width = 597 #maximum slider width mouseClick(waitForObject(names.o_blood_flow_slider), slider_width , 4, Qt.LeftButton) test.compare(int(waitForObject(names.o_blood_flow_slider).value) , slider_value, "user adjusted blood flow slider value to -> "+ str(slider_value)) def drag_and_drop_dialysate_slider(slider_value): """ Tests to verify dialysate slider range @param slider_value: (int) value of the slider to set. """ slider_buffer = slider_value - config.DIALYSATE_FLOW_MINIMUM_VALUE slider_width = (slider_buffer/config.DIALYSATE_FLOW_BUFFER) * config.DIALYSATE_FLOW_SLIDER_WIDTH_BUFFER if slider_value < config.DIALYSATE_FLOW_MINIMUM_VALUE: slider_value = config.DIALYSATE_FLOW_MINIMUM_VALUE slider_width = 0 #minimum slider width if slider_value > config.DIALYSATE_FLOW_MAXIMUM_VALUE: slider_value = config.DIALYSATE_FLOW_MAXIMUM_VALUE slider_width = 597 #maximum slider width mouseClick(waitForObject(names.o_dialysate_flow_slider), slider_width , 4, Qt.LeftButton) test.compare(int(waitForObject(names.o_dialysate_flow_slider).value) , slider_value, "user adjusted dialysate slider value to -> "+ str(slider_value)) def test_treatment_blood_dialysate_rejection(): """ Tests to verify blood dialysate rejection messages @param : N/A """ test.startSection("verification of blood dialysate rejection message") mouseClick(waitForObject(names.o_treatment_blood_flow_touch_area)) for rejection in range(1, config.NUM_OF_REQUEST_REJECT_REASONS + 1): hd_simulator.cmd_send_treatment_adjust_blood_dialysate_response(accepted = False, reason= rejection, blood_rate = 350, dialysate_flow_rate = 120) verify_blood_dialysate_adjustment(expected_blood_flow_value = 350, expected_dialysate_flow_rate = 120) rejection_message = findObject(names.o_treatment_notification_bar) test.compare(rejection_message.text, config.REJECTION_REASON[rejection], "expected rejection {msg} displayed".format(msg=config.REJECTION_REASON[rejection])) utils.waitForGUI(0.5) test.endSection() def test_treatment_adjustment_blood_dialysate(): """ Tests to verify blood dialysate adjustment, blood flow range and dialysate flow range. @param : N/A """ test.startSection("verification of blood dialysate adjustment") drag_and_drop_blood_flow_slider(slider_value = 125) drag_and_drop_dialysate_slider(slider_value = 250) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 375) drag_and_drop_dialysate_slider(slider_value = 500) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 150) drag_and_drop_dialysate_slider(slider_value = 150) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 225) drag_and_drop_dialysate_slider(slider_value = 200) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 250) drag_and_drop_dialysate_slider(slider_value = 300) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 175) drag_and_drop_dialysate_slider(slider_value = 400) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 500) drag_and_drop_dialysate_slider(slider_value = 350) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 200) drag_and_drop_dialysate_slider(slider_value = 600) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 275) drag_and_drop_dialysate_slider(slider_value = 550) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 475) drag_and_drop_dialysate_slider(slider_value = 450) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 300) drag_and_drop_dialysate_slider(slider_value = 200) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 425) drag_and_drop_dialysate_slider(slider_value = 350) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 350) drag_and_drop_dialysate_slider(slider_value = 250) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 475) drag_and_drop_dialysate_slider(slider_value = 450) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 450) drag_and_drop_dialysate_slider(slider_value = 400) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 700) drag_and_drop_dialysate_slider(slider_value = 550) mouseClick(names.o_confirmButton_TouchRect_2) drag_and_drop_blood_flow_slider(slider_value = 80) drag_and_drop_dialysate_slider(slider_value = 500) mouseClick(names.o_confirmButton_TouchRect_2) test.compare((waitForObject(names.o_blood_flow_slider).minimum), config.BLOOD_FLOW_MINIMUM_VALUE , "minimum blood flow value verified") test.compare((waitForObject(names.o_blood_flow_slider).maximum), config.BLOOD_FLOW_MAXIMUM_VALUE , "maximum blood flow value verified") test.compare((waitForObject(names.o_blood_flow_slider).unit), config.FLOW_UNIT, "blood flow value unit should be mL/min.") test.compare((waitForObject(names.o_dialysate_flow_slider).minimum), config.DIALYSATE_FLOW_MINIMUM_VALUE, "minimum dialysate flow value verified") test.compare((waitForObject(names.o_dialysate_flow_slider).maximum), config.DIALYSATE_FLOW_MAXIMUM_VALUE, "maximum dialysate flow value verified") test.compare((waitForObject(names.o_dialysate_flow_slider).unit), config.FLOW_UNIT, "dialysate flow value unit should be mL/min.") test.endSection() def test_blood_flow_rate_and_dialysate(blood_dialysate_control_list): """ Tests to verify blood flow data message setter/sender method @param blood_dialysate_control_list: (list) value of blood dialysate control. @param flow_set_pt: (int) blood_dialysate_control_list[0] @param measured_flow: (float) blood_dialysate_control_list[1] @param rot_speed: (float) blood_dialysate_control_list[3] @param mot_speed: (float) blood_dialysate_control_list[4] @param mc_speed: (float) blood_dialysate_control_list[5] @param mc_current: (float) blood_dialysate_control_list[6] @param pwm: (float) blood_dialysate_control_list[7] @param signal_strength: (float) blood_dialysate_control_list[8] @param flow_type: (str) blood_dialysate_control_list[9] """ test.startSection("verification of blood flow range and dialysate range on main treatment screen") flow_set_pt = blood_dialysate_control_list[0] measured_flow = blood_dialysate_control_list[1] rot_speed = blood_dialysate_control_list[2] mot_speed = blood_dialysate_control_list[3] mc_speed = blood_dialysate_control_list[4] mc_current = blood_dialysate_control_list[5] pwm = blood_dialysate_control_list[6] rot_count = blood_dialysate_control_list[7] flow_type = blood_dialysate_control_list[8] prescribed_flow = blood_dialysate_control_list[9] # Integration team needs to determine if the new parameters for flow rate commands are needed for verification. if flow_type == config.BLOOD_FLOW_TEXT: hd_simulator.cmd_set_treatment_blood_flow_rate(flow_set_pt, measured_flow, rot_speed, mot_speed, mc_speed, mc_current, pwm, rot_count, prescribed_flow) utils.waitForGUI(0.5) test.compare(str(waitForObjectExists(names.o_treatment_blood_flow_rate).label), str(flow_set_pt)) elif flow_type == config.DIALYSATE_FLOW_TEXT: hd_simulator.cmd_set_treatment_dialysate_flow_rate(flow_set_pt, measured_flow, rot_speed, mot_speed, mc_speed, mc_current, pwm, 0,0,0) utils.waitForGUI(0.5) test.compare(str(waitForObjectExists(names.o_treatment_dialysate_flow_rate).label), str(flow_set_pt)) else : test.compare(str(waitForObjectExists(names.o_treatment_blood_flow_rate).label), '_') test.compare(str(waitForObjectExists(names.o_treatment_dialysate_flow_rate).label), '_') test.endSection() def main(): utils.tstStart(__file__) startApplication(config.AUT_NAME) utils.waitForGUI(1) #navigate to In-treatment section hd_simulator.cmd_set_treatment_states_data(sub_mode= 2, uf_state= 0, saline_state=1, heparin_state= 0, rinseback_state= 0, recirculate_state= 0, blood_prime_state= 2, treatment_end_state=0, treatment_stop_state= 0, dialysis_state=0, bloodLeakZeoringState = BloodLeakZeroingStates.BLD_ZEROING_IDLE_STATE.value) utils.waitForGUI(1) #delay for fetching effect test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_1"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_2"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_3"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_4"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_5"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_6"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_7"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_8"]) test_blood_flow_rate_and_dialysate(BLOOD_DIALYSATE_FLOW_TESTING_OPTION["OPTION_9"]) #enable range of dialysate slider hd_simulator.cmd_set_treatment_parameter_ranges(min_treatment_duration = DUMMY_INTIGER, max_treatment_duration = DUMMY_INTIGER, min_uf_volume = DUMMY_INTIGER, max_uf_volume = DUMMY_INTIGER, min_dialysate_flow_rate = config.DIALYSATE_FLOW_MINIMUM_VALUE, max_dialysate_flow_rate = config.DIALYSATE_FLOW_MAXIMUM_VALUE) test_treatment_blood_dialysate_rejection() test_treatment_adjustment_blood_dialysate() utils.tstDone()