feat(navigation): add prominent validation quickstart action

This commit is contained in:
Schubert Ferenc 2026-07-11 18:02:53 +02:00
parent 0bbcaba211
commit 9c6b184e39
28614 changed files with 4356173 additions and 23 deletions

View file

@ -0,0 +1,99 @@
from __future__ import annotations
from sqlalchemy import create_engine, func, select
from sqlalchemy.orm import Session
from app.db.base import Base
from app.models.contact import Contact
from app.models.customer import Customer, CustomerType
from app.models.device import Device
from app.models.equipment import Equipment
from app.models.validation import Validation
from app import cli as app_cli
from app.services.demo_data import DemoDataService
def session() -> Session:
engine = create_engine("sqlite+pysqlite:///:memory:")
Base.metadata.create_all(engine)
return Session(engine)
def test_demo_data_cli_parser_accepts_expected_options():
args = app_cli.build_parser().parse_args(
[
"demo-data",
"--customers",
"10",
"--devices",
"10",
"--validations",
"20",
"--reports",
"--images",
]
)
assert args.command == "demo-data"
assert args.customers == 10
assert args.devices == 10
assert args.validations == 20
assert args.reports is True
assert args.images is True
def test_demo_data_service_is_idempotent_and_creates_realistic_data(tmp_path):
db = session()
service = DemoDataService(db, upload_root=tmp_path / "uploads", report_root=tmp_path / "reports")
summary_first = service.run(customers=10, devices=10, validations=20, images=True)
assert summary_first["customers"] == 10
assert summary_first["devices"] == 10
assert summary_first["validations"] == 20
assert db.scalar(select(func.count()).select_from(Customer)) == 10
assert db.scalar(select(func.count()).select_from(Device)) == 10
assert db.scalar(select(func.count()).select_from(Equipment)) >= 6
assert db.scalar(select(func.count()).select_from(Validation)) == 20
assert db.scalar(select(func.count()).select_from(Contact)) >= 10
assert list((tmp_path / "uploads").rglob("*.svg"))
summary_second = service.run(customers=10, devices=10, validations=20, images=True)
assert summary_second["customers"] == 10
assert db.scalar(select(func.count()).select_from(Customer)) == 10
assert db.scalar(select(func.count()).select_from(Device)) == 10
assert db.scalar(select(func.count()).select_from(Validation)) == 20
def test_demo_data_reset_removes_only_demo_rows(tmp_path):
db = session()
real_customer = Customer(
customer_type=CustomerType.practice,
name="Reale Praxis",
email="real@example.com",
)
db.add(real_customer)
db.flush()
service = DemoDataService(db, upload_root=tmp_path / "uploads", report_root=tmp_path / "reports")
service.run(customers=10, devices=10, validations=20, images=True)
service.reset()
assert db.scalar(select(Customer).where(Customer.email == "real@example.com")) is not None
assert db.scalar(select(Customer).where(Customer.notes.like("%DEMO_DATA%"))) is None
assert db.scalar(select(Device).where(Device.notes.like("%DEMO_DATA%"))) is None
assert db.scalar(select(Validation).where(Validation.notes.like("%DEMO_DATA%"))) is None
def test_demo_data_cli_command_uses_sessionlocal(monkeypatch):
db = session()
monkeypatch.setattr(app_cli, "SessionLocal", lambda: db)
args = app_cli.build_parser().parse_args(["demo-data", "--customers", "10", "--devices", "10", "--validations", "20"])
exit_code = app_cli.cmd_demo_data(args)
assert exit_code == 0
assert db.scalar(select(func.count()).select_from(Customer)) == 10
assert db.scalar(select(func.count()).select_from(Device)) == 10
assert db.scalar(select(func.count()).select_from(Validation)) == 20