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