Add separate simulator UI

This commit is contained in:
masterdev
2026-06-17 01:06:21 +01:00
parent e083a22bff
commit e3d8f856e3
16 changed files with 2361 additions and 14 deletions

View File

@@ -6,9 +6,9 @@ from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session, sessionmaker
from app.database import Base
from app.main import start_production_order
from app.main import run_simulator_scenario, start_production_order
from app.models import Cycle, Downtime, Machine, MachineEvent, ProductionOrder
from app.schemas import MachineEventIn
from app.schemas import MachineEventIn, SimulatorScenarioCreate
from app.services.events import _is_matching_edge, detect_missing_cycles, handle_machine_event, normalize_signal_value, parse_machine_event
@@ -157,3 +157,41 @@ def test_start_order_rejects_second_running_order_on_machine(db_session: Session
assert exc.value.status_code == 400
assert exc.value.detail == "Another order is already running on this machine"
def test_simulator_cycle_burst_uses_production_event_logic(db_session: Session) -> None:
machine = seed_running_machine(db_session)
result = run_simulator_scenario(
SimulatorScenarioCreate(
machine_id=machine.code,
scenario="cycle_burst",
cycle_time_sec=12,
count=3,
),
db_session,
)
cycles = db_session.execute(select(Cycle).where(Cycle.machine_id == machine.id)).scalars().all()
assert result["scenario"] == "cycle_burst"
assert len(result["events"]) == 3
assert len(cycles) == 3
assert {cycle.cycle_time_sec for cycle in cycles} == {12}
def test_simulator_debounce_noise_is_ignored(db_session: Session) -> None:
machine = seed_running_machine(db_session)
result = run_simulator_scenario(
SimulatorScenarioCreate(
machine_id=machine.code,
scenario="debounce_noise",
cycle_time_sec=12,
),
db_session,
)
cycles = db_session.execute(select(Cycle).where(Cycle.machine_id == machine.id)).scalars().all()
assert result["scenario"] == "debounce_noise"
assert len(result["events"]) == 2
assert cycles == []