# -*- 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_create_custom_treatment # date 2020/01/27 # author Joseph varghese # # NOTE: # This test is intended to be used to verify custom treatment in application . import names import test from dialin.ui import utils from builtins import str as pyStr from configuration import utility from configuration import config from configuration import assertion_helper from dialin.common.msg_defs import RequestRejectReasons from dialin.ui.hd_simulator import HDSimulator squish_assert = assertion_helper.AssertionHelper() PATIENT_ID = "demopatientid" HEPARIN_TYPE = "UFH 1,000 IU/mL" ACID_CONCENTRATE = ["Fres. Naturalyte", "08-1251-1", "08-2251-0", "08-3251-9"] BICARBONATE_CONCENTRATE = "Fres. Centrisol" DIALYZER_TYPE = ["BB Diacap Pro 13H", "BB Diacap Pro 16H", "BB Diacap Pro 19H", "F Optiflux F160NRe", "F Optiflux F180NRe"] CONFIRM_TREATMENT_TITLE = "Confirm Treatment" PRESCRIPTION_TITLE = "PRESCRIPTION" OPERATING_PARAMETERS_TITLE = "OPERATING PARAMETERS" CREATE_TREATMENT_SLIDER_VALUES = { "Blood Flow Rate": [200, 300, 400], "Dialysate Flow Rate": [150, 250, 300], "Duration": [120, 150, 240], "Heparin Dispensing Rate": [0.2, 0.3, 0.6], "Heparin Bolus Volume": [0.2, 0.5, 0.8], "Heparin Stop Time": [20, 60, 270], "Saline Bolus Volume": [200], "Dialysate Temperature": [35.5, 36.0, 36.5], "Venous Pressure Limit High": [550, 510, 500], "Venous Pressure Limit Low": [120, 140, 110], "Arterial Pressure Limit High": [-30, -40, -50], "Arterial Pressure Limit Low": [-280, -260, -290] , "Blood Pressure Measure Interval": [5, 15, 20], "Rinseback Rate": [75, 100, 125], } PRESCRIPTION_DETAILS = {"Blood Flow Rate": "mL/min", "Dialysate Flow Rate": "mL/min", "Duration": "min", "Heparin Dispensing Rate": "mL/hr", "Heparin Bolus Volume": "mL", "Heparin Stop Time": "min", "Saline Bolus Volume": "mL", "Dialysate Temperature": "°C", "Arterial Pressure Limit Low": "mmHg", "Arterial Pressure Limit High": "mmHg","Blood Pressure Measure Interval":"min", "Rinseback Rate" : "min", "Venous Pressure Limit High": "mmHg", "Venous Pressure Limit Low": "mmHg" } OPERATIONAL_PARAMETERS = {"Heparin Type": "UFH 1,000 IU/mL", "Acid Concentrate": ACID_CONCENTRATE, "Bicarbonate Concentrate": "Fres. Centrisol", "Dialyzer Type": DIALYZER_TYPE} def set_parameter_type(text): if isinstance(text, pyStr): names.operating_parameters["text"] = text return names.operating_parameters else: test.log(f"Invalid \"text\": {text} for object.") names.operating_parameters["text"] = None def set_operating_parameters(heparin_type, acid_concentrate, bicarbonate_concentrate, dialyzer_type): """ Tests that all possible non-slider options are shown. @Param : operating parameters value @return: None """ heparin_parameter_object = set_parameter_type(text = heparin_type) utility.scroll_to_zone(heparin_parameter_object, names.treatment_create_flickable) tapObject(waitForObject(heparin_parameter_object)) object_on_zone = set_parameter_type(text = ACID_CONCENTRATE[3]) utility.scroll_to_zone(object_on_zone, names.treatment_create_flickable) acid_concentrate_box_obj = set_parameter_type(text = acid_concentrate) tapObject(waitForObject(acid_concentrate_box_obj)) bicarbonate_concentrate_box_obj = set_parameter_type(text = bicarbonate_concentrate) utility.scroll_to_zone(bicarbonate_concentrate_box_obj, names.treatment_create_flickable) tapObject(waitForObject(bicarbonate_concentrate_box_obj)) object_on_zone = set_parameter_type(text = DIALYZER_TYPE[3]) utility.scroll_to_zone(object_on_zone, names.treatment_create_flickable) dialyzer_type_box_obj = set_parameter_type(text = dialyzer_type) tapObject(waitForObject(dialyzer_type_box_obj)) def verify_request_rejection_mode(hd_simulator): reject_reasons = [ RequestRejectReasons.REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE ] * hd_simulator.NUM_TREATMENT_PARAMETERS treatment_status = hd_simulator.cmd_send_treatment_parameter_validation_response(reject_reasons) squish_assert.is_true(treatment_status, "custom treatment should be rejected") def verify_request_continue_mode(hd_simulator): treatment_status = hd_simulator.cmd_send_treatment_parameter_manual_validation_response([ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]) squish_assert.is_true(treatment_status, "custom treatment should be accepted") def verify_custom_treatment_record_rejected(): test.startSection("Verifying custom treatment record, if confirmation rejected") for expected_treatment_title in config.CREATE_TREATMENT_PARAMETERS: expected_color = config.COLOR_CODES.get("Red") parameter_object = set_parameter_type(text = expected_treatment_title) utility.scroll_to_zone(parameter_object, names.treatment_create_flickable) parameter_text = waitForObject(parameter_object) parameter_text_color = parameter_text.color squish_assert.are_equal(expected_color, parameter_text_color, message = "parameter color should be "\ f"red for {expected_treatment_title}, if the confirmation get rejected !") test.endSection() def set_slider_value_for_parameter(index_value = None, item_text = None, slider_value = None, slider_obj = None, bislider = False, slider_range = None): parameter = object.children(slider_obj)[index_value] if bislider is True: slider_object = object.children(parameter)[1] else: slider_object = object.children(parameter)[2] slider_status = utility.set_slider_value(slider_value, slider_object, bislider, slider_range) squish_assert.is_true(condition = slider_status, message = f"{item_text} should set to value -> {slider_value}") def create_custom_treatment_record( blood_flow_rate, dialysate_flow_rate, Duration, heparin_dispensing_rate, heparin_bolus_volume, heparin_stop_time, saline_bolus, dialysate_temperature, blood_pressure_measurement_interval, rinseback_flowrate, venous_pressure_low_limits, venous_pressure_high_limits, arterial_pressure_low_limit, arterial_pressure_high_limit, index ): """ Method to set custom treatment slider values for parameters. @Param : parameters value @return: None """ slider_object = waitForObject(names.create_treatment_screen) child = object.children(slider_object)[0] parameter_child = object.children(child)[0] set_slider_value_for_parameter(index_value = 1, item_text = "blood flow rate", slider_value = blood_flow_rate, slider_obj = parameter_child) set_slider_value_for_parameter(index_value = 2, item_text = "dialysate flow rate", slider_value = dialysate_flow_rate, slider_obj = parameter_child) set_slider_value_for_parameter(index_value = 3, item_text = "Duration", slider_value = Duration, slider_obj = parameter_child) parameter_object = set_parameter_type(text = "Heparin Stop Time") utility.scroll_to_zone(parameter_object, names.treatment_create_flickable) set_slider_value_for_parameter(index_value = 4, item_text = "heparin dispensing rate", slider_value = heparin_dispensing_rate, slider_obj = parameter_child) set_slider_value_for_parameter(index_value = 5, item_text = "heparin bolus volume", slider_value = heparin_bolus_volume, slider_obj = parameter_child) parameter_object = set_parameter_type(text = "Saline Bolus") utility.scroll_to_zone(parameter_object, names.treatment_create_flickable) set_slider_value_for_parameter(index_value = 6, item_text = "heparin stop time", slider_value = heparin_stop_time, slider_obj = parameter_child) set_slider_value_for_parameter(index_value = 7, item_text = "saline bolus", slider_value = saline_bolus, slider_obj = parameter_child) set_operating_parameters(heparin_type = HEPARIN_TYPE, acid_concentrate = ACID_CONCENTRATE[index], bicarbonate_concentrate = BICARBONATE_CONCENTRATE, dialyzer_type = DIALYZER_TYPE[index]) parameter_object = set_parameter_type(text = "Venous Pressure Limits (mmHg)") utility.scroll_to_zone(parameter_object, names.treatment_create_flickable) set_slider_value_for_parameter(index_value = 13, item_text = "dialysate temperature", slider_value = dialysate_temperature, slider_obj = parameter_child) parameter_object = set_parameter_type(text = "Rinseback Flow Rate") utility.scroll_to_zone(parameter_object, names.treatment_create_flickable) set_slider_value_for_parameter(index_value = 14, item_text = " arterial pressure low limits (mmHg)", slider_value = arterial_pressure_low_limit, slider_obj = parameter_child, bislider = True, slider_range = "Low") set_slider_value_for_parameter(index_value = 14, item_text = "arterial pressure high limits (mmHg)", slider_value = arterial_pressure_high_limit, slider_obj = parameter_child, bislider = True, slider_range = "Max") set_slider_value_for_parameter(index_value = 15, item_text = "venous_pressure_low_limits", slider_value = venous_pressure_low_limits, slider_obj = parameter_child, bislider = True, slider_range = "Low") set_slider_value_for_parameter(index_value = 15, item_text = "venous pressure high limits (mmHg)", slider_value = venous_pressure_high_limits, slider_obj = parameter_child, bislider = True, slider_range = "Max") set_slider_value_for_parameter(index_value = 16, item_text = "blood pressure measurement interval", slider_value = blood_pressure_measurement_interval, slider_obj = parameter_child) set_slider_value_for_parameter(index_value = 17, item_text = "rinseback_flowrate", slider_value = rinseback_flowrate, slider_obj = parameter_child) def verify_the_confirm_treatment_screen_is_displayed() -> None: test.log("Verifying the 'Confirm Treatment' is displayed and its title text") confirm_treatment_title = waitForObject(names.confirm_title_text) squish_assert.are_equal(expected_value=CONFIRM_TREATMENT_TITLE, actual_value=confirm_treatment_title.text.toUtf8().constData(), message=f"{CONFIRM_TREATMENT_TITLE} screen is displayed " + f"and title should be {CONFIRM_TREATMENT_TITLE}") def verify_prescriptional_details_from_confirm_treatment_screen(index): test.startSection("Verifying prescription values from confirm treatment section") verify_the_confirm_treatment_screen_is_displayed() prescription_title = waitForObject(names.prescription_title_text) squish_assert.are_equal(expected_value=PRESCRIPTION_TITLE, actual_value=prescription_title.text.toUtf8().constData(), message=f"{PRESCRIPTION_TITLE} title " + f"should be {PRESCRIPTION_TITLE}") option = index for expected_prescription_title, measurement in PRESCRIPTION_DETAILS.items(): if expected_prescription_title == "Saline Bolus Volume": option = 0 parameter_object = names.prescription_measurement_title(text = expected_prescription_title) utility.scroll_to_zone(parameter_object, names.treatment_confirm_flickable) prescription_title = waitForObject(names.prescription_measurement_title(\ text=expected_prescription_title)) actual_measurement = object.parent(prescription_title) actual_measurement = object.children(actual_measurement)[-1] squish_assert.are_equal(expected_value=expected_prescription_title, actual_value=prescription_title.text.toUtf8().constData(), message=f"{expected_prescription_title} title should be " + f"{expected_prescription_title}") unit = CREATE_TREATMENT_SLIDER_VALUES[expected_prescription_title][option] squish_assert.are_equal(expected_value=f"{unit} {measurement}", actual_value=actual_measurement.text.toUtf8().constData(), message=f"{expected_prescription_title} corresponding "+ f"measured value should be {unit} {measurement}") option = index test.endSection() def verify_operational_details_from_confirm_treatment_screen(index): test.startSection("Verifying operational values from confirm treatment screen") verify_the_confirm_treatment_screen_is_displayed() parameter_object = names.prescription_measurement_title(text = "Blood Flow Rate") utility.scroll_to_zone(parameter_object, names.treatment_confirm_flickable) for expected_operational_title, measurement in OPERATIONAL_PARAMETERS.items(): operational_title = waitForObject(names.operating_parameters_measurement_title(\ text=expected_operational_title)) actual_measurement = object.parent(operational_title) actual_measurement = object.children(actual_measurement)[-1] squish_assert.are_equal(expected_value=expected_operational_title, actual_value=operational_title.text.toUtf8().constData(), message=f"{expected_operational_title} title should be " + f"{expected_operational_title}") if expected_operational_title == "Acid Concentrate" or expected_operational_title == "Dialyzer Type": measurement = measurement[index] squish_assert.are_equal(expected_value=measurement, actual_value=actual_measurement.text.toUtf8().constData(), message=f"{expected_operational_title} corresponding "+ f"measured value should be {measurement}") test.endSection() def main(): utils.tstStart("tst_create_custom_treatment") utility.start_application("Create custom treatment for a patient") hd = HDSimulator() hd.cmd_send_power_on_self_test_version_request() hd._handler_ui_first_check_in(message = None) tapObject(waitForObject(names.input_patient_id)) type(waitForObject(names.input_patient_id), PATIENT_ID) tapObject(waitForObject(names.confirm_button)) #set custom values for parameters create_custom_treatment_record( blood_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Blood Flow Rate"][0], dialysate_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Flow Rate"][0], Duration = CREATE_TREATMENT_SLIDER_VALUES["Duration"][0], heparin_dispensing_rate = CREATE_TREATMENT_SLIDER_VALUES["Heparin Dispensing Rate"][0], heparin_bolus_volume = CREATE_TREATMENT_SLIDER_VALUES["Heparin Bolus Volume"][0], heparin_stop_time = CREATE_TREATMENT_SLIDER_VALUES["Heparin Stop Time"][0], saline_bolus = CREATE_TREATMENT_SLIDER_VALUES["Saline Bolus Volume"][0], dialysate_temperature = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Temperature"][0], venous_pressure_low_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit Low"][0], venous_pressure_high_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit High"][0], arterial_pressure_low_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit Low"][0], arterial_pressure_high_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit High"][0], blood_pressure_measurement_interval = CREATE_TREATMENT_SLIDER_VALUES["Blood Pressure Measure Interval"][0], rinseback_flowrate = CREATE_TREATMENT_SLIDER_VALUES["Rinseback Rate"][0], index = 0 ) verify_request_continue_mode(hd) #verification of records from confirm treatment screen verify_operational_details_from_confirm_treatment_screen(index = 0) verify_prescriptional_details_from_confirm_treatment_screen(index = 0) tapObject(waitForObject(names.back_button_confirm_treatment)) parameter_object = set_parameter_type(text = config.CREATE_TREATMENT_PARAMETERS[0]) utility.scroll_to_zone(parameter_object, names.treatment_create_flickable, direction="Top") #set custom values for parameters create_custom_treatment_record( blood_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Blood Flow Rate"][1], dialysate_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Flow Rate"][1], Duration = CREATE_TREATMENT_SLIDER_VALUES["Duration"][1], heparin_dispensing_rate = CREATE_TREATMENT_SLIDER_VALUES["Heparin Dispensing Rate"][1], heparin_bolus_volume = CREATE_TREATMENT_SLIDER_VALUES["Heparin Bolus Volume"][1], heparin_stop_time = CREATE_TREATMENT_SLIDER_VALUES["Heparin Stop Time"][1], saline_bolus = CREATE_TREATMENT_SLIDER_VALUES["Saline Bolus Volume"][0], dialysate_temperature = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Temperature"][1], venous_pressure_low_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit Low"][1], venous_pressure_high_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit High"][1], arterial_pressure_low_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit Low"][1], arterial_pressure_high_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit High"][1], blood_pressure_measurement_interval = CREATE_TREATMENT_SLIDER_VALUES["Blood Pressure Measure Interval"][1], rinseback_flowrate = CREATE_TREATMENT_SLIDER_VALUES["Rinseback Rate"][1], index = 1 ) verify_request_rejection_mode(hd) parameter_object = set_parameter_type(text = config.CREATE_TREATMENT_PARAMETERS[0]) utility.scroll_to_zone(parameter_object, names.treatment_create_flickable, direction="Top") #verification of create treatment screen after request rejection verify_custom_treatment_record_rejected() parameter_object = set_parameter_type(text = config.CREATE_TREATMENT_PARAMETERS[0]) utility.scroll_to_zone(parameter_object, names.treatment_create_flickable, direction="Top") #set custom values for parameters create_custom_treatment_record( blood_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Blood Flow Rate"][2], dialysate_flow_rate = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Flow Rate"][2], Duration = CREATE_TREATMENT_SLIDER_VALUES["Duration"][2], heparin_dispensing_rate = CREATE_TREATMENT_SLIDER_VALUES["Heparin Dispensing Rate"][2], heparin_bolus_volume = CREATE_TREATMENT_SLIDER_VALUES["Heparin Bolus Volume"][2], heparin_stop_time = CREATE_TREATMENT_SLIDER_VALUES["Heparin Stop Time"][2], saline_bolus = CREATE_TREATMENT_SLIDER_VALUES["Saline Bolus Volume"][0], dialysate_temperature = CREATE_TREATMENT_SLIDER_VALUES["Dialysate Temperature"][2], venous_pressure_low_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit Low"][2], venous_pressure_high_limits = CREATE_TREATMENT_SLIDER_VALUES["Venous Pressure Limit High"][2], arterial_pressure_low_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit Low"][2], arterial_pressure_high_limit = CREATE_TREATMENT_SLIDER_VALUES["Arterial Pressure Limit High"][2], blood_pressure_measurement_interval = CREATE_TREATMENT_SLIDER_VALUES["Blood Pressure Measure Interval"][2], rinseback_flowrate = CREATE_TREATMENT_SLIDER_VALUES["Rinseback Rate"][2], index = 2 ) verify_request_continue_mode(hd) verify_operational_details_from_confirm_treatment_screen(index = 2) verify_prescriptional_details_from_confirm_treatment_screen(index = 2) utils.waitForGUI(.5) utils.tstDone()