1+ import unittest
2+ from unittest .mock import patch , MagicMock , Mock , create_autospec
3+ from mns_service import MnsService
4+ from authentication import AppRestrictedAuth
5+ from models .errors import UnhandledResponseError
6+
7+
8+ class TestMnsService (unittest .TestCase ):
9+
10+ def setUp (self ):
11+ # Common mock setup
12+ self .authenticator = create_autospec (AppRestrictedAuth )
13+ self .authenticator .get_access_token .return_value = "mocked_token"
14+ self .mock_secret_manager = Mock ()
15+ self .mock_cache = Mock ()
16+
17+ @patch ("mns_service.requests.post" )
18+ def test_successful_subscription (self , mock_post ):
19+ # Arrange
20+ mock_response = MagicMock ()
21+ mock_response .status_code = 200
22+ mock_response .json .return_value = {"subscriptionId" : "abc123" }
23+ mock_post .return_value = mock_response
24+
25+ service = MnsService (self .authenticator )
26+
27+ # Act
28+ result = service .subscribeNotification ()
29+
30+ # Assert
31+ self .assertEqual (result , {"subscriptionId" : "abc123" })
32+ mock_post .assert_called_once ()
33+ self .authenticator .get_access_token .assert_called_once ()
34+
35+ @patch ("mns_service.requests.post" )
36+ def test_not_found_subscription (self , mock_post ):
37+ mock_response = MagicMock ()
38+ mock_response .status_code = 404
39+ mock_post .return_value = mock_response
40+
41+ service = MnsService (self .authenticator )
42+ result = service .subscribeNotification ()
43+
44+ self .assertIsNone (result )
45+
46+ @patch ("mns_service.requests.post" )
47+ def test_unhandled_error (self , mock_post ):
48+ mock_response = MagicMock ()
49+ mock_response .status_code = 500
50+ mock_response .json .return_value = {"error" : "Server error" }
51+ mock_post .return_value = mock_response
52+
53+ service = MnsService (self .authenticator )
54+
55+ with self .assertRaises (UnhandledResponseError ) as context :
56+ service .subscribeNotification ()
57+
58+ self .assertIn ("Please provide the correct resource type" , str (context .exception ))
59+
60+ if __name__ == "__main__" :
61+ unittest .main ()
0 commit comments