1
+ import unittest .mock
2
+
3
+
4
+ class TestUsageTelemetry :
5
+ """Test cases for the UsageTelemetry class."""
6
+
7
+ def test_log_usage_once_logs_message_on_first_call (self , capsys ):
8
+ """Test that log_usage_once logs the telemetry message."""
9
+ # Reset any previous state by creating a fresh import
10
+ import importlib
11
+ from azure .durable_functions .openai_agents import usage_telemetry
12
+ importlib .reload (usage_telemetry )
13
+ UsageTelemetryFresh = usage_telemetry .UsageTelemetry
14
+
15
+ def mock_version (package_name ):
16
+ if package_name == "azure-functions-durable" :
17
+ return "1.3.4"
18
+ elif package_name == "openai" :
19
+ return "1.98.0"
20
+ elif package_name == "openai-agents" :
21
+ return "0.2.5"
22
+ return "unknown"
23
+
24
+ with unittest .mock .patch ('importlib.metadata.version' , side_effect = mock_version ):
25
+ UsageTelemetryFresh .log_usage_once ()
26
+
27
+ captured = capsys .readouterr ()
28
+ assert captured .out .startswith ("LanguageWorkerConsoleLog" )
29
+ assert "Detected OpenAI Agents SDK integration with Durable Functions." in captured .out
30
+ assert "azure-functions-durable=1.3.4" in captured .out
31
+ assert "openai=1.98.0" in captured .out
32
+ assert "openai-agents=0.2.5" in captured .out
33
+
34
+ def test_log_usage_handles_package_version_errors (self , capsys ):
35
+ """Test that log_usage_once handles package version lookup errors gracefully."""
36
+ # Reset any previous state by creating a fresh import
37
+ import importlib
38
+ from azure .durable_functions .openai_agents import usage_telemetry
39
+ importlib .reload (usage_telemetry )
40
+ UsageTelemetryFresh = usage_telemetry .UsageTelemetry
41
+
42
+ # Test with mixed success/failure scenario: some packages work, others fail
43
+ def mock_version (package_name ):
44
+ if package_name == "azure-functions-durable" :
45
+ return "1.3.4"
46
+ elif package_name == "openai" :
47
+ raise Exception ("Package not found" )
48
+ elif package_name == "openai-agents" :
49
+ return "0.2.5"
50
+ return "unknown"
51
+
52
+ with unittest .mock .patch ('importlib.metadata.version' , side_effect = mock_version ):
53
+ UsageTelemetryFresh .log_usage_once ()
54
+
55
+ captured = capsys .readouterr ()
56
+ assert captured .out .startswith ("LanguageWorkerConsoleLog" )
57
+ assert "Detected OpenAI Agents SDK integration with Durable Functions." in captured .out
58
+ # Should handle errors gracefully: successful packages show versions, failed ones show "(not installed)"
59
+ assert "azure-functions-durable=1.3.4" in captured .out
60
+ assert "openai=(not installed)" in captured .out
61
+ assert "openai-agents=0.2.5" in captured .out
62
+
63
+ def test_log_usage_works_with_real_packages (self , capsys ):
64
+ """Test that log_usage_once works with real package versions."""
65
+ # Reset any previous state by creating a fresh import
66
+ import importlib
67
+ from azure .durable_functions .openai_agents import usage_telemetry
68
+ importlib .reload (usage_telemetry )
69
+ UsageTelemetryFresh = usage_telemetry .UsageTelemetry
70
+
71
+ # Test without mocking to see the real behavior
72
+ UsageTelemetryFresh .log_usage_once ()
73
+
74
+ captured = capsys .readouterr ()
75
+ assert captured .out .startswith ("LanguageWorkerConsoleLog" )
76
+ assert "Detected OpenAI Agents SDK integration with Durable Functions." in captured .out
77
+ # Should contain some version information or (unavailable)
78
+ assert ("azure-functions-durable=" in captured .out or "(unavailable)" in captured .out )
79
+
80
+ def test_log_usage_once_is_idempotent (self , capsys ):
81
+ """Test that multiple calls to log_usage_once only log once."""
82
+ # Reset any previous state by creating a fresh import
83
+ import importlib
84
+ from azure .durable_functions .openai_agents import usage_telemetry
85
+ importlib .reload (usage_telemetry )
86
+ UsageTelemetryFresh = usage_telemetry .UsageTelemetry
87
+
88
+ with unittest .mock .patch ('importlib.metadata.version' , return_value = "1.0.0" ):
89
+ # Call multiple times
90
+ UsageTelemetryFresh .log_usage_once ()
91
+ UsageTelemetryFresh .log_usage_once ()
92
+ UsageTelemetryFresh .log_usage_once ()
93
+
94
+ captured = capsys .readouterr ()
95
+ # Should only see one log message despite multiple calls
96
+ log_count = captured .out .count ("LanguageWorkerConsoleLogDetected OpenAI Agents SDK integration" )
97
+ assert log_count == 1
0 commit comments