72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
sys.path.insert(0, str(ROOT / "plugins" / "1c"))
|
|
|
|
from parser.scheduled_job import decode_schedule, schedule_write_edits # noqa: E402
|
|
|
|
|
|
def atom(value: Any) -> dict[str, Any]:
|
|
return {"type": "atom", "value": str(value)}
|
|
|
|
|
|
def schedule_tree() -> dict[str, Any]:
|
|
return {
|
|
"type": "list",
|
|
"items": [
|
|
atom("00010101000000"),
|
|
atom("00010101000000"),
|
|
atom("00010101090000"),
|
|
atom("00010101180000"),
|
|
atom("00010101000000"),
|
|
atom(0),
|
|
atom(0),
|
|
atom(0),
|
|
atom(2),
|
|
atom(1),
|
|
atom(5),
|
|
atom(0),
|
|
atom(0),
|
|
atom(1),
|
|
atom(1),
|
|
atom(1),
|
|
atom(1),
|
|
],
|
|
}
|
|
|
|
|
|
def test_decode_schedule_is_adapter_independent() -> None:
|
|
result = decode_schedule(schedule_tree())
|
|
|
|
assert result["status"] == "ok"
|
|
assert result["begin_time"] == "09:00:00"
|
|
assert result["end_time"] == "18:00:00"
|
|
assert result["week_days"] == [1, 5]
|
|
assert result["months"] == [1]
|
|
|
|
|
|
def test_schedule_write_edits_rebuilds_resized_collections() -> None:
|
|
result = schedule_write_edits(
|
|
schedule_tree(),
|
|
{"week_days": [1, 2, 3, 4, 5], "months": [1, 6, 12]},
|
|
)
|
|
|
|
assert result["status"] == "ok"
|
|
assert result["counts"]["resized_collections"] == 2
|
|
rebuilt = decode_schedule(result["edits"][0]["replace_root"])
|
|
assert rebuilt["week_days"] == [1, 2, 3, 4, 5]
|
|
assert rebuilt["months"] == [1, 6, 12]
|
|
|
|
|
|
def test_schedule_write_edits_rejects_unknown_named_field() -> None:
|
|
result = schedule_write_edits(schedule_tree(), {"sql_path": "1.2.3"})
|
|
|
|
assert result["status"] == "invalid_argument"
|
|
assert result["error"] == "unsupported_schedule_fields"
|
|
assert result["diagnostics"]["fields"] == ["sql_path"]
|