Skip to content

Commit 2ed76f6

Browse files
committed
VED-79: Resolve sonar issues
1 parent d49c4ad commit 2ed76f6

File tree

8 files changed

+88
-103
lines changed

8 files changed

+88
-103
lines changed

azure/templates/post-deploy.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ steps:
101101
102102
echo "Subscribing SQS to MNS for notifications..."
103103
poetry run python src/subscribe_mns.py
104-
displayName: "Run MNS Subscription"
105-
workingDirectory: "$(Pipeline.Workspace)/s/$(SERVICE_NAME)/$(SERVICE_ARTIFACT_NAME)/mns_subscription"
106-
env:
107-
SQS_ARN: "$(ID_SYNC_QUEUE_ARN)"
104+
displayName: "Run MNS Subscription"
105+
workingDirectory: "$(Pipeline.Workspace)/s/$(SERVICE_NAME)/$(SERVICE_ARTIFACT_NAME)/mns_subscription"
106+
env:
107+
SQS_ARN: "$(ID_SYNC_QUEUE_ARN)"
108108
109109
- bash: |
110110
set -ex

mns_subscription/src/mns_setup.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import logging
2+
from cache import Cache
3+
from mns_service import MnsService
4+
import boto3
5+
from authentication import AppRestrictedAuth, Service
6+
from botocore.config import Config
7+
8+
logging.basicConfig(level=logging.INFO)
9+
10+
11+
def get_mns_service(mns_env: str = "int"):
12+
boto_config = Config(region_name="eu-west-2")
13+
cache = Cache(directory="/tmp")
14+
logging.info("Creating authenticator...")
15+
authenticator = AppRestrictedAuth(
16+
service=Service.MNS,
17+
secret_manager_client=boto3.client("secretsmanager", config=boto_config),
18+
environment=mns_env,
19+
cache=cache,
20+
)
21+
22+
logging.info("Creating MNS service...")
23+
return MnsService(authenticator)
Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,14 @@
11
import logging
2-
from cache import Cache
3-
from mns_service import MnsService
4-
import boto3
5-
from authentication import AppRestrictedAuth, Service
6-
from botocore.config import Config
7-
8-
logging.basicConfig(level=logging.INFO)
2+
from mns_setup import get_mns_service
93

104

115
def run_subscription():
12-
try:
13-
mns_env: str = "int"
14-
15-
boto_config = Config(region_name="eu-west-2")
16-
cache = Cache(directory="/tmp")
17-
logging.info("Creating authenticator...")
18-
authenticator = AppRestrictedAuth(
19-
service=Service.MNS,
20-
secret_manager_client=boto3.client("secretsmanager", config=boto_config),
21-
environment=mns_env,
22-
cache=cache,
23-
)
24-
25-
logging.info("Creating MNS service...")
26-
mns = MnsService(authenticator)
27-
28-
logging.info("Subscribing to MNS...")
29-
result = mns.check_subscription()
30-
logging.info(f"Subscription Result: {result}")
31-
return result
32-
except Exception:
33-
logging.exception("Failed to complete MNS subscription process")
34-
raise
6+
mns = get_mns_service()
7+
result = mns.check_subscription()
8+
return result
359

3610

3711
if __name__ == "__main__":
12+
logging.basicConfig(level=logging.INFO)
3813
result = run_subscription()
39-
print("Subscription Result:", result)
14+
logging.info(f"Subscription Result: {result}")
Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,14 @@
11
import logging
2-
from cache import Cache
3-
from mns_service import MnsService
4-
import boto3
5-
from authentication import AppRestrictedAuth, Service
6-
from botocore.config import Config
2+
from mns_setup import get_mns_service
73

8-
logging.basicConfig(level=logging.INFO)
94

10-
11-
def run_subscription():
12-
try:
13-
mns_env: str = "int"
14-
15-
boto_config = Config(region_name="eu-west-2")
16-
cache = Cache(directory="/tmp")
17-
logging.info("Creating authenticator...")
18-
authenticator = AppRestrictedAuth(
19-
service=Service.MNS,
20-
secret_manager_client=boto3.client("secretsmanager", config=boto_config),
21-
environment=mns_env,
22-
cache=cache,
23-
)
24-
25-
logging.info("Creating MNS service...")
26-
mns = MnsService(authenticator)
27-
28-
logging.info("Deleting MNS Subscription...")
29-
result = mns.check_delete_subscription()
30-
logging.info(f"Subscription Result: {result}")
31-
return result
32-
except Exception:
33-
logging.exception("Failed to complete MNS subscription process")
34-
raise
5+
def run_unsubscribe():
6+
mns = get_mns_service()
7+
result = mns.check_delete_subscription()
8+
return result
359

3610

