Skip to content

Commit 327ea5b

Browse files
steventuxmrlockstar
authored andcommitted
Add unit test for Metrics class
1 parent b7d4337 commit 327ea5b

File tree

2 files changed

+70
-14
lines changed

2 files changed

+70
-14
lines changed

manage_breast_screening/notifications/services/metrics.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111

1212
class Metrics:
1313
def __init__(self, metric_name, metric_units, metric_description):
14-
logger.exception("init Metrics")
1514
self.metric_name = metric_name
1615

1716
try:
1817
exporter = AzureMonitorMetricExporter(
19-
connection_string=os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"]
18+
connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
2019
)
2120
reader = PeriodicExportingMetricReader(exporter)
2221
metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))
Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,79 @@
1-
from unittest.mock import patch
1+
from unittest.mock import MagicMock, patch
22

33
import pytest
44

55
from manage_breast_screening.notifications.services.metrics import Metrics
66

77

88
class TestMetrics:
9+
@pytest.fixture
10+
def conn_string(self):
11+
return "InstrumentationKey=00000000-0000-0000-0000-000000000000"
12+
913
@pytest.fixture(autouse=True)
10-
def setup(self, monkeypatch):
11-
monkeypatch.setenv(
12-
"APPLICATIONINSIGHTS_CONNECTION_STRING",
13-
"InstrumentationKey=00000000-0000-0000-0000-000000000000",
14+
def setup(self, monkeypatch, conn_string):
15+
monkeypatch.setenv("APPLICATIONINSIGHTS_CONNECTION_STRING", conn_string)
16+
17+
@patch(
18+
"manage_breast_screening.notifications.services.metrics.AzureMonitorMetricExporter"
19+
)
20+
@patch(
21+
"manage_breast_screening.notifications.services.metrics.PeriodicExportingMetricReader"
22+
)
23+
@patch("manage_breast_screening.notifications.services.metrics.metrics")
24+
@patch("manage_breast_screening.notifications.services.metrics.MeterProvider")
25+
def test_metrics_initialisation(
26+
self,
27+
mock_meter_provider,
28+
mock_metrics,
29+
mock_metric_reader,
30+
mock_metric_exporter,
31+
conn_string,
32+
):
33+
mock_meter = MagicMock()
34+
mock_gauge = MagicMock()
35+
mock_metrics.get_meter.return_value = mock_meter
36+
mock_meter.create_gauge.return_value = mock_gauge
37+
38+
subject = Metrics("metric-name", "metric-units", "metric-description")
39+
40+
mock_metric_exporter.assert_called_once_with(connection_string=str(conn_string))
41+
mock_metric_reader.assert_called_once_with(mock_metric_exporter.return_value)
42+
mock_meter_provider.assert_called_once_with(
43+
metric_readers=[mock_metric_reader.return_value]
44+
)
45+
mock_metrics.set_meter_provider.assert_called_once_with(
46+
mock_meter_provider.return_value
1447
)
48+
mock_metrics.get_meter.assert_called_once_with(
49+
"manage_breast_screening.notifications.services.metrics"
50+
)
51+
mock_meter.create_gauge.assert_called_once_with(
52+
"metric-name", unit="metric-units", description="metric-description"
53+
)
54+
assert subject.gauge == mock_gauge
1555

16-
@pytest.fixture
17-
def test_mock_azure_monitor_metric_exporter(self):
18-
with patch(
19-
"manage_breast_screening.notifications.services.metrics.AzureMonitorMetricExporter"
20-
) as metric:
21-
Metrics()
22-
metric.assert_called_once()
56+
@patch(
57+
"manage_breast_screening.notifications.services.metrics.AzureMonitorMetricExporter"
58+
)
59+
@patch(
60+
"manage_breast_screening.notifications.services.metrics.PeriodicExportingMetricReader"
61+
)
62+
@patch("manage_breast_screening.notifications.services.metrics.metrics")
63+
@patch("manage_breast_screening.notifications.services.metrics.MeterProvider")
64+
def test_add(
65+
self,
66+
mock_meter_provider,
67+
mock_metrics,
68+
mock_metric_reader,
69+
mock_metric_exporter,
70+
):
71+
mock_meter = MagicMock()
72+
mock_gauge = MagicMock()
73+
mock_metrics.get_meter.return_value = mock_meter
74+
mock_meter.create_gauge.return_value = mock_gauge
75+
76+
subject = Metrics("TheQ", "yards", "desc")
77+
subject.add("Yay!")
78+
79+
subject.gauge.set.assert_called_once_with("Yay!", {"queue_name": "TheQ"})

0 commit comments

Comments
 (0)