aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wallp.bats
blob: 0ffed89b8236a959f2c5a92524775a758ffb6ece (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env bats

setup() {
  SCRIPT_DIR="$(cd "$BATS_TEST_DIRNAME/.." && pwd)"
  TMP_HOME="$(mktemp -d)"
  export HOME="$TMP_HOME"
  STUB_DIR="$TMP_HOME/stubs"
  mkdir -p "$STUB_DIR"
  export PATH="$STUB_DIR:$PATH"
  local bin
  for bin in swaybg wal qarma notify-send pkill kill; do
    cat > "$STUB_DIR/$bin" <<EOF
#!/bin/bash
echo "$bin \$*" >> "$TMP_HOME/calls.log"
exit 0
EOF
    chmod +x "$STUB_DIR/$bin"
  done
  source "$SCRIPT_DIR/wallp"
}

teardown() {
  rm -rf "$TMP_HOME"
}

@test "harness sanity" {
  [ "x" = "x" ]
}

@test "expand_tilde expands leading tilde" {
  run expand_tilde '~/pics/a.png'
  [ "$status" -eq 0 ]
  [ "$output" = "$HOME/pics/a.png" ]
}

@test "expand_tilde leaves absolute path untouched" {
  run expand_tilde '/abs/b.png'
  [ "$output" = "/abs/b.png" ]
}

@test "parse_conf reads keys and expands tilde in paths" {
  conf="$HOME/c.conf"
  printf '%s\n' \
    '# comment' '' \
    'THEME=mytheme' \
    'OUTPUT_H=DP-1' \
    'OUTPUT_V=DP-3' \
    'DEFAULT_H=~/p/h.png' \
    'DEFAULT_V=/abs/v.png' > "$conf"
  parse_conf "$conf"
  [ "$CONF_THEME" = "mytheme" ]
  [ "$CONF_OUTPUT_H" = "DP-1" ]
  [ "$CONF_OUTPUT_V" = "DP-3" ]
  [ "$CONF_DEFAULT_H" = "$HOME/p/h.png" ]
  [ "$CONF_DEFAULT_V" = "/abs/v.png" ]
}

@test "load_conf bootstraps template when conf missing" {
  run load_conf
  [ "$status" -eq 10 ]
  [ -f "$HOME/.config/wallp/wallp.conf" ]
  [[ "$output" == *"fill it in"* ]]
}

@test "load_conf hard-errors on missing required key" {
  mkdir -p "$HOME/.config/wallp"
  printf '%s\n' 'OUTPUT_H=DP-1' 'OUTPUT_V=DP-3' 'DEFAULT_H=/a.png' \
    > "$HOME/.config/wallp/wallp.conf"
  run load_conf
  [ "$status" -eq 1 ]
  [[ "$output" == *"DEFAULT_V"* ]]
}

@test "load_conf ok with THEME fallback" {
  mkdir -p "$HOME/.config/wallp"
  printf '%s\n' 'OUTPUT_H=DP-1' 'OUTPUT_V=DP-3' \
    'DEFAULT_H=/a.png' 'DEFAULT_V=/b.png' \
    > "$HOME/.config/wallp/wallp.conf"
  load_conf
  [ "$?" -eq 0 ]
  [ "$CONF_THEME" = "sexy-splurge" ]
}

@test "resolve_theme flag wins over all" {
  CONF_THEME="conf"; mkdir -p "$HOME/.config/wallp"
  echo persisted > "$HOME/.config/wallp/theme"
  run resolve_theme flagged
  [ "$output" = "flagged" ]
}

@test "resolve_theme persisted beats conf" {
  CONF_THEME="conf"; mkdir -p "$HOME/.config/wallp"
  echo persisted > "$HOME/.config/wallp/theme"
  run resolve_theme ''
  [ "$output" = "persisted" ]
}

@test "resolve_theme uses conf when no persisted" {
  CONF_THEME="conf"
  run resolve_theme ''
  [ "$output" = "conf" ]
}

@test "persist_theme writes the file" {
  persist_theme "abc"
  [ "$(cat "$HOME/.config/wallp/theme")" = "abc" ]
}