From 7015032f5c5faba06aafdb6c6ba50af34a6b41e4 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Tue, 19 May 2026 00:23:21 +1200 Subject: [PATCH] test: cover zone content kind lock and sequence groups Co-authored-by: Cursor --- tests/test_sequence_zone_groups.py | 28 ++++++++++++++++++++++++++++ tests/test_zone_content_kind.py | 27 +++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 tests/test_sequence_zone_groups.py create mode 100644 tests/test_zone_content_kind.py diff --git a/tests/test_sequence_zone_groups.py b/tests/test_sequence_zone_groups.py new file mode 100644 index 0000000..1fcb3d7 --- /dev/null +++ b/tests/test_sequence_zone_groups.py @@ -0,0 +1,28 @@ +"""Sequence playback targets only explicitly checked lane groups.""" + +from util.sequence_playback import ( + _group_ids_for_lane_step, + _partition_devices_for_lane, + _resolve_step_device_names, + _split_device_names_for_lane, +) + + +def test_empty_lane_groups_do_not_default_to_zone(): + zone = {"group_ids": ["g1", "g2"]} + seq = {"lanes": [[{"preset_id": "1", "beats": 1}]], "lanes_group_ids": [[]]} + gids = _group_ids_for_lane_step(seq, seq["lanes"][0][0], 0, 1, zone_doc=zone) + assert gids == [] + + +def test_resolve_step_with_no_groups_returns_empty(): + zone = {"group_ids": ["g1"], "names": ["dev-a"]} + names = _resolve_step_device_names(zone, [], None, None) + assert names == [] + + +def test_whole_zone_not_partitioned_across_lanes(): + names = ["dev-a", "dev-b", "dev-c"] + assert _split_device_names_for_lane(names, 0, 2, partition_shared_zone=False) == names + assert _split_device_names_for_lane(names, 1, 2, partition_shared_zone=False) == names + assert not _partition_devices_for_lane(2, lane_has_own_groups=False, step_group_ids=[]) diff --git a/tests/test_zone_content_kind.py b/tests/test_zone_content_kind.py new file mode 100644 index 0000000..e0e49a6 --- /dev/null +++ b/tests/test_zone_content_kind.py @@ -0,0 +1,27 @@ +"""Zone content_kind is fixed after create.""" + +import json +import os +import sys +import tempfile +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(PROJECT_ROOT / "src")) + +from models.zone import Zone # noqa: E402 + + +def test_update_cannot_change_content_kind(): + with tempfile.TemporaryDirectory() as tmp: + path = os.path.join(tmp, "zone.json") + with open(path, "w", encoding="utf-8") as f: + json.dump({}, f) + z = Zone() + z.file = path + z.clear() + zid = z.create("preset zone", group_ids=[], content_kind="presets") + z.update(zid, {"content_kind": "sequences", "name": "preset zone"}) + doc = z.read(zid) + assert doc["content_kind"] == "presets" + assert doc.get("sequence_ids") == []