"""Test module for grafana formatter.""" import unittest import httpx import nio from .start import BOT_URL, FULL_ID, KEY, MATRIX_ID, MATRIX_PW, MATRIX_URL # ref https://grafana.com/docs/grafana/latest/alerting/old-alerting/notifications/#webhook EXAMPLE_GRAFANA_REQUEST = """ { "dashboardId":1, "evalMatches":[ { "value":1, "metric":"Count", "tags":{} } ], "imageUrl":"https://grafana.com/assets/img/blog/mixed_styles.png", "message":"Notification Message", "orgId":1, "panelId":2, "ruleId":1, "ruleName":"Panel Title alert", "ruleUrl":"http://localhost:3000/d/hZ7BuVbWz/test-dashboard?fullscreen\u0026edit\u0026tab=alert\u0026panelId=2\u0026orgId=1", "state":"alerting", "tags":{ "tag name":"tag value" }, "title":"[Alerting] Panel Title alert" } """ class GrafanaFormatterTest(unittest.IsolatedAsyncioTestCase): """Grafana formatter test class.""" async def test_grafana_body(self): """Send a markdown message, and check the result.""" messages = [] client = nio.AsyncClient(MATRIX_URL, MATRIX_ID) await client.login(MATRIX_PW) room = await client.room_create() self.assertEqual( httpx.post( f"{BOT_URL}/{room.room_id}", params={"formatter": "grafana", "key": KEY}, content=EXAMPLE_GRAFANA_REQUEST, ).json(), {"status": 200, "ret": "OK"}, ) sync = await client.sync() messages = await client.room_messages(room.room_id, sync.next_batch) await client.close() message = messages.chunk[0] self.assertEqual(message.sender, FULL_ID) self.assertEqual( message.body, "### [Alerting] Panel Title alert\nNotification Message\n\n* Count: 1\n", )