Skip to content

Commit 6421aa6

Browse files
committed
VED-79: add to coveragee
1 parent bf891fd commit 6421aa6

File tree

2 files changed

+81
-5
lines changed

2 files changed

+81
-5
lines changed

mns_subscription/models/errors.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ def to_operation_outcome() -> dict:
8181
class ResourceFoundError(RuntimeError):
8282
"""Return this error when the requested resource does not exist or not complete"""
8383

84-
resource_type: str
85-
resource_id: str
84+
response: None
85+
message: str
8686

8787
def __str__(self):
88-
return f"{self.resource_type} resource does exist. ID: {self.resource_id}"
88+
return f"{self.message}\n{self.response}"
8989

9090
def to_operation_outcome(self) -> dict:
9191
return create_operation_outcome(

mns_subscription/tests/test_mns_service.py

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import unittest
22
import os
33
from unittest.mock import patch, MagicMock, Mock, create_autospec
4-
from mns_service import MnsService
4+
from mns_service import MnsService, MNS_URL
55
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)
712

813

914
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):
143148
mock_get.assert_called_once()
144149
mock_post.assert_called_once()
145150

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+
146222
@patch.object(MnsService, "delete_subscription")
147223
@patch.object(MnsService, "get_subscription")
148224
def test_check_delete_subscription_success(self, mock_get_subscription, mock_delete_subscription):

0 commit comments

Comments
 (0)