main zmx / test / labels.bats
Max Rydahl Andersen  ·  2026-06-29
 1#!/usr/bin/env bats
 2# Label tests for zmx.
 3
 4load test_helper
 5
 6# ============================================================================
 7# Label CRUD
 8# ============================================================================
 9
10@test "set/get: round-trips labels" {
11  "$ZMX" run test-labels -d sleep 30
12  wait_for_session test-labels
13
14  run "$ZMX" set test-labels project=zmx env=dev
15  [ "$status" -eq 0 ]
16
17  run "$ZMX" get test-labels
18  [ "$status" -eq 0 ]
19  [[ "$output" == *"env=dev"* ]]
20  [[ "$output" == *"project=zmx"* ]]
21}
22
23@test "set: updates existing label" {
24  "$ZMX" run test-update -d sleep 30
25  wait_for_session test-update
26
27  run "$ZMX" set test-update status=busy
28  [ "$status" -eq 0 ]
29  run "$ZMX" set test-update status=done
30  [ "$status" -eq 0 ]
31
32  run "$ZMX" get test-update
33  [ "$status" -eq 0 ]
34  [[ "$output" == *"status=done"* ]]
35  [[ "$output" != *"status=busy"* ]]
36}
37
38@test "set: rejects reserved key 'name'" {
39  "$ZMX" run test-reserved -d sleep 30
40  wait_for_session test-reserved
41
42  run "$ZMX" set test-reserved name=bad
43  [ "$status" -ne 0 ]
44  [[ "$output" == *"read-only built-in field"* ]]
45}
46
47@test "set: rejects reserved key 'start_dir'" {
48  "$ZMX" run test-reserved2 -d sleep 30
49  wait_for_session test-reserved2
50
51  run "$ZMX" set test-reserved2 start_dir=/tmp
52  [ "$status" -ne 0 ]
53  [[ "$output" == *"read-only built-in field"* ]]
54}
55
56@test "set: rejects reserved key 'cmd'" {
57  "$ZMX" run test-reserved3 -d sleep 30
58  wait_for_session test-reserved3
59
60  run "$ZMX" set test-reserved3 cmd=bad
61  [ "$status" -ne 0 ]
62  [[ "$output" == *"read-only built-in field"* ]]
63}
64
65@test "set with empty value removes label" {
66  "$ZMX" run test-unset -d sleep 30
67  wait_for_session test-unset
68
69  run "$ZMX" set test-unset a=1 b=2
70  run "$ZMX" set test-unset a=
71
72  run "$ZMX" get test-unset
73  [ "$status" -eq 0 ]
74  [[ "$output" != *"a=1"* ]]
75  [[ "$output" == *"b=2"* ]]
76}
77
78@test "clear: removes all labels" {
79  "$ZMX" run test-clear -d sleep 30
80  wait_for_session test-clear
81
82  run "$ZMX" set test-clear x=1 y=2
83  run "$ZMX" clear test-clear
84
85  run "$ZMX" get test-clear
86  [ "$status" -eq 0 ]
87  [ -z "$output" ]
88}
89
90@test "get: no session prints error" {
91  run "$ZMX" get nonexistent
92  [ "$status" -ne 0 ]
93  [[ "$output" == *"not found"* ]]
94}
95
96@test "get: no args prints error" {
97  run env -u ZMX_SESSION "$ZMX" get
98  [[ "$output" == *"SessionNameRequired"* ]]
99}