diff --git a/gates/pool.py b/gates/pool.py index e3e94e4..64bb7ff 100644 --- a/gates/pool.py +++ b/gates/pool.py @@ -103,6 +103,14 @@ def resolve_slot(manifest, index_widget): return max(0, min(idx, n - 1)) +def set_label(base_dir, pool_id, index, label): + m = read_manifest(base_dir, pool_id) + if 0 <= index < len(m["slots"]): + m["slots"][index]["label"] = str(label) + write_manifest(base_dir, pool_id, m) + return m + + def rebuild_manifest(base_dir, pool_id): # Temporary stub — replaced in Task 7. return empty_manifest() diff --git a/tests/test_pool.py b/tests/test_pool.py index 0edb908..c1539da 100644 --- a/tests/test_pool.py +++ b/tests/test_pool.py @@ -85,3 +85,15 @@ def test_resolve_slot_rules(): assert pool.resolve_slot(m, 0) == 0 # forced assert pool.resolve_slot(m, 9) == 2 # clamp high assert pool.resolve_slot({"active": 0, "slots": [], "next_seq": 1}, -1) == -1 # empty + + +def test_set_label(tmp_path): + pool.add_image(str(tmp_path), "p1", b"a", ts=1) + m = pool.set_label(str(tmp_path), "p1", 0, "front view") + assert m["slots"][0]["label"] == "front view" + + +def test_set_label_out_of_range_noop(tmp_path): + pool.add_image(str(tmp_path), "p1", b"a", ts=1) + m = pool.set_label(str(tmp_path), "p1", 5, "x") + assert m["slots"][0]["label"] == ""