# -*- 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_pre_treatment_priming # date 03/31/2022 # author Papiya Mandal import names from configuration import config, utility from dialin.common.hd_defs import PreTreatmentSubModes, HDOpModes, HDStandbyStates, PreTreatmentSampleWaterStates, PreTreatmentConsumableSelfTestStates, PreTreatmentNoCartSelfTestStates, PreTreatmentCartridgeInstallStates, PreTreatmentDrySelfTestsStates, PreTreatmentPrimeStates, PreTreatmentRecircStates, PreTreatmentPatientConnectionStates, PreTreatmentWetSelfTestStates, HDPreTreatmentReservoirMgmtStates from dialin.hd.reservoirs import HDReservoirStates from dialin.ui import utils from dialin.ui.hd_simulator import HDSimulator from dialin.ui.dg_simulator import DGSimulator hd_simulator = HDSimulator() dg_simulator = DGSimulator() PRE_TREATMENT_STEP = 4 SELF_TEST_DRY_STATES = {"DRY_SELF_TESTS_STATE" : 0, "DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE" : 1, "DRY_SELF_TESTS_USED_CARTIDGE_CHECK_STATE": 2, "DRY_SELF_TESTS_OCCLUSION_SENSORS_STATE": 3, "DRY_SELF_TESTS_PRESSURE_SENSORS_SETUP_STATE" : 4, "DRY_SELF_TESTS_PRESSURE_SENSORS_STATE" : 5, "DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE" : 6, "DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE" : 7, "DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE" : 8, "DRY_SELF_TESTS_STOPPED_STATE" : 9, "DRY_SELF_TESTS_COMPLETE_STATE" : 10} PRIMING_STATES = {"HD_PRIME_START_STATE" : 0, "HD_PRIME_WAIT_FOR_USER_START_STATE" : 1, "HD_PRIME_SALINE_SETUP_STATE" : 2, "HD_PRIME_SALINE_PURGE_AIR_STATE" : 3, "HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE" : 4, "HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE" : 5, "HD_PRIME_DIALYSATE_DIALYSER_STATE" : 6, "HD_PRIME_SALINE_DIALYSER_SETUP_STATE": 7, "HD_PRIME_SALINE_DIALYSER_STATE": 8, "HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE" : 9, "HD_PRIME_DIALYSATE_BYPASS_STATE" : 10, "HD_PRIME_WET_SELF_TESTS_STATE" : 11, "HD_PRIME_PAUSE" : 12, "HD_PRIME_COMPLETE" :13} RECIRCULATE_STATES = {"PRE_TREATMENT_RECIRC_STATE" : PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, "PRE_TREATMENT_RECIRC_STOPPED_STATE" : PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STOPPED_STATE.value} def navigate_self_test_dry_screen(): """ Method to navigate to self test dry screen and verify the 'Begin Prime' title is displayed """ test.startSection("Navigating to self test dry screen and verify the 'Begin Prime' title is displayed") hd_simulator.cmd_set_hd_operation_mode_data(HDOpModes.MODE_PRET.value,PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE .value) hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=HDOpModes.MODE_PRET.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value,consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE.value,installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value, prime_state=PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE.value,recirculate_state=PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE.value, wet_selftests_state=PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, pretreatment_rsrvr_state=HDReservoirStates.TREATMENT_RESERVOIR_MGMT_START_STATE.value) # title = (waitForObjectExists(utility.self_test_dry_check_list_text(config.BEGIN_PRIME_TITLE))).text # # test.compare(title, config.BEGIN_PRIME_TITLE, "{} title should be displayed when user is navigating to self test dry screen".format(config.BEGIN_PRIME_TITLE)) SCREEN_OBJ = names.o_PreTreatmentStack_pretreatmentPrimeStack_PreTreatmentPrimeStack utility.verify_page_step_indicator(SCREEN_OBJ, PRE_TREATMENT_STEP, config.PRE_TREATMENT_SCREENS) test.endSection() def navigate_to_priming_screen(): """ Method to navigate to priming screen and verify the 'Priming' title is displayed """ # test.startSection("Navigating to priming screen and verify the begin 'Priming' title is displayed") # hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=PreTreatmentSubModes.HD_PRE_TREATMENT_PRIME_STATE.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value,consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, # no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_HOME_IDLE_STATE.value,installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value, # prime_state=PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE.value,recirculate_state=PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE.value, # wet_selftests_state = PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, # pretreatment_rsrvr_state = HDPreTreatmentReservoirMgmtStates.PRE_TREATMENT_RESERVOIR_MGMT_START_STATE.value) test.startSection("Navigating to self test dry screen and verify the 'Begin Prime' title is displayed") hd_simulator.cmd_set_hd_operation_mode_data(HDOpModes.MODE_PRET.value,PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE .value) hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=HDOpModes.MODE_PRET.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value,consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE.value,installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value, prime_state=PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE.value,recirculate_state=PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_UF_VOL_STATE.value, wet_selftests_state=PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, pretreatment_rsrvr_state=HDReservoirStates.TREATMENT_RESERVOIR_MGMT_START_STATE.value) title = (waitForObject(utility.self_test_dry_check_list_text(config.PRIMING_TITLE))).text test.compare(title, config.PRIMING_TITLE, "{} title should be displayed when user is navigating to 'Priming' screen".format(config.PRIMING_TITLE)) utility.verify_page_step_indicator(names.o_PreTreatmentStack_pretreatmentPrimeStack_PreTreatmentPrimeStack, PRE_TREATMENT_STEP, config.PRE_TREATMENT_SCREENS) test.endSection() def verify_dry_states(): """ Method to simulating different states of self dry test and verify the busy and check indicator """ test.startSection("Simulating different states of self dry test and verifying the busy and check indicator") for state, index in SELF_TEST_DRY_STATES.items(): test.startSection("Passing {} state".format(state)) hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=HDOpModes.MODE_PRET.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value, consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_HOME_IDLE_STATE.value, installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=index, prime_state=PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE.value, recirculate_state=PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE.value, wet_selftests_state = PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, pretreatment_rsrvr_state = HDPreTreatmentReservoirMgmtStates.PRE_TREATMENT_RESERVOIR_MGMT_START_STATE.value) if (state == "DRY_SELF_TESTS_STATE") or (state == "DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE"): verify_indicators(None, config.TEST_DRY_STEPS) elif state == "DRY_SELF_TESTS_USED_CARTIDGE_CHECK_STATE": verify_indicators(config.BUSY, "Used Cartridge Check") elif state == "DRY_SELF_TESTS_OCCLUSION_SENSORS_STATE": verify_indicators(config.CHECK, "Used Cartridge Check") verify_indicators(config.BUSY, "Occlusion Sensors Check") elif (state == "DRY_SELF_TESTS_PRESSURE_SENSORS_SETUP_STATE") or (state == "DRY_SELF_TESTS_PRESSURE_SENSORS_STATE") or (state == "DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE"): verify_indicators(config.CHECK, "Used Cartridge Check") verify_indicators(config.CHECK, "Occlusion Sensors Check") verify_indicators(config.BUSY, "Pressure Sensors Check") elif state == "DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE": verify_indicators(config.CHECK, "Used Cartridge Check") verify_indicators(config.CHECK, "Occlusion Sensors Check") verify_indicators(config.CHECK, "Pressure Sensors Check") verify_indicators(config.BUSY, "Syringe Pump Check") elif (state == "DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE") or (state == "DRY_SELF_TESTS_STOPPED_STATE"): verify_indicators(config.CHECK, "Used Cartridge Check") verify_indicators(config.CHECK, "Occlusion Sensors Check") verify_indicators(config.CHECK, "Pressure Sensors Check") verify_indicators(config.CHECK, "Syringe Pump Check") verify_completion_message_and_indicator(False, config.SELF_TEST_COMPLETION_MSG) else: verify_indicators(config.CHECK, "Used Cartridge Check") verify_indicators(config.CHECK, "Occlusion Sensors Check") verify_indicators(config.CHECK, "Pressure Sensors Check") verify_indicators(config.CHECK, "Syringe Pump Check") verify_completion_message_and_indicator(True, config.SELF_TEST_COMPLETION_MSG) test.endSection() test.endSection() def verify_priming_recirculate_states(): """ Method to simulating different states of priming recirculate and verify the busy and check indicator """ test.startSection("Simulating different states of priming recirculate states and verifying the busy and check indicator") for state, index in RECIRCULATE_STATES.items(): test.startSection("Passing {} state".format(state)) hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=PreTreatmentSubModes.HD_PRE_TREATMENT_RECIRCULATE_STATE.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value,consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_HOME_IDLE_STATE.value,installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value, prime_state=PreTreatmentPrimeStates.HD_PRIME_WAIT_FOR_USER_START_STATE.value,recirculate_state=index, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE.value, wet_selftests_state = PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, pretreatment_rsrvr_state = HDPreTreatmentReservoirMgmtStates.PRE_TREATMENT_RESERVOIR_MGMT_START_STATE.value) verify_indicators(config.CHECK, "Blood Circuit Priming") verify_indicators(config.CHECK, "Dialysate Circuit Priming") verify_indicators(config.BUSY, "Wet Self Tests") verify_completion_message_and_indicator(True, config.PRIMING_COMPLETE_MSG) verify_continue_button(config.ENABLED) mouseClick(waitForObjectExists(names.o_preTreatmentDisposablesPrime_confirmButton_TouchRect)) hd_simulator.cmd_send_hd_general_response(101, config.ACCEPTED, 0) test.endSection() test.endSection() def verify_priming_states(): """ Method to simulating different states of priming and verify the busy and check indicator """ test.startSection("Simulating different states of priming and verifying the busy and check indicator") for state, index in PRIMING_STATES.items(): test.startSection("Passing {} state".format(state)) hd_simulator.cmd_send_pre_treatment_state_data(sub_mode=PreTreatmentSubModes.HD_PRE_TREATMENT_PRIME_STATE.value, water_sample_state=PreTreatmentSampleWaterStates.SAMPLE_WATER_SETUP_STATE.value,consumables_self_test_state=PreTreatmentConsumableSelfTestStates.CONSUMABLE_SELF_TESTS_INSTALL_STATE.value, no_cartridge_self_test_state=PreTreatmentNoCartSelfTestStates.NO_CART_SELF_TESTS_HOME_IDLE_STATE.value,installation_state=PreTreatmentCartridgeInstallStates.CARTRIDGE_INSTALL_STATE.value, dry_self_test_state=PreTreatmentDrySelfTestsStates.DRY_SELF_TESTS_START_STATE.value, prime_state=index,recirculate_state=PreTreatmentRecircStates.PRE_TREATMENT_RECIRC_STATE.value, patient_connection_state=PreTreatmentPatientConnectionStates.PRE_TREATMENT_PAT_CONN_WAIT_FOR_USER_CONFIRM_STATE.value, wet_selftests_state = PreTreatmentWetSelfTestStates.WET_SELF_TESTS_START_STATE.value, pretreatment_rsrvr_state = HDPreTreatmentReservoirMgmtStates.PRE_TREATMENT_RESERVOIR_MGMT_START_STATE.value) if (state == "HD_PRIME_START_STATE") or (state == "HD_PRIME_WAIT_FOR_USER_START_STATE") : verify_indicators(None, config.PRIMING_STEPS) if state == "HD_PRIME_WAIT_FOR_USER_START_STATE": verify_start_priming_button(config.ENABLED) hd_simulator.cmd_send_pre_treatment_prime_start_response(config.ACCEPTED, 0) else: verify_start_priming_button(config.DISABLED) verify_continue_button(config.DISABLED) elif (state == "HD_PRIME_SALINE_SETUP_STATE") or (state == "HD_PRIME_SALINE_PURGE_AIR_STATE") or (state == "HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE"): verify_indicators(config.BUSY, "Blood Circuit Priming") verify_start_priming_button(config.DISABLED) verify_continue_button(config.DISABLED) elif (state == "HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE") or (state == "HD_PRIME_SALINE_DIALYSER_SETUP_STATE") or (state == "HD_PRIME_SALINE_DIALYSER_STATE") or (state == "HD_PRIME_DIALYSATE_DIALYSER_STATE") or (state == "HD_PRIME_RESERVOIR_TWO_FILL_COMPLETE_STATE") or (state == "HD_PRIME_DIALYSATE_BYPASS_STATE"): verify_indicators(config.CHECK, "Blood Circuit Priming") verify_indicators(config.BUSY, "Dialysate Circuit Priming") verify_start_priming_button(config.DISABLED) verify_continue_button(config.DISABLED) elif state == "HD_PRIME_WET_SELF_TESTS_STATE": verify_indicators(config.CHECK, "Blood Circuit Priming") verify_indicators(config.CHECK, "Dialysate Circuit Priming") verify_indicators(config.BUSY, "Wet Self Tests") verify_start_priming_button(config.DISABLED) verify_continue_button(config.DISABLED) else: verify_indicators(config.CHECK, "Blood Circuit Priming") verify_indicators(config.CHECK, "Dialysate Circuit Priming") verify_indicators(config.CHECK, "Wet Self Tests") verify_start_priming_button(config.DISABLED) verify_completion_message_and_indicator(False, config.PRIMING_COMPLETE_MSG) verify_continue_button(config.DISABLED) test.endSection() test.endSection() def get_indicators(step): """ Method to return the busy and check indicator object of expected step @param step - (str) expected step @return indicators - (obj) list of busy and check indicator """ parent_obj = object.parent(waitForObjectExists(utility.self_test_dry_check_list_text(step))) children_obj = object.children(parent_obj) indicator_parent = children_obj[2] indicators = object.children(indicator_parent) return indicators def verify_indicators(indicator, steps): """ Method to verify the indicator next to each check list steps @param indicator - (str) expected indicator @param steps - (str) Expected steps """ test.startSection("Verify indicator is displayed for {}".format(steps)) if indicator != None: busy_indicator, check_indicator = get_indicators(steps) if indicator is config.BUSY: test.compare(busy_indicator.visible, config.VISIBLE, "{} indicator should display next to the {}".format(indicator, steps)) elif indicator is config.CHECK: test.compare(check_indicator.visible, config.VISIBLE, "{} indicator should display next to the {}".format(indicator, steps)) else: for step in steps: busy_indicator, check_indicator = get_indicators(step) test.compare(busy_indicator.visible, config.NOT_VISIBLE, "No indicator should display next to the {}".format(step)) test.compare(check_indicator.visible, config.NOT_VISIBLE, "No indicator should display next to the {}".format(step)) test.endSection() def verify_completion_message_and_indicator(completed, msg): """ Method to verify the completion message is displayed @param completed - (bool) True/False @param msg - (str) completion message """ test.startSection("verify the {} is displayed".format(msg)) check_indicator = object.children(findObject(names.o_self_test_dry_progress_circle)) check_indicator = objectMap.realName(check_indicator[2]) if completed: completion_msg = waitForObjectExists(utility.self_test_dry_check_list_text(msg)) test.compare(completion_msg.visible, config.VISIBLE, "{} message should be displayed".format(msg)) test.compare(completion_msg.text, msg, "Completion message should be {}".format(msg)) if object.exists(check_indicator): test.passes("Check indicator should display on progress circle upon completion") else: if object.exists(utility.self_test_dry_check_list_text(msg)) is False: test.passes("{} message should not display".format(msg)) test.endSection() def verify_start_priming_button(expected_state): """ Method to verify the 'Start Prime' button is enabled @param expected_state - (bool) True/False """ test.startSection("Verifying the 'Start Prime' button is enabled or disabled") start_prime_btn = waitForObjectExists(names.o_start_prime_btn) if expected_state: if object.exists(names.o_preTreatmentDisposablesPrime_startPrimeButton_TouchRect): testPassed = test.compare(start_prime_btn.enabled, config.ENABLED, "'Start Prime' should be enabled") if testPassed: mouseClick(waitForObjectExists(names.o_preTreatmentDisposablesPrime_startPrimeButton_TouchRect)) else: test.fail("Start prime button does not exist") else: test.compare(start_prime_btn.enabled, config.DISABLED, "'Start Prime' should be disabled") test.endSection() def verify_continue_button(expected_state): """ Method to verify the 'Continue' button is enabled @param expected_state - (bool) True/False """ test.startSection("Verifying the 'Continue' button is enabled or disabled") continue_btn = waitForObjectExists(names.o_continue_btn) if expected_state: test.compare(continue_btn.enabled, config.ENABLED, "'Continue' should be enabled") else: test.compare(continue_btn.enabled, config.DISABLED, "'Continue' should be disabled") test.endSection() def main(): utils.tstStart(__file__) startApplication(config.AUT_NAME) # test.startSection("Verifying 'Self Dry Test' screen") # navigate_self_test_dry_screen() # # utility.verify_countdown(config.BEGIN_PRIME_TITLE, config.TIME_OUT_DURATION_100, hd_simulator, dg_simulator) # # utility.verify_countdown(config.BEGIN_PRIME_TITLE, config.TIME_OUT_DURATION_200, hd_simulator, dg_simulator) # # utility.verify_countdown(config.BEGIN_PRIME_TITLE, config.TIME_OUT_DURATION_300, hd_simulator, dg_simulator) # verify_dry_states() # test.endSection() test.startSection("Verifying 'Priming' screen") navigate_to_priming_screen() utility.verify_countdown(config.PRIMING_TITLE, config.TIME_OUT_DURATION_100, hd_simulator, dg_simulator) utility.verify_countdown(config.PRIMING_TITLE, config.TIME_OUT_DURATION_200, hd_simulator, dg_simulator) utility.verify_countdown(config.PRIMING_TITLE, config.TIME_OUT_DURATION_300, hd_simulator, dg_simulator) verify_priming_states() verify_priming_recirculate_states() test.endSection() utils.tstDone()