Run backend and web with a shared configurable port, add local webhook and secret-generation helpers with tests, and document current app-auth and fixture workflows.
65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
import os
|
|
import shlex
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("configured_port", "environment_port", "argument_port", "expected_port"),
|
|
[
|
|
(None, None, None, "8000"),
|
|
("8002", None, None, "8002"),
|
|
("8123", None, None, "8123"),
|
|
("8002", "8124", None, "8124"),
|
|
("8002", "8124", "8125", "8125"),
|
|
],
|
|
)
|
|
def test_dev_uses_the_same_backend_port_for_both_servers(
|
|
tmp_path: Path,
|
|
configured_port: str | None,
|
|
environment_port: str | None,
|
|
argument_port: str | None,
|
|
expected_port: str,
|
|
):
|
|
shutil.copyfile(ROOT / "Makefile", tmp_path / "Makefile")
|
|
secret = "fixture-secret-must-not-be-exported-or-printed"
|
|
config = f"AI_PLATFORM_OPENAI_API_KEY={secret}\n"
|
|
if configured_port is not None:
|
|
config += f'BACKEND_PORT="{configured_port}"\n'
|
|
(tmp_path / ".env").write_text(config)
|
|
# Only the port lookup executes during dry-run; bypass uv project discovery in this fixture.
|
|
uv = tmp_path / "uv"
|
|
uv.write_text(f'#!/bin/sh\nshift 3\nexec {shlex.quote(sys.executable)} "$@"\n')
|
|
uv.chmod(0o700)
|
|
environment = os.environ.copy()
|
|
for name in ("BACKEND_PORT", "MAKEFLAGS", "MFLAGS", "MAKEOVERRIDES"):
|
|
environment.pop(name, None)
|
|
environment["PATH"] = f"{tmp_path}{os.pathsep}{environment['PATH']}"
|
|
if environment_port is not None:
|
|
environment["BACKEND_PORT"] = environment_port
|
|
command = ["make", "--dry-run", "dev"]
|
|
if argument_port is not None:
|
|
command.append(f"BACKEND_PORT={argument_port}")
|
|
result = subprocess.run(
|
|
command,
|
|
cwd=tmp_path,
|
|
env=environment,
|
|
text=True,
|
|
capture_output=True,
|
|
check=False,
|
|
timeout=30,
|
|
)
|
|
assert result.returncode == 0, result.stderr
|
|
assert f"--port {expected_port}" in result.stdout
|
|
assert f"BACKEND_INTERNAL_URL=http://127.0.0.1:{expected_port} bun" in result.stdout
|
|
assert "docker compose up -d --wait postgres" in result.stdout
|
|
assert "alembic" not in result.stdout
|
|
assert secret not in result.stdout + result.stderr
|
|
assert "AI_PLATFORM_OPENAI_API_KEY" not in result.stdout + result.stderr
|