|
18 | 18 | from __future__ import annotations |
19 | 19 |
|
20 | 20 | from unittest import mock |
| 21 | +from unittest.mock import patch |
21 | 22 |
|
| 23 | +import httpx |
| 24 | +import pagerduty |
22 | 25 | import pytest |
23 | 26 | from aioresponses import aioresponses |
| 27 | +from pagerduty import EventsApiV2Client |
24 | 28 |
|
25 | 29 | from airflow.models import Connection |
26 | 30 | from airflow.providers.pagerduty.hooks.pagerduty_events import ( |
@@ -82,26 +86,55 @@ def test_token_parameter_override(self, events_connections): |
82 | 86 | hook = PagerdutyEventsHook(integration_key="override_key", pagerduty_events_conn_id=DEFAULT_CONN_ID) |
83 | 87 | assert hook.integration_key == "override_key", "token initialised." |
84 | 88 |
|
85 | | - def test_create_change_event(self, requests_mock, events_connections): |
| 89 | + @patch.object(pagerduty.EventsApiV2Client, "request") |
| 90 | + def test_create_change_event(self, mock_request, events_connections): |
| 91 | + """Test that create_change_event sends a valid change event and returns None""" |
| 92 | + |
86 | 93 | hook = PagerdutyEventsHook(pagerduty_events_conn_id=DEFAULT_CONN_ID) |
| 94 | + |
87 | 95 | mock_response_body = { |
88 | 96 | "message": "Change event processed", |
89 | 97 | "status": "success", |
90 | 98 | } |
91 | | - requests_mock.post("https://events.pagerduty.com/v2/change/enqueue", json=mock_response_body) |
| 99 | + mock_response = httpx.Response( |
| 100 | + status_code=202, |
| 101 | + json=mock_response_body, |
| 102 | + request=httpx.Request("POST", "https://events.pagerduty.com/v2/change/enqueue"), |
| 103 | + ) |
| 104 | + |
| 105 | + mock_response.ok = True |
| 106 | + mock_request.return_value = mock_response |
92 | 107 | resp = hook.create_change_event(summary="test", source="airflow") |
| 108 | + mock_request.assert_called_once() |
93 | 109 | assert resp is None, "No response expected for change event" |
94 | 110 |
|
95 | | - def test_send_event(self, requests_mock, events_connections): |
| 111 | + @patch.object(EventsApiV2Client, "request") |
| 112 | + def test_send_event_success(self, mock_request, events_connections): |
| 113 | + """Test that send_event returns dedup_key on success""" |
96 | 114 | hook = PagerdutyEventsHook(pagerduty_events_conn_id=DEFAULT_CONN_ID) |
97 | 115 | dedup_key = "samplekeyhere" |
| 116 | + |
98 | 117 | mock_response_body = { |
99 | 118 | "status": "success", |
100 | 119 | "message": "Event processed", |
101 | 120 | "dedup_key": dedup_key, |
102 | 121 | } |
103 | | - requests_mock.post("https://events.pagerduty.com/v2/enqueue", json=mock_response_body) |
104 | | - resp = hook.send_event(summary="test", source="airflow_test", severity="error", dedup_key=dedup_key) |
| 122 | + mock_response = httpx.Response( |
| 123 | + status_code=202, |
| 124 | + json=mock_response_body, |
| 125 | + request=httpx.Request("POST", "https://events.pagerduty.com/v2/enqueue"), |
| 126 | + ) |
| 127 | + mock_response.ok = True |
| 128 | + mock_request.return_value = mock_response |
| 129 | + |
| 130 | + resp = hook.send_event( |
| 131 | + summary="test", |
| 132 | + source="airflow_test", |
| 133 | + severity="error", |
| 134 | + dedup_key=dedup_key, |
| 135 | + ) |
| 136 | + |
| 137 | + mock_request.assert_called_once() |
105 | 138 | assert resp == dedup_key |
106 | 139 |
|
107 | 140 |
|
|
0 commit comments