|
1 | 1 | import unittest |
2 | 2 | import os |
3 | 3 | from unittest.mock import patch, MagicMock, Mock, create_autospec |
4 | | -from mns_service import MnsService |
| 4 | +from mns_service import MnsService, MNS_URL |
5 | 5 | from authentication import AppRestrictedAuth |
6 | | -from models.errors import ServerError, UnhandledResponseError, TokenValidationError |
| 6 | +from models.errors import ( |
| 7 | + ServerError, |
| 8 | + UnhandledResponseError, |
| 9 | + TokenValidationError, |
| 10 | + UnauthorizedError, |
| 11 | + ResourceFoundError) |
7 | 12 |
|
8 | 13 |
|
9 | 14 | SQS_ARN = "arn:aws:sqs:eu-west-2:123456789012:my-queue" |
@@ -143,6 +148,77 @@ def test_check_subscription_creates_if_not_found(self, mock_get, mock_post): |
143 | 148 | mock_get.assert_called_once() |
144 | 149 | mock_post.assert_called_once() |
145 | 150 |
|
| 151 | + @patch("mns_service.requests.delete") |
| 152 | + def test_delete_subscription_success(self, mock_delete): |
| 153 | + # Test for both 200 and 204 (use a loop) |
| 154 | + for code in (200, 204): |
| 155 | + mock_response = MagicMock() |
| 156 | + mock_response.status_code = code |
| 157 | + mock_delete.return_value = mock_response |
| 158 | + |
| 159 | + service = MnsService(self.authenticator) |
| 160 | + result = service.delete_subscription("sub-id-123") |
| 161 | + self.assertTrue(result) |
| 162 | + mock_delete.assert_called_with( |
| 163 | + f"{MNS_URL}/sub-id-123", |
| 164 | + headers=service.request_headers |
| 165 | + ) |
| 166 | + |
| 167 | + @patch("mns_service.requests.delete") |
| 168 | + def test_delete_subscription_401(self, mock_delete): |
| 169 | + mock_response = MagicMock() |
| 170 | + mock_response.status_code = 401 |
| 171 | + mock_response.json.return_value = {"error": "token"} |
| 172 | + mock_delete.return_value = mock_response |
| 173 | + |
| 174 | + service = MnsService(self.authenticator) |
| 175 | + with self.assertRaises(TokenValidationError): |
| 176 | + service.delete_subscription("sub-id-123") |
| 177 | + |
| 178 | + @patch("mns_service.requests.delete") |
| 179 | + def test_delete_subscription_403(self, mock_delete): |
| 180 | + mock_response = MagicMock() |
| 181 | + mock_response.status_code = 403 |
| 182 | + mock_response.json.return_value = {"error": "forbidden"} |
| 183 | + mock_delete.return_value = mock_response |
| 184 | + |
| 185 | + service = MnsService(self.authenticator) |
| 186 | + with self.assertRaises(UnauthorizedError): |
| 187 | + service.delete_subscription("sub-id-123") |
| 188 | + |
| 189 | + @patch("mns_service.requests.delete") |
| 190 | + def test_delete_subscription_404(self, mock_delete): |
| 191 | + mock_response = MagicMock() |
| 192 | + mock_response.status_code = 404 |
| 193 | + mock_response.json.return_value = {"error": "not found"} |
| 194 | + mock_delete.return_value = mock_response |
| 195 | + |
| 196 | + service = MnsService(self.authenticator) |
| 197 | + with self.assertRaises(ResourceFoundError): |
| 198 | + service.delete_subscription("sub-id-123") |
| 199 | + |
| 200 | + @patch("mns_service.requests.delete") |
| 201 | + def test_delete_subscription_500(self, mock_delete): |
| 202 | + mock_response = MagicMock() |
| 203 | + mock_response.status_code = 500 |
| 204 | + mock_response.json.return_value = {"error": "server"} |
| 205 | + mock_delete.return_value = mock_response |
| 206 | + |
| 207 | + service = MnsService(self.authenticator) |
| 208 | + with self.assertRaises(ServerError): |
| 209 | + service.delete_subscription("sub-id-123") |
| 210 | + |
| 211 | + @patch("mns_service.requests.delete") |
| 212 | + def test_delete_subscription_unhandled(self, mock_delete): |
| 213 | + mock_response = MagicMock() |
| 214 | + mock_response.status_code = 418 # Unhandled status code |
| 215 | + mock_response.json.return_value = {"error": "teapot"} |
| 216 | + mock_delete.return_value = mock_response |
| 217 | + |
| 218 | + service = MnsService(self.authenticator) |
| 219 | + with self.assertRaises(UnhandledResponseError): |
| 220 | + service.delete_subscription("sub-id-123") |
| 221 | + |
146 | 222 | @patch.object(MnsService, "delete_subscription") |
147 | 223 | @patch.object(MnsService, "get_subscription") |
148 | 224 | def test_check_delete_subscription_success(self, mock_get_subscription, mock_delete_subscription): |
|
0 commit comments