"""Tests for OpenTelemetry tracing (graceful fallback).""" from fusionagi.api.otel import NoOpSpan, NoOpTracer, get_tracer, trace_span def test_noop_span(): """NoOpSpan operations should be safe no-ops.""" span = NoOpSpan() span.set_attribute("key", "value") span.set_status(None) span.record_exception(Exception("test")) span.end() def test_noop_tracer(): """NoOpTracer should return NoOpSpan.""" tracer = NoOpTracer() span = tracer.start_span("test") assert isinstance(span, NoOpSpan) def test_noop_context_manager(): """NoOpTracer context manager should work.""" tracer = NoOpTracer() with tracer.start_as_current_span("test") as span: assert isinstance(span, NoOpSpan) span.set_attribute("key", "value") def test_get_tracer_returns_tracer(): """get_tracer should return a tracer (NoOp when otel not installed).""" tracer = get_tracer() assert tracer is not None def test_trace_span_context_manager(): """trace_span should work as a context manager.""" with trace_span("test_span", attributes={"key": "value"}) as span: assert span is not None