112 lines
3.9 KiB
Python
112 lines
3.9 KiB
Python
"""
|
||
Pytest fixtures for the Schaeffler Automat backend test suite.
|
||
|
||
The tests in this suite are divided into:
|
||
- Unit tests (no DB / network required): excel_parser, models, schemas
|
||
- Integration tests (require running Postgres + Redis): API endpoints, tasks
|
||
|
||
Unit tests run offline; integration tests are gated by the 'integration'
|
||
pytest mark so they can be skipped in CI without infrastructure.
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import os
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
import pytest
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Make sure the backend package is importable when tests are run from the
|
||
# repo root or from the backend/ directory.
|
||
# ---------------------------------------------------------------------------
|
||
BACKEND_DIR = Path(__file__).resolve().parent.parent # …/backend
|
||
if str(BACKEND_DIR) not in sys.path:
|
||
sys.path.insert(0, str(BACKEND_DIR))
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Paths
|
||
# ---------------------------------------------------------------------------
|
||
EXCEL_DIR = Path(__file__).resolve().parent.parent.parent / "Excel-Order-Lists"
|
||
|
||
EXCEL_FILES: dict[str, Path] = {
|
||
"TRB": EXCEL_DIR / "TRB_Testscope_20260128.xlsx",
|
||
"Kugellager": EXCEL_DIR / "Kugellager_Testscope_20260128.xlsx",
|
||
"CRB": EXCEL_DIR / "CRB_Testscope_20260128.xlsx",
|
||
"Gleitlager": EXCEL_DIR / "Gleitlager_Testscope_20260128.xlsx",
|
||
"SRB_TORB": EXCEL_DIR / "SRB_TORB_Testscope_20260128.xlsx",
|
||
"Linear_schiene": EXCEL_DIR / "Linear_schiene_Testscope_20260128.xlsx",
|
||
"Anschlagplatten": EXCEL_DIR / "Anschlagplatten_Testscope_20260128.xlsx",
|
||
}
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Fixtures – Excel file paths
|
||
# ---------------------------------------------------------------------------
|
||
|
||
@pytest.fixture(scope="session")
|
||
def excel_dir() -> Path:
|
||
"""Return the directory that contains all sample Excel order lists."""
|
||
assert EXCEL_DIR.is_dir(), f"Excel sample directory not found: {EXCEL_DIR}"
|
||
return EXCEL_DIR
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def excel_paths() -> dict[str, Path]:
|
||
"""Return a mapping of category key → absolute path for each sample file."""
|
||
missing = [k for k, p in EXCEL_FILES.items() if not p.exists()]
|
||
if missing:
|
||
pytest.skip(f"Sample Excel files missing: {missing}")
|
||
return EXCEL_FILES
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Fixtures – parsed Excel results (cached per test session)
|
||
# ---------------------------------------------------------------------------
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_excel_all(excel_paths: dict[str, Path]) -> dict:
|
||
"""Parse all 7 sample Excel files and return {category_key: ParsedExcel}."""
|
||
from app.services.excel_parser import parse_excel
|
||
|
||
return {cat: parse_excel(path) for cat, path in excel_paths.items()}
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Helpers exposed as fixtures
|
||
# ---------------------------------------------------------------------------
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_trb(parsed_excel_all):
|
||
return parsed_excel_all["TRB"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_kugellager(parsed_excel_all):
|
||
return parsed_excel_all["Kugellager"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_crb(parsed_excel_all):
|
||
return parsed_excel_all["CRB"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_gleitlager(parsed_excel_all):
|
||
return parsed_excel_all["Gleitlager"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_srb_torb(parsed_excel_all):
|
||
return parsed_excel_all["SRB_TORB"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_linear_schiene(parsed_excel_all):
|
||
return parsed_excel_all["Linear_schiene"]
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def parsed_anschlagplatten(parsed_excel_all):
|
||
return parsed_excel_all["Anschlagplatten"]
|