feat: embedded flow-watcher in API lifespan with startup sync
This commit is contained in:
parent
c65e3ed332
commit
338cdcf108
3 changed files with 82 additions and 0 deletions
|
|
@ -1,7 +1,9 @@
|
|||
"""Sync engine tests: backend/flows/*.json -> DB + LFX (LFX real, DB sqlite)."""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import shutil
|
||||
import time
|
||||
from pathlib import Path
|
||||
from uuid import UUID
|
||||
|
||||
|
|
@ -9,6 +11,7 @@ import pytest
|
|||
|
||||
from app.flows import store, sync
|
||||
from app.flows.lfx_client import LfxClient, LfxNotFound
|
||||
from app.flows.schemas import SyncReport
|
||||
from app.flows.sync import lfx_id_for
|
||||
from app.settings import settings
|
||||
|
||||
|
|
@ -127,3 +130,28 @@ async def test_sync_endpoint_returns_report(client, lfx_server, tmp_path, monkey
|
|||
|
||||
response = await client.post("/api/flows/sync")
|
||||
assert response.json()["skipped"] == ["simple_rule"]
|
||||
|
||||
|
||||
async def test_watch_forever_triggers_on_file_change(tmp_path):
|
||||
import contextlib
|
||||
|
||||
calls: list[str] = []
|
||||
stop = asyncio.Event()
|
||||
|
||||
def run():
|
||||
calls.append("sync")
|
||||
return SyncReport()
|
||||
|
||||
task = asyncio.create_task(sync.watch_forever(stop, tmp_path, run_sync=run))
|
||||
try:
|
||||
await asyncio.sleep(0.5) # let the watcher arm
|
||||
(tmp_path / "neu.json").write_text("{}")
|
||||
deadline = time.time() + 15
|
||||
while not calls and time.time() < deadline:
|
||||
await asyncio.sleep(0.1)
|
||||
assert calls == ["sync"]
|
||||
finally:
|
||||
stop.set()
|
||||
task.cancel()
|
||||
with contextlib.suppress(asyncio.CancelledError):
|
||||
await task
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue