Skip to content

Commit 9dd9682

Browse files
committed
VED-79: fix tests issues
1 parent 85eac82 commit 9dd9682

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed

mns_subscription/src/mns_service.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ def get_subscription(self) -> dict | None:
7878
bundle = response.json()
7979
# Assume a FHIR Bundle with 'entry' list
8080
for entry in bundle.get("entry", []):
81-
resource = entry.get("channel", {})
81+
resource = entry.get("resource", entry)
82+
print(f"get resource sub: {resource}")
83+
logging.debug(f"get resource sub: {resource}")
8284
channel = resource.get("channel", {})
8385
if channel.get("endpoint") == SQS_ARN:
8486
return resource # Found a matching subscription

mns_subscription/tests/test_mns_service.py

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
import unittest
2+
import os
23
from unittest.mock import patch, MagicMock, Mock, create_autospec
34
from mns_service import MnsService
45
from authentication import AppRestrictedAuth
5-
from models.errors import ServerError, UnhandledResponseError
6+
from models.errors import ServerError, UnhandledResponseError, TokenValidationError
67

78

9+
SQS_ARN = "arn:aws:sqs:eu-west-2:123456789012:my-queue"
10+
11+
@patch("mns_service.SQS_ARN", SQS_ARN)
812
class TestMnsService(unittest.TestCase):
913
def setUp(self):
1014
# Common mock setup
1115
self.authenticator = create_autospec(AppRestrictedAuth)
1216
self.authenticator.get_access_token.return_value = "mocked_token"
1317
self.mock_secret_manager = Mock()
1418
self.mock_cache = Mock()
19+
self.sqs = SQS_ARN
1520

1621
@patch("mns_service.requests.post")
1722
@patch("mns_service.requests.get")
@@ -67,6 +72,76 @@ def test_unhandled_error(self, mock_post):
6772

6873
self.assertIn("Internal Server Error", str(context.exception))
6974

75+
@patch.dict(os.environ, {"SQS_ARN": "arn:aws:sqs:eu-west-2:123456789012:my-queue"})
76+
@patch("mns_service.requests.get")
77+
def test_get_subscription_success(self, mock_get):
78+
"""Should return the resource dict when a matching subscription exists."""
79+
# Arrange a bundle with a matching entry
80+
mock_response = MagicMock()
81+
mock_response.status_code = 200
82+
mock_response.json.return_value = {
83+
"entry": [
84+
{
85+
"channel": {"endpoint": SQS_ARN},
86+
"id": "123"
87+
}
88+
]
89+
}
90+
mock_get.return_value = mock_response
91+
92+
service = MnsService(self.authenticator)
93+
result2 = service.get_subscription()
94+
self.assertIsNotNone(result2)
95+
self.assertEqual(result2["channel"]["endpoint"], SQS_ARN)
96+
97+
@patch("mns_service.requests.get")
98+
def test_get_subscription_no_match(self, mock_get):
99+
"""Should return None when no subscription matches."""
100+
mock_response = MagicMock()
101+
mock_response.status_code = 200
102+
mock_response.json.return_value = {"entry": []} # No matches
103+
mock_get.return_value = mock_response
104+
105+
service = MnsService(self.authenticator)
106+
result = service.get_subscription()
107+
self.assertIsNone(result)
108+
109+
@patch("mns_service.requests.get")
110+
def test_get_subscription_401(self, mock_get):
111+
"""Should raise TokenValidationError for 401."""
112+
mock_response = MagicMock()
113+
mock_response.status_code = 401
114+
mock_response.json.return_value = {"fault": {"faultstring": "Invalid Access Token"}}
115+
mock_get.return_value = mock_response
116+
117+
service = MnsService(self.authenticator)
118+
with self.assertRaises(TokenValidationError):
119+
service.get_subscription()
120+
121+
# Similarly, you can add tests for 400, 403, 500, etc.
122+
123+
@patch("mns_service.requests.post")
124+
@patch("mns_service.requests.get")
125+
def test_check_subscription_creates_if_not_found(self, mock_get, mock_post):
126+
"""If GET finds nothing, POST is called and returned."""
127+
# Arrange GET returns no match
128+
mock_get_response = MagicMock()
129+
mock_get_response.status_code = 200
130+
mock_get_response.json.return_value = {"entry": []}
131+
mock_get.return_value = mock_get_response
132+
133+
# Arrange POST returns a new subscription
134+
mock_post_response = MagicMock()
135+
mock_post_response.status_code = 201
136+
mock_post_response.json.return_value = {"subscriptionId": "abc123"}
137+
mock_post.return_value = mock_post_response
138+
139+
service = MnsService(self.authenticator)
140+
result = service.check_subscription()
141+
self.assertEqual(result, {"subscriptionId": "abc123"})
142+
mock_get.assert_called_once()
143+
mock_post.assert_called_once()
144+
70145

71146
if __name__ == "__main__":
72147
unittest.main()

0 commit comments

Comments
 (0)