import unittest from slack_notifications.const import STATUS_OK, STATUS_FAILURE from unittest import mock from slack_notifications.handler import handler, SlackApiError class TestHandler(unittest.TestCase): def setUp(self): self.logger = mock.Mock() @mock.patch('slack_notifications.handler.get_secret') @mock.patch('slack.WebClient.chat_postMessage') def test_handler_success(self, mock_chat_post_message, mock_get_secret): mock_get_secret.return_value = 'secret' mock_chat_post_message.return_value = { 'ok': True, 'channel': 'GML171PQW', 'message': { 'type': 'message', 'text': 'test_message', } } data = { 'channel': 'test_channel', 'message': 'test_message' } response = { 'meta': { 'status': STATUS_OK } } actual_response = handler(lambda_context={}, logger=self.logger, log_context={}, config={}, payload=data) self.assertEqual(response, actual_response) mock_chat_post_message.assert_called_once_with(channel=data['channel'], text=data['message']) @mock.patch('slack_notifications.handler.get_secret') def test_handler_missing_data(self, mock_get_secret): mock_get_secret.return_value = 'secret' data = { 'message': 'test_message' } response = { 'meta': { 'status': STATUS_FAILURE, 'message': 'Channel or message value is missing' } } actual_response = handler(lambda_context={}, logger=self.logger, log_context={}, config={}, payload=data) self.assertEqual(response, actual_response) @mock.patch('slack_notifications.handler.get_secret') @mock.patch('slack.WebClient.chat_postMessage') def test_handler_api_error(self, mock_chat_post_message, mock_get_secret): mock_get_secret.return_value = 'secret' mock_chat_post_message.side_effect = SlackApiError(message='failed', response={}) data = { 'channel': 'test_channel', 'message': 'test_message' } response = { 'meta': { 'status': STATUS_FAILURE, 'message': 'failed\nThe server responded with: {}' } } actual_response = handler(lambda_context={}, logger=self.logger, log_context={}, config={}, payload=data) self.assertEqual(response, actual_response)