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}