3eff8d1cb3
Co-authored-by: Jason Walker <913443@dadeschools.net> Co-committed-by: Jason Walker <913443@dadeschools.net>
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
"""Fixtures for the opt-in Docker/local Gitea integration suite (#66).
|
|
|
|
Everything here is inert unless GITEA_INTEGRATION=1 — the test modules carry
|
|
a module-level skipif, so a default ``pytest tests/ -q`` run never touches the
|
|
network and never needs Docker.
|
|
|
|
Required environment (see tests/integration/README.md):
|
|
- GITEA_INTEGRATION=1 opt-in switch
|
|
- GITEA_INTEGRATION_URL base URL (default http://localhost:3003)
|
|
- GITEA_INTEGRATION_TOKEN API token for the *local test* instance
|
|
|
|
The token is a throwaway credential for the disposable container. It is never
|
|
printed, logged, or asserted on. Production credentials must never be used.
|
|
"""
|
|
import os
|
|
import sys
|
|
import uuid
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent))
|
|
|
|
from gitea_auth import api_request # noqa: E402
|
|
|
|
ENABLED = os.environ.get("GITEA_INTEGRATION") == "1"
|
|
|
|
|
|
def _base_url():
|
|
return os.environ.get("GITEA_INTEGRATION_URL", "http://localhost:3003").rstrip("/")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def gitea():
|
|
"""Session facts: base URL, auth header string, authenticated login."""
|
|
token = os.environ.get("GITEA_INTEGRATION_TOKEN")
|
|
if not token:
|
|
pytest.fail(
|
|
"GITEA_INTEGRATION=1 but GITEA_INTEGRATION_TOKEN is unset; "
|
|
"run tests/integration/gitea-integration token"
|
|
)
|
|
base = _base_url()
|
|
auth = f"token {token}"
|
|
me = api_request("GET", f"{base}/api/v1/user", auth)
|
|
return {"base": base, "auth": auth, "login": me["login"]}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def seed_repo(gitea):
|
|
"""Create a disposable, uniquely-named repo; delete it on teardown."""
|
|
name = f"inttest-{uuid.uuid4().hex[:8]}"
|
|
repo = api_request(
|
|
"POST", f"{gitea['base']}/api/v1/user/repos", gitea["auth"],
|
|
payload={"name": name, "auto_init": True,
|
|
"description": "gitea-tools #66 integration seed (disposable)"},
|
|
)
|
|
owner = repo["owner"]["login"]
|
|
yield {"owner": owner, "name": name,
|
|
"api": f"{gitea['base']}/api/v1/repos/{owner}/{name}"}
|
|
# Teardown: best-effort delete; a leaked repo is visible and disposable.
|
|
try:
|
|
api_request("DELETE", f"{gitea['base']}/api/v1/repos/{owner}/{name}",
|
|
gitea["auth"])
|
|
except RuntimeError:
|
|
pass
|