from zerver.lib.send_email import FromAddress from zerver.lib.test_classes import WebhookTestCase from zerver.models import Recipient from zerver.webhooks.uptimerobot.view import MISCONFIGURED_PAYLOAD_ERROR_MESSAGE class UptimeRobotHookTests(WebhookTestCase): STREAM_NAME = "uptimerobot" URL_TEMPLATE = "/api/v1/external/uptimerobot?stream={stream}&api_key={api_key}" WEBHOOK_DIR_NAME = "uptimerobot" def test_uptimerobot_monitor_down(self) -> None: """ Tests if uptimerobot monitor down is handled correctly """ expected_topic = "Web Server" expected_message = "Web Server (server1.example.com) is DOWN (Host Is Unreachable)." self.check_webhook("uptimerobot_monitor_down", expected_topic, expected_message) def test_uptimerobot_monitor_up(self) -> None: """ Tests if uptimerobot monitor up is handled correctly """ expected_topic = "Mail Server" expected_message = """ Mail Server (server2.example.com) is back UP (Host Is Reachable). It was down for 44 minutes and 37 seconds. """.strip() self.check_webhook("uptimerobot_monitor_up", expected_topic, expected_message) def test_uptimerobot_invalid_payload_with_missing_data(self) -> None: """ Tests if invalid UptimeRobot payloads are handled correctly """ self.url = self.build_webhook_url() payload = self.get_body("uptimerobot_invalid_payload_with_missing_data") result = self.client_post(self.url, payload, content_type="application/json") self.assert_json_error(result, "Invalid payload") expected_message = MISCONFIGURED_PAYLOAD_ERROR_MESSAGE.format( bot_name=self.test_user.full_name, support_email=FromAddress.SUPPORT, ).strip() msg = self.get_last_message() self.assertEqual(msg.content, expected_message) self.assertEqual(msg.recipient.type, Recipient.PERSONAL)