oncall-engine/engine/apps/telegram/tests/test_button_update_handler.py

71 lines
3.1 KiB
Python
Raw Permalink Normal View History

from unittest.mock import MagicMock, patch
import pytest
from apps.telegram.renderers.keyboard import Action
from apps.telegram.updates.update_handlers.button_press import ButtonPressHandler
@patch(
"apps.telegram.updates.update_handlers.button_press.ButtonPressHandler._get_alert_group_from_message",
return_value=None,
)
@pytest.mark.django_db
def test_get_action_context(
mocked_get_alert_group_from_message,
make_organization_and_user_with_slack_identities,
make_alert_receive_channel,
make_alert_group,
):
"""
Test to ensure that both legacy action_name and action_code format is supported.
"""
organization, _, _, _ = make_organization_and_user_with_slack_identities()
alert_receive_channel = make_alert_receive_channel(
organization,
)
alert_group = make_alert_group(alert_receive_channel)
handler = ButtonPressHandler(MagicMock())
ack_data_with_action_name = f"{alert_group.id}:acknowledge:oncall-uuid{organization.uuid}"
ack_data_with_action_code = f"{alert_group.id}:0:oncall-uuid{organization.uuid}"
unack_data_with_action_name = f"{alert_group.id}:unacknowledge:oncall-uuid{organization.uuid}"
unack_data_with_action_code = f"{alert_group.id}:1:oncall-uuid{organization.uuid}"
resolve_data_with_action_name = f"{alert_group.id}:resolve:oncall-uuid{organization.uuid}"
resolve_data_with_action_code = f"{alert_group.id}:2:oncall-uuid{organization.uuid}"
unresolve_data_with_action_name = f"{alert_group.id}:unresolve:oncall-uuid{organization.uuid}"
unresolve_data_with_action_code = f"{alert_group.id}:3:oncall-uuid{organization.uuid}"
silence_data_with_action_name = f"{alert_group.id}:silence:3600:oncall-uuid{organization.uuid}"
silence_data_with_action_code = f"{alert_group.id}:4:3600:oncall-uuid{organization.uuid}"
unsilence_data_with_action_name = f"{alert_group.id}:unsilence:oncall-uuid{organization.uuid}"
unsilence_data_with_action_code = f"{alert_group.id}:5:oncall-uuid{organization.uuid}"
ACTION_TO_DATA_STR = {
Action.ACKNOWLEDGE: [ack_data_with_action_name, ack_data_with_action_code],
Action.UNACKNOWLEDGE: [unack_data_with_action_name, unack_data_with_action_code],
Action.RESOLVE: [resolve_data_with_action_name, resolve_data_with_action_code],
Action.UNRESOLVE: [unresolve_data_with_action_name, unresolve_data_with_action_code],
Action.SILENCE: [silence_data_with_action_name, silence_data_with_action_code],
Action.UNSILENCE: [unsilence_data_with_action_name, unsilence_data_with_action_code],
}
for action, data_strings in ACTION_TO_DATA_STR.items():
for data_str in data_strings:
action_context = handler._get_action_context(data_str)
assert action_context.action.value == action.value
# not existing alert group
data_strings = [
f"1234:acknowledge:oncall-uuid{organization.uuid}",
f"1234:5:oncall-uuid{organization.uuid}",
]
for data_str in data_strings:
action_context = handler._get_action_context(data_str)
assert action_context is None