Files
mcp-nextcloud/tests/contract/conftest.py
T
Chris CoutinhoandClaude Opus 4.8 72592c3bca test: address claude-review on Pact consumer contract (#883)
- pact.yml: pin tailscale/github-action@v3 to commit SHA (3 jobs) and
  pact-ruby-standalone install.sh to v2.6.1 (2 jobs) — supply-chain hardening
- pact.yml: drop redundant `-o "addopts=..."` override (pyproject.toml already
  sets the same addopts; the override would silently mask future additions)
- test_mcp_provider_verification.py: remove dead `pytestmark` shadowed by the
  list assignment; gate the module skip on PACT_USERNAME/PACT_PASSWORD too so a
  broker-set-but-creds-missing CI skips cleanly instead of raising KeyError
- conftest.py: drop the unused `pact_dir` fixture

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 20:44:53 +02:00

43 lines
1.3 KiB
Python

"""Fixtures shared by the Pact contract tests (ADR-029).
The consumer tests build a fresh ``Pact`` per test and merge their interaction
into a single pact file under ``tests/contract/pacts/``. A session-scoped
autouse fixture wipes that directory once at the start of a run so merged pacts
never accumulate stale interactions across runs (``write_file(overwrite=False)``
merges into whatever is already on disk).
"""
import shutil
from pathlib import Path
import pytest
from pact import Pact
# Pact participant names. These MUST match the names used on the astrolabe side
# and in the broker, so keep them in sync with the astrolabe repo's pact tests.
CONSUMER = "nextcloud-mcp-server"
PROVIDER = "astrolabe"
PACT_DIR = Path(__file__).parent / "pacts"
@pytest.fixture(scope="session", autouse=True)
def _clean_pact_dir():
"""Start each session from an empty pacts directory."""
if PACT_DIR.exists():
shutil.rmtree(PACT_DIR)
PACT_DIR.mkdir(parents=True, exist_ok=True)
yield
@pytest.fixture
def consumer_pact():
"""A fresh Pact (consumer=nextcloud-mcp-server, provider=astrolabe).
The interaction added by each test is merged into the shared pact file on
teardown.
"""
pact = Pact(CONSUMER, PROVIDER).with_specification("V4")
yield pact
pact.write_file(PACT_DIR, overwrite=False)