Index: shared/scripts/configuration/config.py =================================================================== diff -u -r568e97ea04d6b8bd977bf3533980a42b26ec951e -r67cc737eecd7b95ec6f3ab752e5185a17cf718ef --- shared/scripts/configuration/config.py (.../config.py) (revision 568e97ea04d6b8bd977bf3533980a42b26ec951e) +++ shared/scripts/configuration/config.py (.../config.py) (revision 67cc737eecd7b95ec6f3ab752e5185a17cf718ef) @@ -179,7 +179,7 @@ 151: "Inlet water conductivity too low." , 152: "Inlet water pressure too low." , 153: "HD prime completed high priority alarm.", - 154: "EEPROM operations (read, write, erase) failure", + 154: "EEPROM operations (read, write, erase) failure.", 155: "This alarm ID is available for use.", 156: "HW usage data (treatment time in HD and total consumed water in DG) failure.", 157: "This alarm ID is available for use." , @@ -364,5 +364,7 @@ 37: "REQUEST_REJECT_REASON_NO_NEW_TREATMENT_ALARM_TRIGGERED", 38: "REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED", 39: "REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED", - } + } + +UNDEFINED_ALARM_ID_MSG = "ALARM_ID_UNDEFINED" \ No newline at end of file Index: shared/scripts/names.py =================================================================== diff -u -r90872d7586fbd455104384dddf0d81a7ce7c88bc -r67cc737eecd7b95ec6f3ab752e5185a17cf718ef --- shared/scripts/names.py (.../names.py) (revision 90872d7586fbd455104384dddf0d81a7ce7c88bc) +++ shared/scripts/names.py (.../names.py) (revision 67cc737eecd7b95ec6f3ab752e5185a17cf718ef) @@ -68,6 +68,7 @@ #alarm list alarm_list_container = {"container": o_Overlay, "id": "_flickable", "type": "Flickable", "unnamed": 1, "visible": True} notification_bar_alarm_list_button = {"container": o_Gui_MainView, "id": "_alarmListImage", "source": "qrc:/images/iList", "type": "Image", "unnamed": 1, "visible": True} +minimize_button = {"container": o_Overlay, "id": "_image", "source": "qrc:/images/iChevronDown", "type": "Image", "unnamed": 1, "visible": True} maximize_button = {"container": o_Gui_MainView, "gradient": 0, "id": "_updownButton", "type": "UpDownButton", "unnamed": 1, "visible": True} alarm_list_title_text = {"container": o_Overlay, "text": "Alarm list", "type": "Text", "unnamed": 1, "visible": True} dialogue_bar_alarm_list_button = {"container": o_Overlay, "id": "_icon", "source": "qrc:/images/iList", "type": "Image", "unnamed": 1, "visible": True} Index: tst_ui_alarms_list/test.py =================================================================== diff -u -r90872d7586fbd455104384dddf0d81a7ce7c88bc -r67cc737eecd7b95ec6f3ab752e5185a17cf718ef --- tst_ui_alarms_list/test.py (.../test.py) (revision 90872d7586fbd455104384dddf0d81a7ce7c88bc) +++ tst_ui_alarms_list/test.py (.../test.py) (revision 67cc737eecd7b95ec6f3ab752e5185a17cf718ef) @@ -25,7 +25,6 @@ from dialin.protocols.CAN import DenaliCanMessenger from dialin.ui.hd_simulator_alarms import HDAlarmsSimulator from random import randint, choice, choices -from names import rejected_alarm_list_msg hd = HDSimulator() @@ -38,18 +37,18 @@ NUM_OF_MSG_ID = 289 -def maximize()-> None: +def maximize_alarm_list()-> None: """ Method to maximize the notification bar """ - mouseClick(waitForObject(names.alarm_notification_maximize_button)) + mouseClick(waitForObjectExists(names.notification_bar_alarm_list_button)) def minimize()-> None: """ Method to minimize the Alarm Dialogue bar """ - mouseClick(waitForObject(names.o_minimizeButton_UpDownButton)) + mouseClick(waitForObjectExists(names.minimize_button)) def set_only_alarm_list_btn(no_minimize): @@ -115,9 +114,9 @@ """ test.startSection("Settings Alarms") for index, alarm_id in enumerate(alarm_id_list): - test.log(f"Setting alarm priority '{ALARM_PRIORITIES[state_list[index]]}'" + - f" for Alarm ID '{alarm_id}' and its respective message " + - f"'{ALARM_ID_AND_MESSAGES[alarm_id]}'") + test.log("Setting alarm priority '{priority}'".format(priority=ALARM_PRIORITIES[state_list[index]]) + + " for Alarm ID '{alarm_id}' ".format(alarm_id=alarm_id) + + "and its respective message '{msg}'".format(msg=ALARM_ID_AND_MESSAGES[alarm_id])) alarm.cmd_activate_alarm_id(state=state_list[index], alarm=alarm_id, @@ -159,7 +158,6 @@ """ test.startSection("Verify the Messages under 'Alarm list'") if accept==ACCEPTED: - alarm_list_index = {} alarm_id_parent_list = {} for index, id in enumerate(arranged_alarm_list): @@ -172,16 +170,18 @@ names.get_alarm_msg_obj(msg=ALARM_ID_AND_MESSAGES[id])) test.log("Verifying 'Alarm ID'") alarm_id = pyInt(alarm_id.text.toUtf8().constData()) - test.compare(alarm_id, id, f"Actual 'Alarm ID': {alarm_id} " + - f"should be equal to Expected 'Alarm ID': {id}") + test.compare(alarm_id, id, + "Actual 'Alarm ID': {alarm_id} ".format(alarm_id=alarm_id) + + "should be equal to Expected 'Alarm ID': {id}".format(id=id)) test.log("Verifying 'Alarm Message'") alarm_msg = alarm_msg.text.toUtf8().constData() test.compare(alarm_msg, ALARM_ID_AND_MESSAGES[id], - f"Actual 'Alarm Message': {alarm_msg} " + + "Actual 'Alarm Message': {alarm_msg} ".format(\ + alarm_msg=alarm_msg) + "should be equal to Expected " + - f"'Alarm Message': {ALARM_ID_AND_MESSAGES[id]}") - alarm_list_index[id] = index + "'Alarm Message': {expected_msg}".format\ + (expected_msg=ALARM_ID_AND_MESSAGES[id])) test.log("Verifying the Alarm's position in 'Alarm list'") alarm_list_parent = waitForObject(names.alarm_list) @@ -190,16 +190,18 @@ for index, alarm_id in enumerate(alarm_id_parent_list): test.compare(alarm_list[index], alarm_id_parent_list[alarm_id], - f"Alarm ID: {alarm_id} is at position {index}" ) + "Alarm ID: {alarm_id} is at position {index}".format(\ + alarm_id=alarm_id, index=index) ) elif accept==REJECTED: - expected_message = f"{REJECTION_REASON[0]}\n{REJECTION_REASON[reason_id]}" + expected_message = REJECTION_REASON[0] + "\n" + REJECTION_REASON[reason_id] rejected_alarm_list_msg = waitForObject(names.rejected_alarm_list_msg) rejected_alarm_list_msg = rejected_alarm_list_msg.text.toUtf8().constData() test.compare(rejected_alarm_list_msg, expected_message, "When 'Alarm list' is not accepted " + - f"then '{expected_message}' should be displayed " + - "on 'Alarm List' pop up") + "then '{expected_message}' should be ".format(\ + expected_message=expected_message) + + "displayed on 'Alarm List' pop up") test.endSection() @@ -209,17 +211,23 @@ in a list and verify the correct alarm ID and its respective message is added to the list """ + test.startSection("Set the alarms, arrange them in a " + + "list and verify the correct Alarm ID and its " + + "respective message is added to the list") alarm_id_list = generate_alarm_ids() + utils.waitForGUI(2) set_the_alarm(alarm_id_list=alarm_id_list, state_list=generate_states(), flags=set_only_alarm_list_btn(no_minimize=1)) + utils.waitForGUI(2) arranged_alarm_list = arrange_the_alarm_list(alarm_id_list=alarm_id_list, accept=accept,reason_id=reason_id ) - snooze(2) + utils.waitForGUI(2) open_alarm_list_when_only_alarm_list_btn_is_available() - snooze(5) + utils.waitForGUI(1) verify_alarm_list(arranged_alarm_list=arranged_alarm_list, accept=accept,reason_id=reason_id ) + test.endSection() def verify_alarm_list_when_minimize_button_is_available(accept=None, reason_id=None): @@ -228,20 +236,83 @@ in a list and verify the correct alarm ID and its respective message is added to the list """ + test.startSection("Set the alarms, arrange them in a " + + "list and verify the correct Alarm ID and its " + + "respective message is added to the list") alarm_id_list = generate_alarm_ids() + utils.waitForGUI(2) set_the_alarm(alarm_id_list=alarm_id_list, - state_list=generate_states()) + state_list=generate_states(), + flags=set_only_alarm_list_btn(no_minimize=0)) + utils.waitForGUI(2) arranged_alarm_list = arrange_the_alarm_list(alarm_id_list=alarm_id_list, accept=accept,reason_id=reason_id ) - snooze(2) + utils.waitForGUI(2) minimize() - open_alarm_list_when_only_alarm_list_btn_is_available() - snooze(5) + utils.waitForGUI(5) + maximize_alarm_list() + utils.waitForGUI(1) verify_alarm_list(arranged_alarm_list=arranged_alarm_list, accept=accept,reason_id=reason_id ) + test.endSection() +def verify_alarm_msg_for_undefined_alarm_id() -> None: + """ + Method to set undefined alarm + and verify the respective message + displayed + """ + test.startSection("Set undefined alarm and verify the " + + "respective message displayed") + ALARM_IDS = [290, 300, 499] + alarm_id_parent_list = {} + for index, alarm_id in enumerate(ALARM_IDS): + test.log("Setting alarm ID {alarm_id}".format(alarm_id=alarm_id)) + + alarm.cmd_activate_alarm_id(state=2, + alarm=alarm_id, + flags=set_only_alarm_list_btn(no_minimize=1)) + alarm.cmd_send_active_list_response(accept=ACCEPTED, + reason=0, + a0=ALARM_IDS[0], a1=ALARM_IDS[1], + a2=ALARM_IDS[2]) + utils.waitForGUI(2) + open_alarm_list_when_only_alarm_list_btn_is_available() + utils.waitForGUI(1) + for id in ALARM_IDS: + alarm_id = waitForObject(names.get_alarm_id_obj(id=id)) + alarm_id_parent = object.parent(alarm_id) + alarm_id_parent_list[id] = alarm_id_parent + expected_msg = UNDEFINED_ALARM_ID_MSG + " " +"[" + str(id) + "]" + alarm_msg = waitForObject(\ + names.get_alarm_msg_obj(msg=expected_msg)) + test.log("Verifying 'Alarm ID'") + alarm_id = pyInt(alarm_id.text.toUtf8().constData()) + test.compare(alarm_id, id, "Actual 'Alarm ID': {alarm_id} ".format(alarm_id=alarm_id) + + "should be equal to Expected 'Alarm ID': " + + "{id}".format(id=id)) + + test.log("Verifying 'Alarm Message'") + alarm_msg = alarm_msg.text.toUtf8().constData() + test.compare(alarm_msg, expected_msg, + "Actual 'Alarm Message': {alarm_msg} ".format(alarm_msg=alarm_msg) + + "should be equal to Expected " + + "'Alarm Message': {expected_msg}".format(expected_msg=expected_msg)) + + test.log("Verifying the Alarm's position in 'Alarm list'") + alarm_list_parent = waitForObject(names.alarm_list) + alarm_list = object.children(alarm_list_parent) + + for index, alarm_id in enumerate(alarm_id_parent_list): + test.compare(alarm_list[index], + alarm_id_parent_list[alarm_id], + "Alarm ID: {alarm_id} is at position {index}".format(alarm_id=alarm_id, + index=index) ) + test.endSection() + + def main(): utils.tstStart(__file__) @@ -254,19 +325,23 @@ "is minimized and 'Alarm list' is opened") test.log("THEN: All the 10 Alarms is displayed in 'Alarm list' " + "in defined order") - verify_alarm_list_when_only_alarm_list_button_is_available(accept=ACCEPTED, + verify_alarm_list_when_minimize_button_is_available(accept=ACCEPTED, reason_id=0) + utils.waitForGUI(1) + test.log("GIVEN: 10 Alarms are generated") test.log("AND: Minimize button is Available") test.log("WHEN: Arranged 10 Alarms under 'Alarm list'") test.log("AND: 'Alarm list is Rejected and 'Alarm Dialogue'" + "is minimized and 'Alarm list' is opened") test.log("THEN: Only rejection message should display and " + "No Alarms should be displayed") - verify_alarm_list_when_only_alarm_list_button_is_available(accept=REJECTED, + verify_alarm_list_when_minimize_button_is_available(accept=REJECTED, reason_id=20) + utils.waitForGUI(1) + test.log("GIVEN: 10 Alarms are generated") test.log("AND: Minimize button is removed") test.log("WHEN: Arranged 10 Alarms under 'Alarm list'") @@ -276,6 +351,7 @@ "in defined order") verify_alarm_list_when_only_alarm_list_button_is_available(accept=ACCEPTED, reason_id=0) + utils.waitForGUI(1) test.log("GIVEN: 10 Alarms are generated") test.log("AND: Minimize button is removed") @@ -287,16 +363,15 @@ verify_alarm_list_when_only_alarm_list_button_is_available(accept=REJECTED, reason_id=7) - snooze(2) + utils.waitForGUI(1) + test.log("GIVEN: 3 Undefined Alarms are generated") + test.log("AND: Minimize button is Available") + test.log("WHEN: Arranged 3 Alarms under 'Alarm list'") + test.log("AND: 'Alarm list is Accepted and 'Alarm Dialogue'" + + "is minimized and 'Alarm list' is opened") + test.log("THEN: Undefined Alarm ID message is displayed along with ID") + verify_alarm_msg_for_undefined_alarm_id() - - - - - - - - - - + utils.tstDone() + \ No newline at end of file