Index: shared/scripts/configuration/config.py =================================================================== diff -u -r6f75b9f63739e13030389f79d5dca33d8077dada -rccf9a587e0dc447600f44e1520706c66d7141fab --- shared/scripts/configuration/config.py (.../config.py) (revision 6f75b9f63739e13030389f79d5dca33d8077dada) +++ shared/scripts/configuration/config.py (.../config.py) (revision ccf9a587e0dc447600f44e1520706c66d7141fab) @@ -20,718 +20,11 @@ COMMON_PATH = os.environ['HOME']+"/Projects" -#create custom treatment -HIGHER_VALUE_OF_BLOOD_FLOW_RATE = 500 -LOWER_VALUE_OF_BLOOD_FLOW_RATE = 100 -STEP_VALUE_OF_BLOOD_FLOW_RATE = 25 -BUFFER_LOW_AND_HIGH_LIMITS = 30 -ARTERIAL_VALUE_0 = 0 -ARTERIAL_VALUE_NEGATIVE_300 = -300 -ARTERIAL_VALUE_NEGATIVE_20 = -20 -ARTERIAL_VALUE_NEGATIVE_270 = -270 -VENOUS_VALUE_600 = 600 -VENOUS_VALUE_20 = 20 -VENOUS_VALUE_50 = 50 -VENOUS_VALUE_570 = 570 -POSITIVE_BUFFER = 10 -NEGATIVE_BUFFER = -10 - -ALARM_ID_AND_MESSAGES = { - 1: "Stuck button POST failure.\nStop or Off button detected to be pressed for at least 1 second during test shortly after power up.", - 2: "HD FPGA POST failure.", - 3: "DG FPGA POST failure.", - 4: "HD Watchdog POST failure.", - 5: "DG Watchdog POST failure.", - 6: "UI communication POST failure.\nUI failed to communicate within a reasonable time after power up.", - 7: "Real-time clock configuration error.", - 8: "HD accelerometer failed POST.", - 9: "DG accelerometer failed POST." , - 10: "RTC or MCU timer inaccurate.", - 11: "DG heaters failed POST.", - 12: "HD firmware image integrity POST test failed.", - 13: "DG firmware image integrity POST test failed.", - 14: "HD blood flow invalid calibration.", - 15: "HD dialysate flow invalid calibration.", - 16: "HD alarm audio failed POST.", - 17: "HD UI POST failed.", - 18: "DG load cells invalid calibration record.", - 19: "DG flow sensors invalid calibration record.", - 20: "DG conductivity sensors invalid calibration record.", - 21: "DG drain line volume invalid calibration record.", - 22: "DG reservoirs invalid calibration record.", - 23: "DG acid concentrate calibration record.", - 24: "DG bicarb concentrate calibration record.", - 25: "DG accelerometer invalid calibration record.", - 26: "HD accelerometer invalid calibration record.", - 27: "HD blood flow invalid calibration record.", - 28: "HD dialyzer flow invalid calibration record.", - 29: "HD heparin force sensor invalid calibration record.", - 30: "HD Software fault.\nSoftware found itself in an unexpected state.", - 31: "Blood pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.", - 32: "Blood pump failed motor off check.\nMeasured speed while commanded off.", - 33: "Blood pump failed motor direction check.\nMeasured vs commanded.", - 34: "Blood pump failed rotor speed check.\nMismatch with rotor and motor speeds.", - 35: "Dialysis inlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.", - 36: "Dialysis inlet pump failed motor off check.\nMeasured speed while commanded off.", - 37: "Dialysis inlet pump failed motor direction check.\nMeasured vs commanded.", - 38: "Dialysis inlet pump failed rotor speed check.\nMismatch with rotor and motor speeds.", - 39: "Dialysis outlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.", - 40: "Dialysis outlet pump failed motor off check.\nMeasured speed while commanded off.", - 41: "Dialysis outlet pump failed motor direction check.\nMeasured vs commanded.", - 42: "Dialysis outlet pump failed rotor speed check.\nMismatch with rotor and motor speeds.", - 43: "Watchdog expired error.\nWatchdog was not \"pet\" within the appropriate time.", - 44: "User interface communication timeout.", - 45: "Too many bad CRCs detected on received system messages.", - 46: "System message that required acknowledgment was not acknowledged.", - 47: "Ultrafiltration rate is too high error during treatment.", - 48: "Ultrafiltration volume accuracy error during treatment.", - 49: "HD FPGA communication down for too long.", - 50: "FPGA not accepting commanded valve states.", - 51: "Blood pump failed motor speed check.\nMeasured vs commanded.", - 52: "Dialysate inlet pump failed motor speed check.\nMeasured vs commanded.", - 53: "Dialysate outlet pump failed motor speed check.\nMeasured vs commanded.", - 54: "HD critical data integrity check failed.", - 55: "DG critical data integrity check failed.", - 56: "HD accelerometer error (no readings or FPGA reports error).", - 57: "DG accelerometer error (no readings or FPGA reports error).", - 58: "HD valve homing failed.", - 59: "HD valve transition time out.", - 60: "HD valve not functional.", - 61: "HD valve current out of range.", - 62: "HD valve position out of target.", - 63: "FPGA reports failure reading arterial pressure sensor.", - 64: "FPGA reports failure reading venous pressure sensor.", - 65: "HD requests DG command with invalid parameter fault.", - 66: "HD blood leak sensor set point set failure.", - 67: "HD blood pump occlusion self-test failure alarm.", - 68: "HD active reservoir recirculation out of range.", - 69: "HD blood leak sensor invalid calibration record.", - 70: "HD arterial pressure self-test failure alarm." , - 71: "HD venous pressure self-test failure alarm.", - 72: "HD blood flow meter status check self-test failure alarm.", - 73: "HD dialysate flow meter status check self-test failure alarm.", - 74: "HD blood leak detector self-test failure alarm.", - 75: "HD syringe pump self-test failure alarm.", - 76: "HD monitored voltage is out of range.", - 77: "DG monitored voltage is out of range.", - 78: "HD syringe pump direction (from encoder) error.", - 79: "HD syringe pump direction (from controller) error.", - 80: "HD syringe pump fault reported by FPGA.", - 81: "HD syringe pump over travel error.", - 82: "HD syringe pump DAC write failure.", - 83: "HD syringe pump is running while the BP is off.", - 84: "HD venous pressure sensor not being read.", - 85: "HD pump track latch opened alarm.", - 86: "HD BP occlusion sensor not being read.", - 87: "DG heating invalid calibration record.", - 88: "DG concentrate pumps hall sensor out of range.", - 89: "HD BP occlusion sensor error.", - 90: "This alarm ID is available for use.", - 91: "HD No dialysate flow data receive in the last 3 seconds.", - 92: "DG conductivity sensor bad status.", - 93: "This alarm ID is available for use.", - 94: "This alarm ID is available for use.", - 95: "This alarm ID is available for use.", - 96: "Inlet water temperature in high range.", - 97: "Fill conductivity out of range.", - 98: "HD battery communication fault.", - 99: "HD syringe pump stall alarm.", - 100: "HD no cartridge self-test timeout.", - 101: "HD dry self-test timeout.", - 102: "Real-time clock communication error.", - 103: "HD non-volatile calibration group invalid record CRC.", - 104: "Air trap level sensors reporting illegal combination of air/fluid.", - 105: "DG non-volatile system group invalid record CRC.", - 106: "DG inlet water conductivity is greater than threshold.", - 107: "HD reports DG restarted fault.", - 108: "HD syringe pump ADC error.", - 109: "HD syringe pump volume check error.", - 110: "HD syringe pump speed check error.", - 111: "HD syringe pump not stopped in off state error.", - 112: "HD blood leak detector fault.", - 113: "HD arterial air bubble detector self-test failure.", - 114: "HD venous air bubble detector self-test failure.", - 115: "DG temperature sensor out of range.", - 116: "DG temperature sensor ADC out of range.", - 117: "DG primary heater internal temperature out of range.", - 118: "DG primary heater cold junction temperature out of range.", - 119: "DG trimmer heater internal temperature out of range.", - 120: "DG trimmer heater cold junction temperature out of range.", - 121: "DG main primary heater voltage out of range.", - 122: "DG small primary heater voltage out of range.", - 123: "DG trimmer heater voltage out of range.", - 124: "HD end of treatment alarm (high priority).", - 125: "Blood sitting too long after treatment stopped by user alarm (>5 min).", - 126: "HD blood leak detected alarm.", - 127: "Venous pressure too low during treatment." , - 128: "HD venous air bubble detected alarm.", - 129: "HD venous air bubble detected rinseback alarm.", - 130: "Venous pressure too high during treatment.", - 131: "Arterial pressure too low during treatment.", - 132: "Arterial pressure too high during treatment.", - 133: "DG fluid leak detected alarm.", - 134: "HD fluid leak detected alarm." , - 135: "HD experienced large acceleration.", - 136: "DG experienced large acceleration.", - 137: "HD tilt exceeds maximum.", - 138: "DG tilt exceeds maximum.", - 139: "HD AC power lost alarm.", - 140: "Dialysate generator communication timeout.", - 141: "Air trap fill timeout during treatment.", - 142: "Blood pump occlusion detected.", - 143: "DG dialysate temperature sensors drift timeout.", - 144: "DG software configuration record invalid CRC.", - 145: "Concentrate conductivity after adding acid out of range alarm.", - 146: "Dialysate conductivity out of range.", - 147: "Wait for the DG to produce dialysate.", - 148: "Inlet water temperature too high.", - 149: "Alarm ID available for use.", - 150: "Inlet water conductivity in high range.", - 151: "Inlet water conductivity in low range.", - 152: "Inlet water pressure in low range.", - 153: "HD prime completed high priority alarm.", - 154: "EEPROM operations (read, write, erase) failure.", - 155: "DG software configuration record invalid CRC.", - 156: "HW usage data (treatment time in HD and total consumed water in DG) failure.", - 157: "DG chemical disinfect prime acid line timeout.", - 158: "Inlet water temperature is in the low range.", - 159: "Dialysate inlet pump failed flow vs motor speed check.", - 160: "Blood pump rotor speed too high.", - 161: "This alarm ID is available for use.", - 162: "This alarm ID is available for use.", - 163: "HD sees primary load cell for reservoir 1 change too much too fast.", - 164: "HD sees primary load cell for reservoir 2 change too much too fast.", - 165: "HD in treatment rinseback operation timeout.", - 166: "HD in treatment re-circ sub-mode for too long.", - 167: "HD cartridge door opened alarm.", - 168: "HD active reservoir depletion timeout.", - 169: "Dialysate flow rate out of range.", - 170: "HD syringe empty alarm.", - 171: "HD syringe pump occlusion alarm.", - 172: "HD syringe pump not enough Heparin alarm.", - 173: "HD arterial air bubble detected alarm.", - 174: "HD arterial air bubble detected rinseback alarm.", - 175: "HD pump direction status error.", - 176: "HD active reservoir is full during treatment and DG not ready to switch reservoirs.", - 177: "DG software fault.\nSoftware found itself in an unexpected state.", - 178: "HD communication timeout.", - 179: "DG FPGA communication down for too long.", - 180: "DG load cell ADC error.", - 181: "DG load cells weight out of range for tare.", - 182: "DG load cells invalid calibration.", - 183: "DG invalid load cell value.", - 184: "Inlet or Outlet UV reactor not healthy.", - 185: "DG fan RPM out of range.", - 186: "DG concentrate pump fault.", - 187: "DG concentrate pump CP1 speed control error.", - 188: "DG concentrate pump CP2 speed control error.", - 189: "DG drain pump RPM out of range.", - 190: "DG drain pump off fault.", - 191: "DG flow rate out of upper range.", - 192: "DG flow rate out of lower range.", - 193: "RO pump flow rate out of range.", - 194: "DG RO pump duty cycle out of range.", - 195: "DG RO pump pressure out of range.", - 196: "DG temperature sensor error flag fault.", - 197: "DG temperature sensors ADC fault.", - 198: "DG heaters cold junction temperature out of range.", - 199: "DG heaters fault.", - 200: "DG thermistors/sensors temperature out of range.", - 201: "Inlet water quality is bad (temperature, conductivity, pressure).", - 202: "Inlet water pressure fault.", - 203: "Pressure sensor fault.", - 204: "RO rejection ratio out of range.", - 205: "Conductivity sensor fault.", - 206: "DG dialysate fill runs out of time.", - 207: "DG flow meter check failure alarm.", - 208: "DG primary heater on with no flow time out.", - 209: "DG drain circulation line timeout.", - 210: "HD battery pack detected an error.", - 211: "Blood sitting too long warning (>4 min).", - 212: "HD end of treatment alarm (user not acting to end treatment).", - 213: "HD prime completed medium priority alarm.", - 214: "HD Saline bolus volume check failure.", - 215: "HD rinseback volume check failure.", - 216: "HD end treatment sub-mode timeout alarm.", - 217: "HD blood prime volume check failure.", - 218: "HD syringe detected alarm.", - 219: "HD syringe pump syringe removed alarm.", - 220: "HD battery pack SOC is too low.", - 221: "HD Saline bag is empty.", - 222: "HD dialysate temperature too high alarm.", - 223: "HD dialysate temperature too low alarm.", - 224: "Treatment stopped by user action.", - 225: "HD end of treatment warning.", - 226: "HD prime completed low priority alarm.", - 227: "HD prime out of time alarm.", - 228: "HD time out on prime sub-mode purge air state.", - 229: "HD prime dialysate dialyzer time out alarm.", - 230: "HD prime dialysate bypass time out alarm.", - 231: "HD pre-treatment mode dry self-tests failure.", - 232: "HD pre-treatment mode wet self-tests failure.", - 233: "RTC battery low.", - 234: "RTC (i.e read time) or RAM operations failure (read or write).", - 235: "HD in treatment stopped sub-mode after rinseback completed (no escalation).", - 236: "HD needs new cartridge to be installed.", - 237: "HD prime saline dialyzer time out alarm.", - 238: "HD no cartridge loaded or installed improperly alarm.", - 239: "HD fail to remove cartridge alarm.", - 240: "Bicarb conductivity out of range during bicarb pump check alarm.", - 241: "DG reservoir drain time out.", - 242: "DG reservoir fill time out.", - 243: "DG reservoir leak time out.", - 244: "DG temperature sensors difference out of range.", - 245: "DG heat disinfect target temperature time out (could not reach to temperature).", - 246: "DG heat disinfect inlet pressure and temperature sensors out of range.", - 247: "DG heat disinfect inlet conductivity and temperature out of range.", - 248: "DG chemical disinfect could not reach to target temperature.", - 249: "DG chemical disinfect inlet pressure and temperature sensors out of range.", - 250: "DG chemical disinfect inlet conductivity and temperature out of range.", - 251: "HD invalid system record.", - 252: "HD invalid service record.", - 253: "DG invalid system record.", - 254: "DG invalid service record.", - 255: "HD and UI software builds are not compatible.", - 256: "HD and DG software builds are not compatible.", - 257: "DG FPGA power out timeout.", - 258: "HD FPGA power out timeout.", - 259: "HD temperatures out of range.", - 260: "UI POST Application Integrity (Sha256Sum) failure.", - 261: "UI POST CANBus failure.", - 262: "UI POST Display failure.", - 263: "UI POST Touch failure.", - 264: "UI POST SD-Card failure.", - 265: "UI POST RTC failure.", - 266: "UI POST WiFi failure.", - 267: "UI POST Bluetooth failure.", - 268: "UI POST Ethernet failure.", - 269: "UI POST Sound failure.", - 270: "HD POST Safety Shutdown failure.", - 271: "DG POST Safety Shutdown failure.", - 272: "HD Fan RPM out of range.", - 273: "HD measured blood pump flow rate is out of range.", - 274: "HD measured dialysate inlet pump flow rate is out of range.", - 275: "HD arterial pressure sensor is reading out of range.", - 276: "HD venous pressure sensor is reading out of range.", - 277: "HD BP occlusion sensor is reading out of range.", - 278: "HD active reservoir weight out of range.", - 279: "DG dialysate drain time out.", - 280: "HD arterial pressure sensor read timeout error.", - 281: "Acid concentration bottle low volume alarm.", - 282: "Bicarbonate concentration bottle low volume alarm.", - 283: "DG load cells weight out of range.", - 284: "DG load cells primary/back up drift out of range.", - 285: "HD treatment recirculate timeout warning.", - 286: "HD treatment rinseback complete timeout warning.", - 287: "HD processor clock speed checks against FPGA clock failure.", - 288: "DG trimmer heater on with flow timeout.", - 289: "DG dialysate or concentrate caps not closed." - } - -ALARM_PRIORITIES = {1: "LOW", 2: "MEDIUM", 3: "HIGH"} -NUM_OF_ALARM_PRIORITIES = 4 # Total number of alarm priorities -ACCEPTED = True -REJECTED = False -ALARM_LIST_TITLE = "Alarm list" - - -NUM_OF_REQUEST_REJECT_REASONS = 43 -NUM_OF_MSG_ID = 289 -UNDEFINED_ALARM_ID_MSG = "ALARM_ID_UNDEFINED" -ALARM_TITLE = "Alarm" - - -ALARM_ID_NO_ALARM = 0 -ALARM_ID_OUT_OF_RANGE = 290 - -ALARM_PRIORITY_OPTIONS = { - 0 : 'ALARM_PRIORITY_NONE' , - 1 : 'ALARM_PRIORITY_LOW' , - 2 : 'ALARM_PRIORITY_MEDIUM', - 3 : 'ALARM_PRIORITY_HIGH', -} - -# alarm colors -ALARMS_COLORS_HEADER = { - "ALARM_PRIORITY_NONE" : "#438feb", - "ALARM_PRIORITY_LOW" : "#db8f00", - "ALARM_PRIORITY_MEDIUM" : "#db8f00", - "ALARM_PRIORITY_HIGH" : "#831913" -} - -ALARMS_COLORS_BODY = { - "ALARM_PRIORITY_NONE" : "#254670", - "ALARM_PRIORITY_LOW" : "#f5a623", - "ALARM_PRIORITY_MEDIUM" : "#f5a623", - "ALARM_PRIORITY_HIGH" : "#c53b33" -} - -ALARM_MUTE_FLAG = 0B0000001000000000 -ALARM_UNMUTE_FLAG = 0B0000000000000000 - -ALARM_BUTTONS_OK = 0B0000000010111000 - -ALARM_BUTTONS_RESUME = 0B0000000000110000 -ALARM_BUTTONS_RESUME_RINSEBACK = 0B0000000000100000 -ALARM_BUTTONS_RESUME_END = 0B0000000000010000 - -ALARM_BUTTONS_RINSEBACK = 0B0000000000101000 -ALARM_BUTTONS_RINSEBACK_RESUME = ALARM_BUTTONS_RESUME_RINSEBACK -ALARM_BUTTONS_RINSEBACK_END = 0B0000000000001000 - -ALARM_BUTTONS_END = 0B0000000000011000 -ALARM_BUTTONS_END_RESUME = ALARM_BUTTONS_RESUME_END -ALARM_BUTTONS_END_RINSEBACK = ALARM_BUTTONS_RINSEBACK_END - -ALARM_BUTTONS_RESUME_RINSEBACK_END = 0B0000000000000000 -ALARM_BUTTONS_RINSEBACK_RESUME_END = ALARM_BUTTONS_RESUME_RINSEBACK_END -ALARM_BUTTONS_END_RESUME_RINSEBACK = ALARM_BUTTONS_RESUME_RINSEBACK_END - CURRENT_COLOR = '#000000' COMPLETE_COLOR= '#4290ec' ENABLED_COLOR = '#fcfcfc' -INCOMPLETE_COLOR = '#607a91' -OUT_OF_RANGE_COLOR = "#c53b33" +INCOMPLETE_COLOR = '#607a91' -#standby mode -GOODMORNING_START_TIME_SEC = 0 -GOODEVENING_START_TIME_SEC = 43200 -BLOOD_PRIMING_TEXT = "Blood Priming" -LIQUID_UNIT = "mL" -BLOOD_PRIMING_DEFAULT_VALUE = "0 mL" -SALINE_BOLUS_CUMULATIVE = 300 -SALINE_UNIT = "mL" - -UF_MINIMUM_VALUE = 0 -UF_MAXIMUM_VALUE = 600 -ULTRAFILTRATION_PAUSED_TEXT = "Ultrafiltration Paused" -RESUME_TEXT = "RESUME ULTRAFILTRATION" -EDIT_TEXT = "EDIT ULTRAFILTRATION VOLUME" -TITLE_TEXT = "ULTRAFILTRATION VOLUME (L)" - -#main treatment pressure -PRESSURE_TITLE = "PRESSURES" -ARTERIAL_TITLE = "Arterial" -VENOUS_TITLE = "Venous" -VENOUS_UOM = "mmHg" -ARTERIAL_UOM = "mmHg" -LOW_TEXT = "LOW" -HIGH_TEXT = "HIGH" -ACCEPTED = True -REJECTED = False -NUM_OF_REQUEST_REJECT_REASONS = 43 - -#pressure -PRESSURE_STEPS = 10 -ARTERIAL_PRESSURE_MINIMUM = -400 -ARTERIAL_PRESSURE_MAXIMUM = +600 -ARTERIAL_PRESSURE_LOW_MIN = -300 -ARTERIAL_PRESSURE_LOW_DEF = -300 -ARTERIAL_PRESSURE_LOW_MAX = +200 -ARTERIAL_PRESSURE_HIGH_MIN = -300 -ARTERIAL_PRESSURE_HIGH_DEF = +100 -ARTERIAL_PRESSURE_HIGH_MAX = +200 - -VENOUS_PRESSURE_MINIMUM = -100 -VENOUS_PRESSURE_MAXIMUM = +700 -VENOUS_PRESSURE_LOW_MIN = -100 -VENOUS_PRESSURE_LOW_DEF = -100 -VENOUS_PRESSURE_LOW_MAX = +600 -VENOUS_PRESSURE_HIGH_MIN = +100 -VENOUS_PRESSURE_HIGH_DEF = +400 -VENOUS_PRESSURE_HIGH_MAX = +600 - -#main_treatment_flows -BLOOD_FLOW_MINIMUM_VALUE = 100 -BLOOD_FLOW_BUFFER = 25 -FLOW_SLIDER_WIDTH_BUFFER = 37 -BLOOD_FLOW_MAXIMUM_VALUE = 500 -DIALYSATE_FLOW_MINIMUM_VALUE = 0 -DIALYSATE_FLOW_MAXIMUM_VALUE = 0 # Seems to be bug. need change -FLOW_UNIT = "mL/min" -BLOOD_FLOW_TEXT = "blood" -DIALYSATE_FLOW_TEXT = "dialysate" - -#main treatment screen -VITALS_TITLE = "VITALS" -OUT_OF_RANGE_COLOR = "#c53b33" -IN_RANGE_COLOR = "#fcfcfc" -SYSTOLIC_LOWER_LIMIT = 60 -SYSTOLIC_UPPER_LIMIT = 250 -DIASTOLIC_LOWER_LIMIT = 40 -DIASTOLIC_UPPER_LIMIT = 200 -HEART_RATE_LOWER_LIMIT = 40 -HEART_RATE_UPPER_LIMIT = 180 -HEART_RATE_TITLE = "Heart Rate" -BLOOD_PRESSURE_TITLE = "Blood Pressure" -BLOOD_PRESSURE_UNIT = "mmHg" -HEART_RATE_UNIT = "BPM" -BLOOD_PRIMING_RANGE = 300 -BLOOD_PRIMING_TARGET_MAXIMUM = 300 - - -#tst_treatment_monitoring -FLOWS_TEXT = "FLOWS" -BLOOD_UNIT = "mL/min" -DIALYSATE_TEXT = "Dialysate" -BLOOD_TEXT = "Blood" -VITALS_TEXT = "VITALS" -BLOOD_PRESSURE_TEXT = "mmHg" -HEARTRATE_UNIT = "BPM" -PRESSURE_TEXT = "PRESSURE (mmHg)" -ARTEREAL_TEXT = "Arterial" -VENOUS_TEXT = "Venous" -TIME_DURATION_TEXT = "Time Remaining" -ULTRAFILTERATION_TEXT = "ULTRAFILTRATION VOLUME (L)" -SALINE_BOLUS = "SALINE BOLUS" -VOLUME_DELIVERED = "Volume Delivered" -CUMULATIVE_DELIVERED = "Cumulative Delivered" -HEPARIN_TEXT = "HEPARIN" -VOLUME_DELIVERED = "Volume Delivered" - -#patient id -PATIENT_ID = { - "qwerty" : "qwerty", - "sampleid" : "sampleid", - "abcdefghijklmnop" : "abcdefghijklmnop", - "patientid" : "patientid", - "username" : "username", - "sA@MpLE#123" : "sAMpLE123", - "A@BH&321" : "ABH321", - "5432@qwerty" : "5432qwerty" -} - -KEYBOARD_SWITCH = ["ABC", "&123"] - - -#main-treatment heparin -HEPARIN_UNIT = "mL" -HEPARIN_DELIVERY_TEXT = "HEPARIN DELIVERY" -HEPARIN_DELIVERY_OFF_TEXT = "OFF" -HEPARIN_STOP_TEXT = "Delivery Stopped" -HEPARIN_RESUME_DELIVERY_TEXT = "RESUME DELIVERY" -HEPARIN_BOLUS_ACTIVE_TEXT = "Bolus Active" -HEPARIN_PAUSE_DELIVERY_TEXT = "PAUSE DELIVERY" -HEPARIN_MAXIMUM_VOLUME_DELIVERED_TEXT = "Maximum Cumulative Heparin Volume Delivered" -HEPARIN_SYRINGE_EMPTY_TEXT = "Syringe Empty" - -#Time_Duration -CREATE_TREATMENT_PARAMETERS = ["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 Flow Rate"] -TREATMENT_PAUSED_TEXT = "Treatment Paused" - -#dictionary consist of custom treatment values -CREATE_CUSTOM_TREATMENT = { - "Blood Flow Rate": 250, - "Dialysate Flow Rate": 400, - "Duration": 270, - "Heparin Dispensing Rate": 0.5, - "Heparin Bolus Volume": 1, - "Heparin Stop Time": 100, - "Saline Bolus Volume": 200, - "Dialysate Temperature": 37, - "Blood Pressure Measurement Interval": 40, - "Rinseback Flow Rate": 100, - "Arterial Pressure Limit Low" : -30, - "Arterial Pressure Limit High" : 0, - "Blood Pressure Measure Interval" : 40, - "Rinseback Rate" : 100, - "Venous Pressure Limit High" : 590, - "Venous Pressure Limit Low": 560 - -} - -#dictionary consist of slider values of treatment parameters -CREATE_TREATMENT_PARAMETER_RANGE = { - "Blood Flow Rate": [100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500], - "Dialysate Flow Rate": [100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600], - "Duration": [60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 240, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465, 480], - "Heparin Dispensing Rate": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 0], - "Heparin Bolus Volume": [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 0], - "Heparin Stop Time": [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 0], - "Saline Bolus Volume": [100, 200, 300], - "Dialysate Temperature": [35.0, 35.5, 36.0, 36.5, 37.0], - "Blood Pressure Measurement Interval": [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 0], - "Rinseback Flow Rate": [50, 75, 100, 125, 150], -} - -#dictionary consist of slider minimum value, slider buffer value, width buffer of slider -CREATE_TREATMENT_SLIDER_VALUES = { - - "blood_flow_rate" : [100, 25, 46], - "dialysate_flow_rate" : [100, 50, 75], - "duration" : [60, 15, 26.6], - "heparin_dispensing_rate" : [0, 0.1, 75], - "heparin_bolus_volume" : [0, 0.1, 37], - "heparin_stop_time" : [0, 10, 15.9], - "saline_bolus" : [100, 100, 375], - "dialysate_temperature" : [35, 0.5, 187.5], - "arterial_pressure_limit_high" : [20, 10, 11.931], - "blood_pressure_measurement_interval" : [0, 5, 62], - "rinseback_flow_rate" : [50, 25, 187], -} - -#ultrafilteration volume based on flow parameters. Python list contains Rotational speed, Motor speed, -# MC speed, MC current and PWM. -TREATMENT_ULTRAFILTRATION_FLOW_PARAMETERS = { - 0 : [100, 1, 1, 1, 1, 1, 1], - 1 : [550, 24, 32, 425, 85, 18, 36], - 2 : [80, 125, 187, 257, 530, 458, 985], - 3 : [100, 0, 0, 0, 0, 0, 0], - 4 : [220, 1.45, 1.45, 1.45, 1.45, 1.45, 1.45], - } - -#dictionary contains uf maximum and minimum value's to set. -TREATMENT_ULTRAFILTRATION_TESTING_OPTION = { - 0 : {"uf_maximum" : 600, "uf_minimum" : 0}, - 1 : {"uf_maximum" : 500, "uf_minimum" : 0}, - 2 : {"uf_maximum" : 550, "uf_minimum" : 0}, - 3 : {"uf_maximum" : 300, "uf_minimum" : 0}, - 4 : {"uf_maximum" : 280, "uf_minimum" : 0}, - 5 : {"uf_maximum" : 765, "uf_minimum" : 500}, - 6 : {"uf_maximum" : 680, "uf_minimum" : 450}, - 7 : {"uf_maximum" : 480, "uf_minimum" : 380}, - 8 : {"uf_maximum" : 390, "uf_minimum" : 675}, - 9 : {"uf_maximum" : 290, "uf_minimum" : 125}, - } - -#tst_pretreatment_screens -PRE_TREATMENT_SCREENS = ["Create" , "Sample" , "Consumables" , "Disposables" , "Prime" , "Ultrafiltration" , "BP/HR" , "Connection" , "Start"] -NUM_OF_PRETREATMENT_BULLETS = len(PRE_TREATMENT_SCREENS) - - -#dictionary contains saline cumulative and saline delivered value -#key : saline cumulative value. -#value: saline delivered value -SALINE_BOLUS_VALUES = { - 0 : 0, - 1.0 : 1.0, - 125.56 : 100.56, - 165.87 : 145.87, - 220.65 : 220.65, - 325.25 : 300.25, - 400.86 : 380.86, - 500.00 : 500.25, - 634.76 : 634.76, - 823.65 : 800.65, - 999.99 : 999.99, - 1000 : 1000 -} - - -#tst_pretreatment_screens color palettes -CURRENT_COLOR = '#000000' -COMPLETE_COLOR= '#4290ec' -ENABLED_COLOR = '#fcfcfc' -INCOMPLETE_COLOR = '#607a91' - -CONSUMABLE_SELF_TEST_TEXT = "Consumables Self Test" -BICARB_PUMP_CHECK_TEXT = "BiCarb Pump Check" -ACID_PUMP_CHECK_TEXT = "Acid Pump Check" -SELF_TEST_COMPLETE_TEXT = "Self Test Complete!" - - -#pre-treatment_priming -NOT_VISIBLE = False -VISIBLE = True -FOCUS = True -NOT_IN_FOCUS = False -BUSY = "Busy" -CHECK = "Check" -BEGIN_PRIME_TITLE = "Begin Prime" -PRIMING_TITLE = "Priming" -SYSTEM_SELF_TEST_TITLE = "System Self Test" -FILTER_FLUSH_TITLE = "Filter Flush" -TIME_OUT_DURATION_300 = 300 -TIME_OUT_DURATION_200 = 200 -TIME_OUT_DURATION_100 = 100 -COUNT_DOWN_TIME_100 = 100 -MINIMUM_COUNTDOWN_TIME = 0 -ENABLED = True -DISABLED = False -CONSUMABLE_SELF_TEST_BICARB_PUMP_CHECK_STATE = 3 -LOOD_PRIMING_TEXT = "Blood Priming" -SALINE_UNIT = "mL" -BLOOD_PRIMING_DEFAULT_VALUE = "0 mL" - - -#Pre-Treatment Disposables -NEXT_BUTTON_TEXT = "NEXT" -BACK_BUTTON_TEXT = "BACK" -ENABLED = True -DISABLED = False -CONFIRM_BUTTON_TEXT = "CONFIRM" - -#Filter Flush - -#Pre_treatment_water_sample -SAMPLE_TEXT = "Sample" -CREATE_TEXT = "Create" -NEXT_BUTTON_TEXT = "NEXT" -WATER_SAMPLE_BUTTON_TEXT = "WATER SAMPLE" -BACK_BUTTON_TEXT = "BACK" -PASS_TEXT = "PASS" -FAIL_TEXT = "FAIL" -OK_TEXT = "OK" - -# pretreatment_patient_connection -SYSTOLIC_PRESSSURE_120 = 120 -SYSTOLIC_PRESSSURE_113 = 113 -SYSTOLIC_PRESSSURE_150 = 150 -SYSTOLIC_PRESSSURE_175 = 175 -SYSTOLIC_PRESSSURE_200 = 200 -SYSTOLIC_PRESSSURE_200 = 200 -SYSTOLIC_PRESSSURE_251 = 251 -SYSTOLIC_PRESSSURE_59 = 59 -SYSTOLIC_PRESSSURE_15 = 15 -DIASTOLIC_PRESSSURE_25 = 25 -DIASTOLIC_PRESSSURE_39 = 39 -DIASTOLIC_PRESSSURE_74 = 74 -DIASTOLIC_PRESSSURE_80 = 80 -DIASTOLIC_PRESSSURE_85 = 85 -DIASTOLIC_PRESSSURE_60 = 60 -DIASTOLIC_PRESSSURE_150 = 150 -DIASTOLIC_PRESSSURE_200 = 200 -DIASTOLIC_PRESSSURE_201 = 201 -HEART_RATE_VAL_39 = 39 -HEART_RATE_VAL_60 = 60 -HEART_RATE_VAL_70 = 70 -HEART_RATE_VAL_85 = 85 -HEART_RATE_VAL_100 = 100 -HEART_RATE_VAL_101 = 101 -HEART_RATE_VAL_110 = 110 -HEART_RATE_VAL_181 = 181 -HEART_RATE_VAL_200 = 200 -SYSTOLIC_LOWER_LIMIT = 60 -SYSTOLIC_UPPER_LIMIT = 250 -DIASTOLIC_LOWER_LIMIT = 40 -DIASTOLIC_UPPER_LIMIT = 200 -HEART_RATE_LOWER_LIMIT = 40 -HEART_RATE_UPPER_LIMIT = 180 -UF_MINIMUM_SLIDER_WIDTH = -2 -UF_MAXIMUM_SLIDER_WIDTH = 638.00 -UF_VALID_RANGE = 700 -TRAINING_INDICATOR_SCREEN = 4 -TREATMENT_ULTRAFILTERATION_TESTING_OPTION = { - "OPTION_1" : {"uf_maximum" : 800, "uf_minimum" : 0}, - "OPTION_2" : {"uf_maximum" : 500, "uf_minimum" : 0}, - "OPTION_3" : {"uf_maximum" : 550, "uf_minimum" : 0}, - "OPTION_4" : {"uf_maximum" : 300, "uf_minimum" : 0}, - "OPTION_5" : {"uf_maximum" : 280, "uf_minimum" : 0}, - "OPTION_6" : {"uf_maximum" : 765, "uf_minimum" : 0}, - "OPTION_7" : {"uf_maximum" : 680, "uf_minimum" : 0}, - "OPTION_8" : {"uf_maximum" : 1500, "uf_minimum" : 0}, - "OPTION_9" : {"uf_maximum" : 390, "uf_minimum" : 0}, - "OPTION_10" : {"uf_maximum" : 800, "uf_minimum" : 0}, - "OPTION_11" : {"uf_maximum" : 1000, "uf_minimum" : 0}, - "OPTION_12" : {"uf_maximum" : 1250, "uf_minimum" : 0}, - } - -CURRENT_COLOR = '#000000' -COMPLETE_COLOR= '#000000' -ENABLED_COLOR = '#fcfcfc' -INCOMPLETE_COLOR = '#607a91' END_TREATMENT_SCREEN = ["Rinseback Setup", "Recirculate", "Treatment Complete", "Treatment Paused State"] RINSE_BACK_SETUP_TEXT = "Rinseback Setup" RECIRCULATE_TEXT = "Recirculate" Index: shared/scripts/configuration/utility.py =================================================================== diff -u -r6f75b9f63739e13030389f79d5dca33d8077dada -rccf9a587e0dc447600f44e1520706c66d7141fab --- shared/scripts/configuration/utility.py (.../utility.py) (revision 6f75b9f63739e13030389f79d5dca33d8077dada) +++ shared/scripts/configuration/utility.py (.../utility.py) (revision ccf9a587e0dc447600f44e1520706c66d7141fab) @@ -26,577 +26,26 @@ from datetime import datetime from dialin.ui import utils - -def color_verification(exp_val = "Red", act_val = "#c53b33"): - """ - Function to verify item color verification - Argument: - exp_val - Expected required value - act_val - Color displayed on UI - Return: - handle the application for log - """ - test.compare(config.COLOR_CODES[color_name],(act_val.color[name])) - -def check_if_object_is_within_the_container(obj=None, container=None): - """ - check if an object is inside a container - @param obj - child UI object - @param container - container UI object - @return boolean - """ - container = squish.findObject(container) - containerPos = container.mapToGlobal(squish.QPoint(0, 0)) - container_x, container_y = pyInt(containerPos.x), pyInt(containerPos.y) - container_width, container_height = pyInt(container.width), pyInt(container.height) - - obj = squish.findObject(obj) - objPos = obj.mapToGlobal(squish.QPoint(0, 0)) - obj_x, obj_y = pyInt(objPos.x), pyInt(objPos.y) - obj_width, obj_height = pyInt(obj.width), pyInt(obj.height) - - if obj_x >= container_x and obj_y >= container_y: - if (obj_x + obj_width) <= (container_x + container_width) and (obj_y + obj_height) <= (container_y + container_height): - return True - - return False - -def scroll_to_zone(zone=None, screen_object=None, direction = None): - """ - scroll to the UI, if object is hidden - @param zone - object to be find out. - @param screen_object - object of the screen. - @return boolean - """ - counter = 0 - while counter <= 100: - try: - counter += 1 - squish.findObject(zone) - squish.snooze(0.5) - if check_if_object_is_within_the_container(obj=zone, container=screen_object): - return True - else: - raise RuntimeError - except RuntimeError: - ScreenObj = squish.waitForObject(screen_object) - screenHeight = pyInt(ScreenObj.height) - screenWidth = pyInt(ScreenObj.width) - squish.mouseWheel(ScreenObj, screenWidth//2, - screenHeight//2, 0, -50, squish.Qt.NoModifier) - - raise LookupError("value object is not in view to the user after trying 100 times") - - -def pressure_pop_up_text_obj(text): - names.o_pop_up_pressure_text_obj["text"] = text - return names.o_pop_up_pressure_text_obj - -def pressure_text_obj(text): - names.o_pressure_text_obj["text"] = text - return names.o_pressure_text_obj - -def get_current_date_and_time(): - - date_format='%Y/%b/%d - %H:%M' - date = datetime.now() - return str(date.strftime(date_format)) - -def enter_keypad_value(entry): - """ - Method to enter user desired - value using keypad - @param entry: (str) User expected value - """ - test.startSection("Entering {}".format(entry)) - for value in entry: - value = pyInt(value) - key_val = squish.waitForObject(keypad_input(value)) - squish.mouseClick(key_val) - utils.waitForGUI(1) - test.endSection() - -def erase_entered_value(input_field): - """ - Method to erase the entered value - @param input_field - (obj) object of input field - """ - test.startSection("Erasing value") - input_field= squish.waitForObject(input_field) - entered_value = str(input_field.text) - for value in range(len(entered_value)+1): - utils.waitForGUI(1) - squish.mouseClick(squish.waitForObjectExists(names.o_back_space_key)) - - test.compare(str(input_field.text), "", "Input field should be empty") - test.endSection() - -def vitals_reading_obj(reading): - names.o_vitals_reading["text"] = reading - return names.o_vitals_reading - -def keypad_input(key_value): - names.o_keypad_input["text"] = key_value - return names.o_keypad_input - - -def scroll_to_zone(zone=None, screen_object=None, direction = None): - """ - scroll to the to the value if object is hidden - @param value - (obj) value object - @param container - (obj) Container of the value - @return boolean true and false - """ - counter = 0 - while counter <= 100: - try: - counter += 1 - squish.findObject(zone) - squish.snooze(0.5) - if check_if_object_is_within_the_container(obj=zone, container=screen_object): - return True - else: - raise RuntimeError - except RuntimeError: - ScreenObj = squish.findObject(screen_object) - screenHeight = pyInt(ScreenObj.height) - screenWidth = pyInt(ScreenObj.width) - if direction is None: - squish.mouseWheel(ScreenObj, (screenWidth-100), - 107, 0, -(screenHeight-460), squish.Qt.NoModifier) - else: - squish.mouseWheel(ScreenObj, (screenWidth-100), - -(screenHeight-700), 0, 200, squish.Qt.NoModifier) - - raise LookupError("zone object is not in view to the user after trying 100 times") - -def get_alarm_id_obj(id): - names.o_alarm_id["text"] = id - return names.o_alarm_id - -def get_alarm_msg_obj(msg): - names.o_alarm_message["text"] = msg - return names.o_alarm_message - -def rejection_msg(text): - names.o_rejection_msg["text"] = text - return names.o_rejection_msg - - -def verify_page_step_indicator(screen_obj, pre_treatment_step): - """ - Method to verify the Page Step indicators [the object on top of the screen which indicates the steps passed, current, remained] - @param pre_treatment_step : indicates the Current pre-treatment step - """ - test.startSection("verification of page step indicators") - for page in range(len(config.PRE_TREATMENT_SCREENS)): - bullet_children = object.children(squish.waitForObjectExists(get_bullet_object(screen_obj, page))) - bullet_circle_color = bullet_children[0].color.name - bullet_border_color = bullet_children[0].border.color.name - step_title = squish.waitForObjectExists(get_text_object(screen_obj, config.PRE_TREATMENT_SCREENS[page])) - - if page < pre_treatment_step: - test.log("To verify the step indicator of the completed pre-treatment screen " + config.PRE_TREATMENT_SCREENS[page]) - test.verify(squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current) - test.compare(bullet_circle_color, config.COMPLETE_COLOR, " the bullet color must be " + str(config.COMPLETE_COLOR)) - test.compare(bullet_border_color, config.COMPLETE_COLOR," the bullet border color must be " + str(config.COMPLETE_COLOR)) - test.compare(step_title.color.name, config.ENABLED_COLOR, " the text color must be " + str(config.ENABLED_COLOR)) - - elif page == pre_treatment_step: - test.log("To verify the step indicators of the current pre-treatment screen " + config.PRE_TREATMENT_SCREENS[page]) - test.verify(squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete) - test.compare(bullet_circle_color,config.CURRENT_COLOR," the bullet color must be " + str(config.CURRENT_COLOR)) - test.compare(bullet_border_color,config.COMPLETE_COLOR, " the bullet border color must be " + str(config.COMPLETE_COLOR)) - test.compare(step_title.color.name,config.ENABLED_COLOR, " the text color must be " + str(config.ENABLED_COLOR)) - test.verify(step_title.font.bold, " the current text must be in bold") - - else: - test.log("To verify the step indicators of the remaining pre-treatment screen " + config.PRE_TREATMENT_SCREENS[page]) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current,) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete,) - test.compare(step_title.color.name,config.INCOMPLETE_COLOR, " the text color must be " + str(config.INCOMPLETE_COLOR)) - test.compare(bullet_circle_color,config.CURRENT_COLOR," the bullet color must be " + str(config.CURRENT_COLOR)) - test.compare(bullet_border_color,config.INCOMPLETE_COLOR, " the bullet border color must be " + str(config.INCOMPLETE_COLOR)) - test.endSection() - - -def set_arterial_ranges_min_val(art_low): - """ - Method to set the Arterial range maximum value to user expected value - @param art_low - (int) user expected value - """ - test.startSection("Set Arterial range minimum value to {}".format(art_low)) - arterial_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_min = pyInt(arterial_min.minimum) - arterial_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_max = pyInt(arterial_max.maximum) - low_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery)) - low_handler_children = object.children(low_handler_parent) - low_handler = low_handler_children[-2] - width = pyInt(low_handler.width) - 8 - height = pyInt(low_handler.height)- 10 - if arterial_min == art_low: - test.passes("Arterial range minimum is already set to {}".format(art_low)) - elif arterial_min < art_low: - while arterial_min != art_low: - squish.mouseDrag(low_handler, width, height, 1, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_min += 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(low_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - break - else: - continue - elif arterial_min > art_low: - while arterial_min != art_low: - squish.mouseDrag(low_handler, width, height, -1, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_min -= 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(low_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - break - else: - continue - # arterial blood pressure low limit should be lower than the high limit by atleast 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(low_handler_parent.minValue, arterial_min, "Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - else: - test.compare(arterial_min, art_low, "Actual Arterial range minimum value: {} is equal to Expected value: {}".format(arterial_min, art_low)) - test.endSection() - - -def set_arterial_ranges_max_val(art_high): - """ - Method to set the Arterial range maximum value to user expected value - @param art_high - (int) user expected value - """ - test.startSection("Set Arterial range maximum value to {}".format(art_high)) - arterial_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_max = pyInt(arterial_max.maximum) - arterial_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_min = pyInt(arterial_min.minimum) - high_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery)) - high_handler_children = object.children(high_handler_parent) - high_handler = high_handler_children[-1] - width = pyInt(high_handler.width) - 20 - height = pyInt(high_handler.height) - 25 - if arterial_max == art_high: - test.passes("Arterial range maximum is already set to {}".format(art_high)) - elif arterial_max < art_high: - while arterial_max != art_high: - squish.mouseDrag(high_handler, -1, height, width, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_max += 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - break - else: - continue - elif arterial_max > art_high: - while arterial_max != art_high: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_max -= 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - break - else: - continue - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(high_handler_parent.maxValue, arterial_max, - "Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - else: - test.compare(arterial_max, art_high, - "Actual Arterial range maximum value: {} is equal to Expected value: {}".format(arterial_max, art_high)) - test.endSection() - - -def set_venous_ranges_max_val(ven_high): - """ - Method to set the Venous range maximum value to user expected value - @param ven_high - (int) user expected value - """ - test.startSection("Set Venous range maximum value to {}".format(ven_high)) - ven_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous) - ven_max = pyInt(ven_max.maximum) - ven_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous) - ven_min = pyInt(ven_min.minimum) - high_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous)) - high_handler_children = object.children(high_handler_parent) - high_handler = high_handler_children[-1] - width = pyInt(high_handler.width) - 15 - height = pyInt(high_handler.height) - 10 - if ven_max == ven_high: - test.passes("Venous range maximum is already set to {}".format(ven_high)) - elif ven_max < ven_high: - while ven_max != ven_high: - squish.mouseDrag(high_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - ven_max += 10 - # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - if ven_max == ven_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Venous range maximum value cannot be moved beyond {}".format(ven_max)) - break - else: - continue - elif ven_max > ven_high: - while ven_max != ven_high: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - ven_max -= 10 - # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - if ven_max == ven_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Venous range maximum value cannot be moved beyond {}".format(ven_max)) - break - else: - continue - # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - if ven_max == ven_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(high_handler_parent.maxValue, ven_max, "Venous range maximum value cannot be moved beyond {}".format(ven_max)) - else: - test.compare(ven_max, ven_high, "Actual Venous range maximum value: {} is equal to Expected value: {}".format(ven_max, ven_high)) - test.endSection() - -#Methods for create custom treatment -def set_venous_ranges_min_val(ven_low): - """ - Method to set the Venous range maximum value to user expected value - @param ven_low - (int) user expected value - """ - test.startSection("set Venous range minimum value to {}".format(ven_low)) - ven_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous) - ven_min = pyInt(ven_min.minimum) - ven_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous) - ven_max = pyInt(ven_max.maximum) - low_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Venous)) - low_handler_children = object.children(low_handler_parent) - low_handler = low_handler_children[-2] - width = pyInt(low_handler.width) - 15 - height = pyInt(low_handler.height) - 10 - if ven_min == ven_low: - test.passes("Venous range minimum is already set to {}".format(ven_low)) - elif ven_min < ven_low: - while ven_min != ven_low: - squish.mouseDrag(low_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - ven_min += 10 - if ven_min == ven_max - config.BUFFER_LOW_AND_HIGH_LIMITS: # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - squish.mouseDrag(low_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Venous range minimum value cannot be moved beyond {}".format(ven_min)) - break - else: - continue - elif ven_min > ven_low: - while ven_min != ven_low: - squish.mouseDrag(low_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - ven_min -= 10 - # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - if ven_min == ven_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(low_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Venous range minimum value cannot be moved beyond {}".format(ven_min)) - break - else: - continue - # venous blood pressure low limit should be lower than the high limit by at least 30mmHg - if ven_min == ven_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(low_handler_parent.minValue, ven_min, - "Venous range minimum value cannot be moved beyond {}".format(ven_min)) - else: - test.compare(ven_min, ven_low, - "Actual Venous range minimum value: {} is equal to Expected value: {}".format(ven_min, ven_low)) - test.endSection() - -def scroll_to_value_on_pop_up(value=None, container=None): - """ - scroll to the to the value if object is hidden - @param value - (obj) value object - @param container - (obj) Container of the value - @return boolean true and false - """ - counter = 0 - while counter <= 100: - try: - counter += 1 - squish.findObject(value) - squish.snooze(0.5) - if check_if_object_is_within_the_container(obj=value, container=container): - return True - else: - raise RuntimeError - except RuntimeError: - ScreenObj = squish.waitForObject(container) - screenHeight = pyInt(ScreenObj.height) - screenWidth = pyInt(ScreenObj.width) - squish.mouseWheel(ScreenObj, screenWidth//2, - screenHeight//2, 0, -50, squish.Qt.NoModifier) - - raise LookupError("value object is not in view to the user after " + \ - "trying 100 times") - - - -def expected_heparin_value(val): - names.o_heparin_value["text"] = val - return names.o_heparin_value - - -def msg(string): - """ - Added ### at the right side of the string to make sure that it is a message. - @param string: (str) the string to add trailing ### to - @return pad_str: (str) padded string - """ - padded_str = "###"+string - return padded_str - def convert_seconds_into_min_and_sec(seconds): - min_and_sec = time.strftime("%M:%S", time.gmtime(seconds)) - return min_and_sec + min = time.strftime("%M", time.gmtime(seconds)) + sec = time.strftime("%S", time.gmtime(seconds)) + return min,sec - -def self_test_dry_check_list_text(text): - names.o_self_test_dry_check_list_text["text"] = text - return names.o_self_test_dry_check_list_text - -def convert_seconds_into_min_and_sec(seconds): - min_and_sec = time.strftime("%M:%S", time.gmtime(seconds)) - return min_and_sec - -def get_time(screen_title): - """ - Method to return the current count down - in the application - @param screen_title - (str) current title of the screen - @return time_text - (str) count down in the application - """ - if screen_title == config.BEGIN_PRIME_TITLE or screen_title == config.PRIMING_TITLE: - parent_object = object.parent(squish.waitForObjectExists(self_test_dry_check_list_text(screen_title))) - elif screen_title == config.SYSTEM_SELF_TEST_TITLE: - parent_object = object.parent(squish.waitForObjectExists(names.o_system_self_test)) - else: - parent_object = object.parent(squish.waitForObjectExists(names.o_PreTreatmentBase_Filter_Flush_Text)) - time_parent_children = object.children(parent_object) - progress_circle_parent = time_parent_children[4] - progress_circle_parent = object.children(progress_circle_parent) - progress_circle_parent = progress_circle_parent[0] - progress_circle_parent = object.children(progress_circle_parent) - progress_circle_children = object.children(progress_circle_parent[0]) - time_text = progress_circle_children[1] - return time_text.time - -def verify_countdown(screen_title, time_out, hd_simulator, dg_simulator): - """ - Method to verify the count down - time in application - @param screen_title - (str) current title of the screen - @param time_out - (int) time out duration in secs - @Param hd_simulator - Instance of HDSimulator class - @Param dg_simulator - Instance of DGSimulator class - """ - test.startSection("Verify the count down time in application") - for count_down in range(config.COUNT_DOWN_TIME_100, config.MINIMUM_COUNTDOWN_TIME-1, -1): - if screen_title == config.BEGIN_PRIME_TITLE: - hd_simulator.cmd_send_pre_treatment_self_test_dry_progress_data(time_out, count_down) - elif screen_title == config.PRIMING_TITLE: - hd_simulator.cmd_send_pre_treatment_disposables_prime_progress_data(time_out, count_down) - elif screen_title == config.SYSTEM_SELF_TEST_TITLE: - hd_simulator.cmd_send_pre_treatment_self_test_no_cartridge_progress_data(time_out, count_down) - else: - dg_simulator.cmd_send_dg_pre_treatment_filter_flush_progress_data(time_out, count_down) - actual_time = get_time(screen_title) - expected_time = convert_seconds_into_min_and_sec(count_down) - test.compare(actual_time, expected_time, "Actual count down time: {} should be equal to expected count down time {}".format(actual_time, expected_time)) - verify_the_progress(count_down, screen_title, time_out) - test.endSection() -def verify_the_progress(count_down, screen_title, time_out): +def get_indicators(screen_obj, txt): """ - Method to verify the current progress - @param count_down - (int) current count down time - @param screen_title - (str) current title of the screen - @param time_out - (int) time out duration in secs + Verifying the busy indicators for BiCarb Pump Check and Acid Pump Check. + indicator object of expected text + @param step - (str) expected text + @return indicators - (obj) list of busy and check indicator """ - test.startSection("Verifying the current progress") - if screen_title == config.BEGIN_PRIME_TITLE or screen_title == config.PRIMING_TITLE: - current_progress = (squish.waitForObjectExists(names.o_self_test_dry_progress)).progressValue - elif screen_title == config.SYSTEM_SELF_TEST_TITLE: - current_progress = (squish.waitForObjectExists(names.o_system_self_test_progress)).progressValue - else: - current_progress = (squish.waitForObjectExists(names.o_filter_flush_progress)).progressValue - #Since progress value is equal maximum count down value - current count down value - expected_progress = time_out - count_down - test.compare(current_progress, expected_progress, "{} should be the current progress".format(expected_progress)) - test.endSection() - + parent_obj = object.parent(squish.waitForObjectExists(get_text_object(screen_obj,txt))) + children_obj = object.children(parent_obj) + indicator_parent = children_obj[2] + indicators = object.children(indicator_parent) + return indicators + squish.testSettings.objectNotFoundDebugging = True -def verify_page_step_indicator(screen_obj, pre_treatment_step): - """ - Method to verify the Page Step indicators [the object on top of the screen which indicates the steps passed, current, remained] - @param pre_treatment_step : (int) indicates the Current pre-treatment step - """ - test.startSection("verification of page step indicators") - for page in range(len(config.PRE_TREATMENT_SCREENS)): - bullet_children = object.children(squish.waitForObjectExists(get_bullet_object(screen_obj, page))) - bullet_circle_color = bullet_children[0].color.name - bullet_border_color = bullet_children[0].border.color.name - step_title = squish.waitForObjectExists(get_text_object(screen_obj, config.PRE_TREATMENT_SCREENS[page])) - #To verify the step indicators of the completed pre treatment screens - if page < pre_treatment_step: - test.verify(squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current) - test.compare(bullet_circle_color, config.COMPLETE_COLOR) - test.compare(bullet_border_color, config.COMPLETE_COLOR) - test.compare(step_title.color.name, config.ENABLED_COLOR) - #To verify the step indicators of the current pre treatment screen - elif page == pre_treatment_step: - test.verify(squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current,) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete) - test.compare(bullet_circle_color, config.CURRENT_COLOR) - test.compare(bullet_border_color, config.COMPLETE_COLOR) - test.compare(step_title.color.name, config.ENABLED_COLOR) - test.verify(step_title.font.bold) - #To verify the step indicators of the remaining pre-treatment screens - else: - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).current,) - test.verify(not squish.waitForObjectExists(get_bullet_object(screen_obj, page)).complete,) - test.compare(step_title.color.name, config.INCOMPLETE_COLOR) - test.compare(bullet_circle_color, config.CURRENT_COLOR) - test.compare(bullet_border_color, config.INCOMPLETE_COLOR) - test.endSection() - - - -def get_bullet_object(screen_obj, num): - """ - To obtain a bullet object based on occurrence provided. - @param screen_obj: provides the container on which the bullet must be present - @param num: provides the occurrence value - @returns a real name object - """ - names.o_bullet_object["container"] = screen_obj - names.o_bullet_object["occurrence"] = num + 1 - return names.o_bullet_object - - def verify_missing_object(object_to_check): """ Method to verify the given object is invisible or is not present on the screen @@ -607,147 +56,12 @@ squish.waitForObject(object_to_check,3000) test.fail("Given object should not be present initially") except LookupError as _: - test.passes("object is not present as expected") - squish.testSettings.objectNotFoundDebugging = True + test.passes("object is not present as expected") + + squish.testSettings.objectNotFoundDebugging = True -def set_arterial_ranges_min_val(art_low): - """ - Method to set the Arterial range maximum value to user expected value - @param art_low - (int) user expected value - """ - test.startSection("Set Arterial range minimum value to {}".format(art_low)) - arterial_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_min = pyInt(arterial_min.minimum) - arterial_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_max = pyInt(arterial_max.maximum) - low_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery)) - low_handler_children = object.children(low_handler_parent) - low_handler = low_handler_children[-2] - width = pyInt(low_handler.width) - 8 - height = pyInt(low_handler.height)- 10 - if arterial_min == art_low: - test.passes("Arterial range minimum is already set to {}".format(art_low)) - elif arterial_min < art_low: - while arterial_min != art_low: - squish.mouseDrag(low_handler, width, height, 1, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_min += 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(low_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - break - else: - continue - elif arterial_min > art_low: - while arterial_min != art_low: - squish.mouseDrag(low_handler, width, height, -1, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_min -= 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(low_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - break - else: - continue - # arterial blood pressure low limit should be lower than the high limit by atleast 30mmHg - if arterial_min == arterial_max - config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(low_handler_parent.minValue, arterial_min, "Arterial range minimum value cannot be moved beyond {}".format(arterial_min)) - else: - test.compare(arterial_min, art_low, "Actual Arterial range minimum value: {} is equal to Expected value: {}".format(arterial_min, art_low)) - test.endSection() - - -def set_arterial_ranges_max_val(art_high): - """ - Method to set the Arterial range maximum value to user expected value - @param art_high - (int) user expected value - """ - test.startSection("Set Arterial range maximum value to {}".format(art_high)) - arterial_max = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_max = pyInt(arterial_max.maximum) - arterial_min = squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery) - arterial_min = pyInt(arterial_min.minimum) - high_handler_parent = object.parent(squish.waitForObjectExists(names.o_PreTreatmentCreate_rangeRect_RangeRect_Artery)) - high_handler_children = object.children(high_handler_parent) - high_handler = high_handler_children[-1] - width = pyInt(high_handler.width) - 20 - height = pyInt(high_handler.height) - 25 - if arterial_max == art_high: - test.passes("Arterial range maximum is already set to {}".format(art_high)) - elif arterial_max < art_high: - while arterial_max != art_high: - squish.mouseDrag(high_handler, -1, height, width, 0, squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_max += 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, 1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - break - else: - continue - elif arterial_max > art_high: - while arterial_max != art_high: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - arterial_max -= 10 - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - squish.mouseDrag(high_handler, width, height, -1, 0, - squish.Qt.NoModifier, squish.Qt.LeftButton) - test.log("Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - break - else: - continue - # arterial blood pressure low limit should be lower than the high limit by at least 30mmHg - if arterial_max == arterial_min + config.BUFFER_LOW_AND_HIGH_LIMITS: - test.compare(high_handler_parent.maxValue, arterial_max, - "Arterial range maximum value cannot be moved beyond {}".format(arterial_max)) - else: - test.compare(arterial_max, art_high, - "Actual Arterial range maximum value: {} is equal to Expected value: {}".format(arterial_max, art_high)) - test.endSection() - -def get_text_object(screen_obj, txt): - """ - To obtain a text object based on text provided - @param screen_obj: provides the container on which the txt must be present - @returns a real name object - """ - names.o_text_object["container"] = screen_obj - names.o_text_object["text"] = txt - return names.o_text_object - -def verify_color_of_entry(entry, vital_parameter, input_field): - """ - Method to verify the color of entry - of systolic, diastolic and heart rate - @param entry: (int) user user entered value - @param vital_parameter - (str) parameter name under which user is entering value (sys/dia/heart rate) - @param input_field - (obj) object of input field - """ - test.startSection("Verify the color of {} value {}".format(vital_parameter, entry)) - input_field_color = input_field.color.name - entry = pyInt(entry) - if vital_parameter is config.SYSTOLIC_TEXT: - if (entry < config.SYSTOLIC_LOWER_LIMIT) or (entry > config.SYSTOLIC_UPPER_LIMIT): - test.compare(input_field_color, config.OUT_OF_RANGE_COLOR, "systolic value {} is out of range, systolic value should be in range of {} and {}".format(entry, config.SYSTOLIC_LOWER_LIMIT, config.SYSTOLIC_UPPER_LIMIT)) - elif (entry >= config.SYSTOLIC_LOWER_LIMIT) and (entry <= config.SYSTOLIC_UPPER_LIMIT): - test.compare(input_field_color, config.IN_RANGE_COLOR, "systolic value {} is in range of {} and {}".format(entry, config.SYSTOLIC_LOWER_LIMIT, config.SYSTOLIC_UPPER_LIMIT)) - elif vital_parameter is config.DIASTOLIC_TEXT: - if (entry < config.DIASTOLIC_LOWER_LIMIT) or (entry > config.DIASTOLIC_UPPER_LIMIT): - test.compare(input_field_color, config.OUT_OF_RANGE_COLOR, "diastolic value {} is out of range, diastolic value should be in range of {} and {}".format(entry, config.DIASTOLIC_LOWER_LIMIT, config.DIASTOLIC_UPPER_LIMIT)) - elif (entry >= config.DIASTOLIC_LOWER_LIMIT) and (entry <= config.DIASTOLIC_UPPER_LIMIT): - test.compare(input_field_color, config.IN_RANGE_COLOR, "diastolic value {} is in range of {} and {}".format(entry, config.DIASTOLIC_LOWER_LIMIT, config.DIASTOLIC_UPPER_LIMIT)) - elif vital_parameter is config.HEART_RATE_TITLE: - if (entry < config.HEART_RATE_LOWER_LIMIT) or (entry > config.HEART_RATE_UPPER_LIMIT): - test.compare(input_field_color, config.OUT_OF_RANGE_COLOR, "Heart Rate value {} is out of range, Heart Rate value should be in range of {} and {}".format(entry, config.HEART_RATE_LOWER_LIMIT, config.HEART_RATE_UPPER_LIMIT)) - elif (entry >= config.HEART_RATE_LOWER_LIMIT) and (entry <= config.HEART_RATE_UPPER_LIMIT): - test.compare(input_field_color, config.IN_RANGE_COLOR, "Heart Rate value {} is in range of {} and {}".format(entry, config.HEART_RATE_LOWER_LIMIT, config.HEART_RATE_UPPER_LIMIT)) - test.endSection() - + + def get_bullet_object(screen_obj, num): """ To obtain a bullet object based on occurrence provided. @@ -757,60 +71,6 @@ """ names.o_bullet_object["container"] = screen_obj names.o_bullet_object["occurrence"] = num + 1 - return names.o_bullet_object - -def keypad_input(key_value): - """ - Method to enter values using application UI keyboard - @param key_value: (str) User expected value - """ - if key_value is not None: - names.o_keypad_input["text"] = key_value - return names.o_keypad_input - else: - test.log("Invalid text for object.") - names.o_keypad_input["text"] = None - - -def enter_keypad_value(entry): - """ - Method to enter user desired - value using keypad - @param entry: (str) User expected value - """ - test.startSection("Entering {}".format(entry)) - entry = pyStr(entry) #type casted into string format - for value in entry: - squish.mouseClick(squish.waitForObject(keypad_input(value))) - test.endSection() - - -def erase_entered_value(input_field): - """ - Method to erase the entered value - @param input_field - (obj) object of input field - """ - test.startSection("Erasing value") - input_field= squish.waitForObject(input_field) - entered_value = str(input_field.text) - for value in range(len(entered_value)+1): - utils.waitForGUI(1) - squish.mouseClick(squish.waitForObjectExists(names.o_back_space_key)) - - test.compare(str(input_field.text), "", "Input field should be empty") - test.endSection() - -def get_indicators(screen_obj, txt): - """ - Verifying the busy indicators for BiCarb Pump Check and Acid Pump Check. - indicator object of expected text - @param step - (str) expected text - @return indicators - (obj) list of busy and check indicator - """ - parent_obj = object.parent(squish.waitForObjectExists(get_text_object(screen_obj,txt))) - children_obj = object.children(parent_obj) - indicator_parent = children_obj[2] - indicators = object.children(indicator_parent) - return indicators - squish.testSettings.objectNotFoundDebugging = True + return names.o_bullet_object + Index: shared/scripts/names.py =================================================================== diff -u -re45a07bc8b49899cb4b78457dad34889e8c1158b -rccf9a587e0dc447600f44e1520706c66d7141fab --- shared/scripts/names.py (.../names.py) (revision e45a07bc8b49899cb4b78457dad34889e8c1158b) +++ shared/scripts/names.py (.../names.py) (revision ccf9a587e0dc447600f44e1520706c66d7141fab) @@ -56,7 +56,7 @@ o_uf_close_button = {"container": o_Overlay, "id": "_image", "source": "qrc:/images/iClose", "type": "Image", "unnamed": 1, "visible": True} o_cumulative_fluid_text = {"container": o_treatmentStack_treatmentHome_TreatmentHome, "text": "Cumulative Delivered", "type": "Text", "unnamed": 1, "visible": True} -#end -treatment +#Recirculate o_text_object = {"type": "Text", "unnamed": 1, "visible": True} o_bullet_object = {"type": "StepBullet", "unnamed": 1, "visible": True} o_EndTreatmentRecirculateStack_EndTreatmentRecirculateStack = {"container": o_Gui_MainView, "objectName": "_EndTreatmentRecirculateStack", "type": "EndTreatmentRecirculateStack", "visible": True} @@ -70,5 +70,6 @@ o_EndTreatmentBase_TouchRect = {"container": o_EndTreatmentEndStack_EndTreatmentBase_EndTreatmentBase,"gradient": 0, "objectName": "_rinsebackButton", "type": "TouchRect", "unnamed": 1, "visible": True} o_EndTreatmentBase_RECONNECT_Text = {"container": o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase, "text": "RECONNECT", "type": "Text", "unnamed": 1, "visible": True} o_EndTreatmentBase_Reconnect_Text = {"container": o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase, "text": "Reconnect", "type": "Text", "unnamed": 1, "visible": True} +o_EndTreatmentBase_TimeText_minute_Text = {"container": o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase, "objectName": "_TimeText_minute", "type": "Text", "visible": True} +o_EndTreatmentBase_TimeText_hour_Text = {"container": o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase, "objectName": "_TimeText_hour", "type": "Text", "visible": True} -#o_recirculate_rejection_msg = {"container": o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase, "text": text, "type": "Text", "unnamed": 1, "visible": True} Index: tst_recirculate/test.py =================================================================== diff -u -re45a07bc8b49899cb4b78457dad34889e8c1158b -rccf9a587e0dc447600f44e1520706c66d7141fab --- tst_recirculate/test.py (.../test.py) (revision e45a07bc8b49899cb4b78457dad34889e8c1158b) +++ tst_recirculate/test.py (.../test.py) (revision ccf9a587e0dc447600f44e1520706c66d7141fab) @@ -27,6 +27,8 @@ hd_simulator = HDSimulator() SCREEN_OBJ1 = names.o_EndTreatmentRecirculateStack_EndTreatmentBase_EndTreatmentBase +count_down_value = 121 +timer_default_value = 1 num_of_instructions = 3 def verify_bullet_navigation(num, num_of_instructions, screen_obj): @@ -43,25 +45,30 @@ bullet_circle_color = bullet_children[0].color.name bullet_border_color = bullet_children[0].border.color.name if instruction <= num: -# test.compare(bullet_circle_color, config.COMPLETE_COLOR) -# test.compare(bullet_border_color,config.COMPLETE_COLOR) + test.compare(bullet_circle_color, config.COMPLETE_COLOR) + test.compare(bullet_border_color,config.COMPLETE_COLOR) test.log(str(instruction) + " Complete bullet") else: test.compare(bullet_circle_color, config.CURRENT_COLOR) test.compare(bullet_border_color,config.INCOMPLETE_COLOR) test.log(str(instruction) + " Incomplete bullet") test.endSection() - -def verification_of_recirculate_state(): + +def verification_of_recirculate_recirculate_state(): """ - Method to verify Treatment Recirculate states + Method to verify Treatment Recirculate Recirculate state screens """ - test.startSection("verifying Treatment Recirculate state screens") test.startSection("verifying Treatment Recirculate Recirculate state screens") hd_simulator.cmd_set_treatment_states_data(sub_mode = TreatmentStates.TREATMENT_RECIRC_STATE.value , uf_state = TreatmentStates.TREATMENT_START_STATE.value, saline_state = TreatmentStates.TREATMENT_START_STATE.value, heparin_state = TreatmentStates.TREATMENT_START_STATE.value,rinseback_state= TreatmentStates.TREATMENT_START_STATE.value, recirculate_state = TreatmentRecircStates.TREATMENT_RECIRC_RECIRC_STATE.value, blood_prime_state = TreatmentStates.TREATMENT_START_STATE.value,treatment_end_state = TreatmentStates.TREATMENT_START_STATE.value, treatment_stop_state = TreatmentStates.TREATMENT_START_STATE.value, dialysis_state = TreatmentStates.TREATMENT_START_STATE.value) - + test.startSection("Verifying Timer conunt down timer") + for num in range(timer_default_value,count_down_value): + hd_simulator.cmd_send_treatment_recirculate_data(timeout_total = num, timeout_count_down = num) + min,sec = utility.convert_seconds_into_min_and_sec(num) + test.compare(str(waitForObject(names.o_EndTreatmentBase_TimeText_minute_Text).text),str(sec),"Verifying seconds apeearing on UI") + test.compare(str(waitForObject(names.o_EndTreatmentBase_TimeText_hour_Text).text),str(min),"Verifying minutes apeearing on UI") + test.endSection() test.compare(str(waitForObject(names.o_recirculate_text).text),config.RECIRCULATE_TEXT, "Recirculate text must be {}".format(config.RECIRCULATE_TEXT)) test.compare(str(waitForObjectExists(names.o_EndTreatmentBase_RECONNECT_Text).text), config.RECONNECT_BUTTON_TEXT, "Reconnect button text must be {}".format(config.RECONNECT_BUTTON_TEXT)) test.verify(waitForObjectExists(names.o_EndTreatmentBase_RECONNECT_Text).enabled, "Reconnect button must be active") @@ -71,15 +78,25 @@ verify_right_instruction_in_recirculate_state(num_of_instructions) test.endSection() +def verification_of_treatment_recirculate_stopped_state(): + """ + Method to verify Treatment Recirculate stopped state screens + """ test.startSection("verifying Treatment Recirculate stopped state screens") hd_simulator.cmd_set_treatment_states_data(sub_mode = TreatmentStates.TREATMENT_RECIRC_STATE.value , uf_state = TreatmentStates.TREATMENT_START_STATE.value, saline_state = TreatmentStates.TREATMENT_START_STATE.value, heparin_state = TreatmentStates.TREATMENT_START_STATE.value, rinseback_state= TreatmentRinsebackStates.RINSEBACK_STOP_INIT_STATE.value, recirculate_state = TreatmentRecircStates.TREATMENT_RECIRC_STOPPED_STATE.value, blood_prime_state = TreatmentStates.TREATMENT_START_STATE.value,treatment_end_state = TreatmentStates.TREATMENT_START_STATE.value, treatment_stop_state = TreatmentStates.TREATMENT_START_STATE.value, dialysis_state = TreatmentStates.TREATMENT_START_STATE.value) + test.startSection("Verifying Timer conunt down timer") + for num in range(timer_default_value,count_down_value): + hd_simulator.cmd_send_treatment_recirculate_data(timeout_total = num, timeout_count_down = num) + min,sec = utility.convert_seconds_into_min_and_sec(num) + test.compare(str(waitForObject(names.o_EndTreatmentBase_TimeText_minute_Text).text),str(sec),"Verifying seconds apeearing on UI") + test.compare(str(waitForObject(names.o_EndTreatmentBase_TimeText_hour_Text).text),str(min),"Verifying minutes apeearing on UI") + test.endSection() test.compare(str(waitForObject(names.o_EndTreatmentBase_Reconnect_Text).text),config.RECONNECT_TEXT, "Reconnect text must be {}".format(config.RECONNECT_TEXT)) test.endSection() - test.endSection() def verify_right_instruction_in_recirculate_state(num_of_instructions): @@ -96,7 +113,7 @@ test.compare(str(waitForObjectExists(names.o_recirculate_text).text), config.RECIRCULATE_TEXT, "Recirculate text must be {}".format(config.RECIRCULATE_TEXT)) utility.verify_missing_object(names.o_EndTreatmentBase_rightImage_Image) test.endSection() - + def verify_left_instruction_in_recirculate_state(num_of_instructions): """ Method to verify left arrow functionality for recirculate state screens @@ -111,11 +128,14 @@ test.compare(str(waitForObjectExists(names.o_recirculate_text).text), config.RECIRCULATE_TEXT, "Recirculate text must be {}".format(config.RECIRCULATE_TEXT)) utility.verify_missing_object(names.o_EndTreatmentBase_leftImage_Image) test.endSection() + + def main(): utils.tstStart(__file__) startApplication(config.AUT_NAME) - verification_of_recirculate_state() + verification_of_recirculate_recirculate_state() + verification_of_treatment_recirculate_stopped_state() \ No newline at end of file