3711
if __name__ == "__main__":
38-
result = run_subscription()
39-
print("Subscription Result:", result)
12+
logging.basicConfig(level=logging.INFO)
13+
result = run_unsubscribe()
14+
logging.debug("Subscription Result:", result)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import unittest
2+
from unittest.mock import patch, MagicMock
3+
from mns_setup import get_mns_service
4+
5+
class TestGetMnsService(unittest.TestCase):
6+
7+
@patch("mns_setup.boto3.client")
8+
@patch("mns_setup.AppRestrictedAuth")
9+
@patch("mns_setup.MnsService")
10+
def test_get_mns_service(self, mock_mns_service, mock_app_auth, mock_boto_client):
11+
# Arrange
12+
mock_auth_instance = MagicMock()
13+
mock_app_auth.return_value = mock_auth_instance
14+
15+
mock_mns_instance = MagicMock()
16+
mock_mns_service.return_value = mock_mns_instance
17+
18+
mock_secrets_client = MagicMock()
19+
mock_boto_client.return_value = mock_secrets_client
20+
21+
# Act
22+
result = get_mns_service("int")
23+
24+
# Assert
25+
self.assertEqual(result, mock_mns_instance)
26+
mock_boto_client.assert_called_once_with("secretsmanager", config=mock_boto_client.call_args[1]['config'])
27+
mock_app_auth.assert_called_once()
28+
mock_mns_service.assert_called_once_with(mock_auth_instance)
29+
30+
if __name__ == "__main__":
31+
unittest.main()

mns_subscription/tests/test_subscription_mns.py

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,16 @@
55

66
class TestRunSubscription(unittest.TestCase):
77

8-
@patch("subscribe_mns.MnsService")
9-
@patch("subscribe_mns.AppRestrictedAuth")
10-
@patch("subscribe_mns.boto3.client")
11-
def test_run_subscription_success(self, mock_boto_client, mock_auth_class, mock_mns_service):
12-
# Arrange
13-
mock_secrets_client = MagicMock()
14-
mock_boto_client.return_value = mock_secrets_client
15-
16-
mock_auth_instance = MagicMock()
17-
mock_auth_class.return_value = mock_auth_instance
18-
8+
@patch("subscribe_mns.get_mns_service") # patch where it's imported/used!
9+
def test_run_subscription_success(self, mock_get_mns_service):
1910
mock_mns_instance = MagicMock()
20-
mock_mns_instance.check_subscription.return_value = {"subscriptionId": "abc123"}
21-
mock_mns_service.return_value = mock_mns_instance
11+
mock_mns_instance.check_subscription.return_value = "Subscription Result: abc123"
12+
mock_get_mns_service.return_value = mock_mns_instance
2213

23-
# Act
2414
result = run_subscription()
2515

26-
# Assert
27-
self.assertEqual(result, {"subscriptionId": "abc123"})
28-
mock_auth_class.assert_called_once()
16+
self.assertEqual(result, "Subscription Result: abc123")
17+
mock_get_mns_service.assert_called_once()
2918
mock_mns_instance.check_subscription.assert_called_once()
3019

3120

mns_subscription/tests/test_unsubscription_mns.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,23 @@
11
import unittest
22
from unittest.mock import patch, MagicMock
3-
from unsubscribe_mns import run_subscription
3+
from unsubscribe_mns import run_unsubscribe
44

55

6-
class TestRunSubscription(unittest.TestCase):
6+
class TestRunUnsubscribe(unittest.TestCase):
77

8-
@patch("unsubscribe_mns.MnsService")
9-
@patch("unsubscribe_mns.AppRestrictedAuth")
10-
@patch("unsubscribe_mns.boto3.client")
11-
def test_run_subscription_success(self, mock_boto_client, mock_auth_class, mock_mns_service):
8+
@patch("unsubscribe_mns.get_mns_service")
9+
def test_run_unsubscribe_success(self, mock_get_mns_service):
1210
# Arrange
13-
mock_secrets_client = MagicMock()
14-
mock_boto_client.return_value = mock_secrets_client
15-
16-
mock_auth_instance = MagicMock()
17-
mock_auth_class.return_value = mock_auth_instance
18-
1911
mock_mns_instance = MagicMock()
20-
mock_mns_instance.check_delete_subscription.return_value = {"Subscription successfully deleted"}
21-
mock_mns_service.return_value = mock_mns_instance
12+
mock_mns_instance.check_delete_subscription.return_value = "Subscription successfully deleted"
13+
mock_get_mns_service.return_value = mock_mns_instance
2214

2315
# Act
24-
result = run_subscription()
16+
result = run_unsubscribe()
2517

2618
# Assert
27-
self.assertEqual(result, {"Subscription successfully deleted"})
28-
mock_auth_class.assert_called_once()
19+
self.assertEqual(result, "Subscription successfully deleted")
20+
mock_get_mns_service.assert_called_once()
2921
mock_mns_instance.check_delete_subscription.assert_called_once()
3022

3123

sonar-project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ sonar.issue.ignore.multicriteria.exclude_hl7_urls.ruleKey=python:S5332
1313
sonar.issue.ignore.multicriteria.exclude_hl7_urls.resourceKey=**http://terminology\.hl7\.org/CodeSystem/v3-NullFlavor**
1414
sonar.issue.ignore.multicriteria=e1
1515
sonar.issue.ignore.multicriteria.e1.ruleKey=python:S5443
16-
sonar.issue.ignore.multicriteria.e1.resourceKey=**/subscribe_mns.py
16+
sonar.issue.ignore.multicriteria.e1.resourceKey=**/mns_setup.py

0 commit comments

Comments
 (0)