Skip to content

Commit 70fb0f6

Browse files
tests: conftest
1 parent 68d6c7d commit 70fb0f6

File tree

2 files changed

+34
-31
lines changed

2 files changed

+34
-31
lines changed

.idea/vcs.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/conftest.py

+33-31
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
import pytest
22
import logging
3+
import contextlib
34
from unittest.mock import patch, MagicMock
45

6+
# Create a simple context manager to replace span_in_context
7+
@contextlib.contextmanager
8+
def mock_span_in_context(name, kind=None, attributes=None):
9+
mock_span = MagicMock()
10+
mock_context = MagicMock()
11+
yield (mock_span, mock_context)
12+
513
@pytest.fixture(autouse=True)
6-
def mock_logger(monkeypatch):
14+
def patch_otel_for_tests(monkeypatch):
715
"""
8-
Mock the logger to prevent test failures.
16+
Completely disable and replace OpenTelemetry to prevent test failures.
17+
This is a more aggressive approach that should work even with coverage.
918
"""
1019
# Create a proper logger with a handler that won't cause errors
1120
test_logger = logging.getLogger("test-logger")
@@ -15,41 +24,34 @@ def mock_logger(monkeypatch):
1524
test_logger.addHandler(handler)
1625
test_logger.propagate = False
1726

18-
# Replace the real logger with our test logger
19-
monkeypatch.setattr("api_to_dataframe.utils.logger.logger", test_logger)
20-
monkeypatch.setattr("api_to_dataframe.models.retainer.logger", test_logger)
21-
22-
yield test_logger
23-
24-
@pytest.fixture(autouse=True)
25-
def mock_otel_wrapper():
26-
"""
27-
Mock the OpenTelemetry wrapper to prevent test failures.
28-
This is applied to all tests automatically.
29-
"""
30-
# Create mock objects for each component
31-
mock_span = MagicMock()
32-
mock_context = MagicMock()
33-
34-
# Configure the traces mock
27+
# Mock telemetry components
3528
mock_traces = MagicMock()
36-
mock_traces.span_in_context.return_value.__enter__.return_value = (mock_span, mock_context)
29+
mock_traces.span_in_context.side_effect = mock_span_in_context
3730
mock_traces.get_tracer.return_value = MagicMock()
31+
mock_traces.new_span.return_value = MagicMock()
3832

39-
# Configure the logs mock
4033
mock_logs = MagicMock()
4134
mock_logs.new_log.return_value = None
42-
mock_logs.get_logger.return_value = MagicMock()
35+
mock_logs.get_logger.return_value = test_logger
4336

44-
# Configure the metrics mock
4537
mock_metrics = MagicMock()
38+
mock_metrics.metric_increment.return_value = None
39+
mock_metrics.record_gauge.return_value = None
40+
mock_metrics.record_histogram.return_value = None
41+
42+
# Mock main telemetry object
43+
mock_telemetry = MagicMock()
44+
mock_telemetry.traces.return_value = mock_traces
45+
mock_telemetry.logs.return_value = mock_logs
46+
mock_telemetry.metrics.return_value = mock_metrics
4647

47-
# Configure the main telemetry object
48-
mock_wrapper = MagicMock()
49-
mock_wrapper.traces.return_value = mock_traces
50-
mock_wrapper.logs.return_value = mock_logs
51-
mock_wrapper.metrics.return_value = mock_metrics
48+
# Apply all patches
49+
monkeypatch.setattr("api_to_dataframe.utils.logger.telemetry", mock_telemetry)
50+
monkeypatch.setattr("api_to_dataframe.utils.logger.logger", test_logger)
51+
monkeypatch.setattr("api_to_dataframe.models.retainer.logger", test_logger)
52+
monkeypatch.setattr("api_to_dataframe.models.retainer.telemetry", mock_telemetry)
53+
monkeypatch.setattr("api_to_dataframe.controller.client_builder.telemetry", mock_telemetry)
54+
monkeypatch.setattr("api_to_dataframe.models.get_data.telemetry", mock_telemetry)
5255

53-
# Apply the patch to the wrapper_builder function
54-
with patch('otel_wrapper.deps_injector.wrapper_builder', return_value=mock_wrapper):
55-
yield mock_wrapper
56+
# Also patch the wrapper_builder function in case it's used directly
57+
monkeypatch.setattr("otel_wrapper.deps_injector.wrapper_builder", lambda app_name: mock_telemetry)

0 commit comments

Comments
 (0)