feat: consolidate legacy workflows into gyxx-flow
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def _run_relocated(
|
||||
relocated: Path, data_root: Path, *args: str
|
||||
) -> subprocess.CompletedProcess[str]:
|
||||
env = os.environ.copy()
|
||||
for name in tuple(env):
|
||||
if name.startswith("GYXX_LEGACY_"):
|
||||
env.pop(name)
|
||||
env["PYTHONPATH"] = str(relocated / "src")
|
||||
env["GYXX_DATA_ROOT"] = str(data_root)
|
||||
return subprocess.run(
|
||||
[sys.executable, "-m", "gyxx_flow", *args],
|
||||
cwd=relocated,
|
||||
env=env,
|
||||
text=True,
|
||||
encoding="utf-8",
|
||||
capture_output=True,
|
||||
check=False,
|
||||
timeout=60,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def relocated_project(tmp_path: Path) -> Path:
|
||||
relocated = tmp_path / "moved-gyxx-flow"
|
||||
shutil.copytree(PROJECT_ROOT / "src", relocated / "src")
|
||||
shutil.copytree(PROJECT_ROOT / "config", relocated / "config")
|
||||
return relocated
|
||||
|
||||
|
||||
def test_catalog_and_scripts_work_after_project_and_data_roots_move(
|
||||
relocated_project: Path, tmp_path: Path
|
||||
) -> None:
|
||||
data_root = tmp_path / "independent-data"
|
||||
|
||||
workflows = _run_relocated(relocated_project, data_root, "list", "--json")
|
||||
scripts = _run_relocated(
|
||||
relocated_project, data_root, "scripts", "list", "--json"
|
||||
)
|
||||
|
||||
assert workflows.returncode == 0, workflows.stderr
|
||||
assert scripts.returncode == 0, scripts.stderr
|
||||
assert len(json.loads(workflows.stdout)) == 29
|
||||
assert len(json.loads(scripts.stdout)) >= 100
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"workflow_id",
|
||||
(
|
||||
"content.metrics.daily",
|
||||
"product.daily",
|
||||
"shop.metrics.weekly",
|
||||
"supply.purchase_confirmation.daily",
|
||||
),
|
||||
)
|
||||
def test_each_relocated_module_dry_runs_without_old_projects(
|
||||
relocated_project: Path, tmp_path: Path, workflow_id: str
|
||||
) -> None:
|
||||
result = _run_relocated(
|
||||
relocated_project,
|
||||
tmp_path / "independent-data",
|
||||
"run",
|
||||
workflow_id,
|
||||
"--date",
|
||||
"2026-07-27",
|
||||
)
|
||||
|
||||
assert result.returncode == 0, result.stderr
|
||||
Reference in New Issue
Block a user