main zmx / test / labels.bats
JoeJoeflyn  ·  2026-08-20
  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 "clear: cl alias works" {
 91  "$ZMX" run test-clear-alias -d sleep 30
 92  wait_for_session test-clear-alias
 93
 94  run "$ZMX" set test-clear-alias x=1 y=2
 95  run "$ZMX" cl test-clear-alias
 96  [ "$status" -eq 0 ]
 97
 98  run "$ZMX" get test-clear-alias
 99  [ "$status" -eq 0 ]
100  [ -z "$output" ]
101}
102
103@test "set: missing key-value pairs exits non-zero" {
104  "$ZMX" run test-nokv -d sleep 30
105  wait_for_session test-nokv
106
107  run "$ZMX" set test-nokv
108  [ "$status" -ne 0 ]
109  [[ "$output" == *"key=value"* ]]
110}
111
112@test "get: missing key in existing session exits non-zero" {
113  "$ZMX" run test-getkey -d sleep 30
114  wait_for_session test-getkey
115
116  run "$ZMX" set test-getkey a=1
117  run "$ZMX" get test-getkey b
118  [ "$status" -ne 0 ]
119  [[ "$output" == *"not found"* ]]
120}
121
122@test "get: no session prints error" {
123  run "$ZMX" get nonexistent
124  [ "$status" -ne 0 ]
125  [[ "$output" == *"not found"* ]]
126}
127
128@test "get: no args prints error" {
129  run env -u ZMX_SESSION "$ZMX" get
130  [ "$status" -ne 0 ]
131  [[ "$output" == *"session name required"* ]]
132}
133