# -*- 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_post # @author (last) Papiya Mandal # @date (last) 27-Jan-2022 # import names import logging # from time import sleep from dialin.ui import utils # from dialin.ui import unittests from builtins import int as pyInt from configuration.config import * from configuration.utility import start_application, scroll_to_value_on_pop_up from dialin.ui.hd_simulator import HDSimulator # from dialin.ui.dg_simulator import DGSimulator 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() logging.basicConfig(filename='log_file.log',level=logging.INFO,\ datefmt='%d-%b-%y %H:%M:%S') logger = logging.getLogger("INFO") messenger = DenaliCanMessenger('can0') alarm = HDAlarmsSimulator(can_interface=messenger, logger=logger) NUM_OF_MSG_ID = 289 def maximize()-> None: """ Method to maximize the notification bar """ mouseClick(waitForObject(names.alarm_notification_maximize_button)) def minimize()-> None: """ Method to minimize the Alarm Dialogue bar """ mouseClick(waitForObject(names.o_minimizeButton_UpDownButton)) def set_only_alarm_list_btn(no_minimize): """ Method to remove the minimize and maximize button @return : flags """ flags = alarm.cmd_make_alarm_flags(no_minimize=no_minimize) return flags def open_alarm_list_when_only_alarm_list_btn_is_available(): """ Method to open 'Alarm list' when only 'Alarm list' button is available """ test.log("Opening 'Alarm list'") tapObject(waitForObjectExists(names.alarm_list_minimize_maximize_button)) alarm_list_text = waitForObject(names.alarm_list_title_text) if alarm_list_text.visible is False: tapObject(waitForObject(names.alarm_list_minimize_maximize_button)) else: test.log("Alarm List is displayed") alarm_list_title_text = alarm_list_text.text.toUtf8().constData() test.compare(alarm_list_title_text, ALARM_LIST_TITLE) def generate_alarm_ids(): """ Method to generate 10 random alarm IDs @return alarm_id_list: list of 10 random alarm IDs """ alarm_id_list = [] id_count = 0 while id_count < 10: id = randint(1, NUM_OF_MSG_ID) if id in alarm_id_list: pass else: alarm_id_list.append(id) id_count += 1 return alarm_id_list def generate_states(): """ Method to generate 10 states between HIGH, MEDIUM, LOW, NONE @return id_list: list of 10 states """ state_list = choices(list(ALARM_PRIORITIES), k=10) return state_list def set_the_alarm(alarm_id_list, state_list, flags=None): """ Method to set the alarm @param alarm_id_list: List of Alarm IDs @param state_list: List of Alarm States(HIGH/MEDIUM/LOW) @flags: (int) See 'cmd_make_alarm_flags' """ 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]}'") alarm.cmd_activate_alarm_id(state=state_list[index], alarm=alarm_id, flags=flags) test.endSection() def arrange_the_alarm_list(alarm_id_list, accept=ACCEPTED, reason_id=0): """ Method to arrange the alarm list and Accept or Reject the Alarm list @param alarm_id_list: list of activated Alarm IDs @param accept: Bool if the list is Accepted/Rejected @param reason: (int) Reason of Rejection """ arranged_alarm_list = [] count = len(alarm_id_list) for i in range(count): alarm_id = choice(alarm_id_list) arranged_alarm_list.append(alarm_id) alarm_id_list.remove(alarm_id) alarm.cmd_send_active_list_response(accept=accept, reason=reason_id, a0=arranged_alarm_list[0], a1=arranged_alarm_list[1], a2=arranged_alarm_list[2], a3=arranged_alarm_list[3], a4=arranged_alarm_list[4], a5=arranged_alarm_list[5], a6=arranged_alarm_list[6], a7=arranged_alarm_list[7], a8=arranged_alarm_list[8], a9=arranged_alarm_list[9]) return arranged_alarm_list def verify_alarm_list(arranged_alarm_list, accept=None, reason_id=0): """ Method to verify the Messages under 'Alarm list' @param arranged_alarm_list: list alarm list @param accept: bool Accepted/Rejected @param reason_id: Reason for rejecting the alarm list """ 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): scroll_to_value_on_pop_up(value=names.get_alarm_id_obj(id=id), container=names.alarm_list_container) 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 alarm_msg = waitForObject(\ 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.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} " + "should be equal to Expected " + f"'Alarm Message': {ALARM_ID_AND_MESSAGES[id]}") alarm_list_index[id] = index 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], f"Alarm ID: {alarm_id} is at position {index}" ) elif accept==REJECTED: expected_message = f"{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") test.endSection() def verify_alarm_list_when_only_alarm_list_button_is_available(accept=None, reason_id=None): """ Method to 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() set_the_alarm(alarm_id_list=alarm_id_list, state_list=generate_states(), flags=set_only_alarm_list_btn(no_minimize=1)) arranged_alarm_list = arrange_the_alarm_list(alarm_id_list=alarm_id_list, accept=accept,reason_id=reason_id ) snooze(2) open_alarm_list_when_only_alarm_list_btn_is_available() snooze(5) verify_alarm_list(arranged_alarm_list=arranged_alarm_list, accept=accept,reason_id=reason_id ) def verify_alarm_list_when_minimize_button_is_available(accept=None, reason_id=None): """ Method to 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() set_the_alarm(alarm_id_list=alarm_id_list, state_list=generate_states()) arranged_alarm_list = arrange_the_alarm_list(alarm_id_list=alarm_id_list, accept=accept,reason_id=reason_id ) snooze(2) minimize() open_alarm_list_when_only_alarm_list_btn_is_available() snooze(5) verify_alarm_list(arranged_alarm_list=arranged_alarm_list, accept=accept,reason_id=reason_id ) def main(): utils.tstStart(__file__) startApplication(AUT_NAME) 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 accepted and 'Alarm Dialogue'" + "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, reason_id=0) 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, reason_id=20) test.log("GIVEN: 10 Alarms are generated") test.log("AND: Minimize button is removed") test.log("WHEN: Arranged 10 Alarms under 'Alarm list'") test.log("AND: 'Alarm list is accepted 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, reason_id=0) test.log("GIVEN: 10 Alarms are generated") test.log("AND: Minimize button is removed") test.log("WHEN: Arranged 10 Alarms under 'Alarm list'") test.log("AND: 'Alarm list is Rejected 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, reason_id=7) snooze(2)