arcade-mcp/libs/tests/conftest.py
Eric Gustin 4a737b9710
Improve .env discovery (#737)
Resolves TOO-201

Documentation PR for this is here:
https://github.com/ArcadeAI/docs/pull/626


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes how environment variables/secrets are discovered and loaded,
which can subtly alter runtime behavior depending on directory structure
and existing env vars; bounded traversal and added tests reduce but
don’t eliminate this risk.
> 
> **Overview**
> **Improves `.env` discovery across the MCP server and CLI.** Adds
`find_env_file()` (bounded by the nearest `pyproject.toml` by default)
and switches settings loading, `arcade deploy`, `arcade configure` stdio
env injection, and provider API-key resolution to use it.
> 
> Updates dev reload to also watch the discovered `.env` even when it
lives outside the current working directory, adjusts `deploy --secrets
all` to only run when a `.env` was found, and moves the minimal
scaffold’s `.env.example` to the project root with updated
tests/integration checks. Version bumps align examples and top-level
deps with `arcade-mcp-server` `1.17.4` and `arcade-mcp` `1.11.2`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
40cff1738c14674ce01f09fd325ece9c874cd072. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 23:20:28 -08:00

63 lines
1.7 KiB
Python

"""Global test configuration for all tests.
This conftest.py is at the root of the tests directory and applies to all test modules.
"""
import os
import pytest
# Check if eval dependencies are available
try:
import anthropic # noqa: F401
import openai # noqa: F401
EVALS_DEPS_AVAILABLE = True
except ImportError:
EVALS_DEPS_AVAILABLE = False
def pytest_configure(config):
"""Register custom markers."""
config.addinivalue_line(
"markers", "evals: marks tests that require eval dependencies (openai, anthropic, mcp)"
)
def pytest_collection_modifyitems(config, items):
"""Auto-skip evals tests if dependencies not available.
Tests are detected as evals tests if they have the @pytest.mark.evals marker.
"""
skip_evals = pytest.mark.skip(
reason="Evals dependencies not installed. Install with: uv tool install 'arcade-mcp[evals]'"
)
for item in items:
# Check if test has the @pytest.mark.evals marker
if item.get_closest_marker("evals") and not EVALS_DEPS_AVAILABLE:
item.add_marker(skip_evals)
@pytest.fixture(autouse=True)
def isolate_environment():
"""Isolate environment variables for each test.
This fixture captures the entire environment before a test and restores it
after. This ensures that environment variables set by load_dotenv() or any
other mechanism during tests don't leak into subsequent tests.
This also disables CLI usage tracking to prevent test runs from sending
analytics events to PostHog.
"""
original_env = os.environ.copy()
# Disable tracking
os.environ["ARCADE_USAGE_TRACKING"] = "0"
yield
# Restore the original environment
os.environ.clear()
os.environ.update(original_env)