# -*- coding: utf-8 -*-" import names from dialin.squish import utils from dialin.ui.hd_proxy import HDSimulator from dialin.common.msg_defs import RequestRejectReasons from time import sleep slider_ranges = { "bloodFlowRateMin": 100, "bloodFlowRateMax": 500, "dialysateFlowRateMin": 100, "dialysateFlowRateMax": 600, "durationMin": 60, "durationMax": 480, "heparinDispensingRateMin": 0, "heparinDispensingRateMax": 1000, "heparinBolusVolumeMin": 100, "heparinBolusVolumeMax": 2000, "heparinStopTimeMin": 1000, "heparinStopTimeMax": 2000, "salineBolusOptions": [ "100 mL", "200 mL", "300 mL" ], "acidConcentrateOptions": [ "08-1251-1", "08-2251-0", "08-3251-9" ], "bicarbonateConcentrateOptions": [ "Dimesol - BC-201" ], "dialyzerTypeOptions": [ "Nipro Elisio-H 17", "Nipro Elisio-H 19", "Fresenius Optiflux F160NRe", "Fresenius Optiflux F180NRe" ], "dialysateTempMin": 35, "dialysateTempMax": 39, "arterialPressureLimitLowMin": -300, "arterialPressureLimitLowMax": 200, "arterialPressureLimitHighMin": -300, "arterialPressureLimitHighMax": 200, "venousPressureLimitLowMin": -100, "venousPressureLimitLowMax": 600, "venousPressureLimitHighMin": 0, "venousPressureLimitHighMax": 600, "bloodPressureMeasureIntervalMin": 0, "bloodPressureMeasureIntervalMax": 30, "rinsebackFlowRateMin": 50, "rinsebackFlowRateMax": 150 } def test_load_create_treatment(): """ Tests that we can load the create treatment page. @return: None """ mouseClick(waitForObject(names.o_create_treatment_button)) test.compare(waitForObjectExists(names.o_create_treatment_flickable).visible, True, "Create treatment page loads") def test_parameters_exist(): """ Tests that all treatment parameter components exist on the treatment parameters page. @return: None """ parameter_names = { "_bloodFlowRate": "SliderCreateTreatment", "_dialysateFlowRate": "SliderCreateTreatment", "_duration": "SliderCreateTreatment", "_heparinDispensingRate": "SliderCreateTreatment", "_heparinBolusVolume": "SliderCreateTreatment", "_heparinStopTime": "SliderCreateTreatment", "_salineBolusRect": "RectSelectCreateTreatment", "_acidConcentrateRect": "RectSelectCreateTreatment", "_bicarbonateConcentrateRect": "RectSelectCreateTreatment", "_dialyzerTypeRect": "RectSelectCreateTreatment", "_dialysateTemperature": "SliderCreateTreatment", "_arterialPressureLimits": "SliderDoubleCreateTreatment", "_venousPressureLimits": "SliderDoubleCreateTreatment", "_bloodPressureMeasurementInterval": "SliderCreateTreatment", "_rinsebackFlowRate": "SliderCreateTreatment", "_continueButton": "TouchRect", } for parameter_name, type_name in parameter_names.items(): test.compare(waitForObjectExists({ "container": names.o_create_treatment_container, "objectName": parameter_name, "type": type_name }).visible, True, "Found " + parameter_name) def test_sliders(): """ Tests that all sliders have the correct min / max values and that the selected value is displayed correctly. @return: None """ sliders = { "_bloodFlowRate": {"min": slider_ranges["bloodFlowRateMin"], "max": slider_ranges["bloodFlowRateMax"], "units": " mL/min" }, "_dialysateFlowRate": {"min": slider_ranges["dialysateFlowRateMin"], "max": slider_ranges["dialysateFlowRateMax"], "units": " mL/min" }, "_duration": {"min": slider_ranges["durationMin"], "max": slider_ranges["durationMax"], "units": " min" }, "_heparinDispensingRate": {"min": slider_ranges["heparinDispensingRateMin"], "max": slider_ranges["heparinDispensingRateMax"], "units": " mL/hr" }, "_heparinBolusVolume": {"min": slider_ranges["heparinBolusVolumeMin"], "max": slider_ranges["heparinBolusVolumeMax"], "units": " mL" }, "_heparinStopTime": {"min": slider_ranges["heparinStopTimeMin"], "max": slider_ranges["heparinStopTimeMax"], "units": " min" }, "_dialysateTemperature": {"min": slider_ranges["dialysateTempMin"], "max": slider_ranges["dialysateTempMax"], "units": " C" }, "_arterialPressureLimitsLow": {"min": slider_ranges["arterialPressureLimitLowMin"], "max": slider_ranges["arterialPressureLimitLowMax"], "units": " mmHg" }, "_arterialPressureLimitsHigh": {"min": slider_ranges["arterialPressureLimitHighMin"], "max": slider_ranges["arterialPressureLimitHighMax"], "units": " mmHg" }, "_venousPressureLimitsLow": {"min": slider_ranges["venousPressureLimitLowMin"], "max": slider_ranges["venousPressureLimitLowMax"], "units": " mmHg" }, "_venousPressureLimitsHigh": {"min": slider_ranges["venousPressureLimitHighMin"], "max": slider_ranges["venousPressureLimitHighMax"], "units": " mmHg" }, "_bloodPressureMeasurementInterval": {"min": slider_ranges["bloodPressureMeasureIntervalMin"], "max": slider_ranges["bloodPressureMeasureIntervalMax"], "units": " min" }, "_rinsebackFlowRate": {"min": slider_ranges["rinsebackFlowRateMin"], "max": slider_ranges["rinsebackFlowRateMax"], "units": " mL/min" }, } for slider_name, slider_info in sliders.items(): if slider_name == "_heparinStopTime": flick(waitForObject(names.o_create_treatment_flickable), 0, 700) sleep(1) if slider_name == "_dialysateTemperature": flick(waitForObject(names.o_create_treatment_flickable), 0, 700) sleep(1) if slider_name == "_arterialPressureLimitsHigh": flick(waitForObject(names.o_create_treatment_flickable), 0, 400) sleep(2) slider_object_name = slider_name + "Slider" slider_selected_value_object_name = slider_name + "Value" slider_object = {"container": names.o_create_treatment_container, "objectName": slider_object_name, "type": "Slider" } test.compare(waitForObjectExists(slider_object).visible, True, "Found " + slider_object_name) mouseClick(waitForObject(slider_object), waitForObjectExists(slider_object).width / 2, 5, Qt.LeftButton) mouseClick(waitForObject(slider_object), 1, 0, Qt.LeftButton) selected_value_object = { "container": names.o_create_treatment_container, "objectName": slider_selected_value_object_name, "type": "Text" } test.compare(waitForObjectExists(selected_value_object).visible, True) test.compare(waitForObjectExists(selected_value_object).text, "{0}{1}".format(slider_info["min"], slider_info["units"])) mouseClick(waitForObject(slider_object), waitForObjectExists(slider_object).width, 0, Qt.LeftButton) test.compare(waitForObjectExists(selected_value_object).visible, True) test.compare(waitForObjectExists(selected_value_object).text, "{0}{1}".format(slider_info["max"], slider_info["units"])) def check_button_group(buttons, slider_ranges_key): for idx, btn in enumerate(buttons): mouseClick(waitForObject(btn), waitForObjectExists(btn).width / 2, waitForObjectExists(btn).height / 2, Qt.LeftButton) test.compare(waitForObjectExists(btn).text.text, slider_ranges[slider_ranges_key][idx]) def test_rects(): """ Tests that all possible non-slider options are shown. @return: None """ flick(waitForObject(names.o_create_treatment_flickable), 0, -1400) # saline bolus saline_bolus_buttons = [ names.o_create_treatment_saline_bolus_0, names.o_create_treatment_saline_bolus_1, names.o_create_treatment_saline_bolus_2 ] check_button_group(saline_bolus_buttons, "salineBolusOptions") sleep(2) flick(waitForObject(names.o_create_treatment_flickable), 0, 300) # acid concentrate acid_options = [ names.o_create_treatment_acid_0, names.o_create_treatment_acid_1, names.o_create_treatment_acid_2 ] check_button_group(acid_options, "acidConcentrateOptions") sleep(2) flick(waitForObject(names.o_create_treatment_flickable), 0, 400) # bicarbonate concentrate bicarbonate_options = [ names.o_create_treatment_bicarbonate_0 ] check_button_group(bicarbonate_options, "bicarbonateConcentrateOptions") # dialyzer type dialyzer_options = [ names.o_create_treatment_dialyzer_0, names.o_create_treatment_dialyzer_1, names.o_create_treatment_dialyzer_2, names.o_create_treatment_dialyzer_3, ] check_button_group(dialyzer_options, "dialyzerTypeOptions") def test_continue_failure(): """ Tests that continue is disabled by default Simulates a FW response that all parameters are invalid prior to selection. @return: None """ flick(waitForObject(names.o_create_treatment_flickable), 0, 1800) # check that UI didn't change the page after prematurely clicking continue test.compare(waitForObject(names.o_create_treatment_continue).visible, True) mouseClick(waitForObject(names.o_create_treatment_continue)) test.compare(waitForObject(names.o_create_treatment_continue).visible, True) test.compare(waitForObject(names.o_create_treatment_rinseback).visible, True) # simulate FW response that all parameters are invalid hd_simulator = HDSimulator() reject_reasons = [ RequestRejectReasons.REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE ] * hd_simulator.NUM_TREATMENT_PARAMETERS test.compare(hd_simulator.cmd_send_treatment_parameter_validation_response(reject_reasons), True, "Simulate HD treatment param response") flick(waitForObject(names.o_create_treatment_flickable), 0, -1800) def test_continue_success(): """ Tests that selecting the continue button moves to the treatment confirm page Assumes all treatment parameters have already been selected @return: None """ flick(waitForObject(names.o_create_treatment_flickable), 0, 700) mouseClick(waitForObject(names.o_create_treatment_continue)) sleep(0.05) # simulate FW response that all parameters are valid hd_simulator = HDSimulator() reject_reasons = [ RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # overall response RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # blood flow RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialysate flow RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # duration RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparin dispensing rate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparin bolus volume RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparin stop time RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # saline bolus RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # acid concentrate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # bicarbonate concentrate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialyzer type RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialysate temperature RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # arterial pressure limit low RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # arterial pressure limit high RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # venous pressure limit low RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # venous pressure limit high RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # blood pressure measurement interval RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # rinseback flow rate ] hd_simulator.cmd_send_treatment_parameter_validation_response(reject_reasons) sleep(1) test.compare(waitForObjectExists(names.o_create_treatment_confirm).visible, True) def main(): utils.tstStart(__file__) startApplication(names.AUT_NAME + " -q") sleep(1) test_load_create_treatment() sleep(1) test_continue_failure() sleep(1) test_parameters_exist() test_sliders() test_rects() test_continue_success() utils.tstDone()