nag/test/snooze.bats

189 lines
4.9 KiB
Bash

#!/usr/bin/env bats
load test_helper
@test "snooze by ID creates entry in snoozed file" {
run_nag at "tomorrow 3pm" "take a break"
run_nag snooze 1
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snoozed [1]" ]]
[ -f "${NAG_DIR}/snoozed" ]
grep -q "^1$" "${NAG_DIR}/snoozed"
}
@test "snooze by ID shows alarm message in output" {
run_nag at "tomorrow 3pm" "take a break"
run_nag snooze 1
[[ "${output}" =~ "take a break" ]]
}
@test "snooze with nonexistent ID fails" {
run_nag snooze 99
[ "${status}" -eq 1 ]
}
@test "snooze with no args fails" {
run_nag snooze
[ "${status}" -eq 1 ]
}
@test "snooze all creates entries for all alarm IDs" {
run_nag at "tomorrow 3pm" "first"
run_nag at "tomorrow 4pm" "second"
run_nag snooze all
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snoozed [1]" ]]
[[ "${output}" =~ "Snoozed [2]" ]]
[ -f "${NAG_DIR}/snoozed" ]
grep -q "^1$" "${NAG_DIR}/snoozed"
grep -q "^2$" "${NAG_DIR}/snoozed"
}
@test "snooze all with duration sets expiry for each alarm" {
run_nag at "tomorrow 3pm" "first"
run_nag at "tomorrow 4pm" "second"
run_nag snooze all "tomorrow"
[ "${status}" -eq 0 ]
[[ "${output}" =~ "until" ]]
grep -q "^1"$'\t' "${NAG_DIR}/snoozed"
grep -q "^2"$'\t' "${NAG_DIR}/snoozed"
}
@test "snooze by tag creates entries for matching alarm IDs" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze work
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snoozed [1]" ]]
grep -q "^1$" "${NAG_DIR}/snoozed"
! grep -q "^work" "${NAG_DIR}/snoozed"
}
@test "snooze by tag requires -f" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run "${_NAG}" snooze work < /dev/null
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snooze" ]]
[[ "${output}" =~ "-f" ]]
}
@test "snooze by tag with no matching alarms fails" {
run_nag at "tomorrow 3pm" "test alarm"
run "${_NAG}" -f snooze nonexistent
[ "${status}" -eq 1 ]
}
@test "snooze by ID with duration sets expiry" {
run_nag at "tomorrow 3pm" "take a break"
run_nag snooze 1 "tomorrow"
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snoozed [1]" ]]
[[ "${output}" =~ "until" ]]
local _line
_line="$(cat "${NAG_DIR}/snoozed")"
[[ "${_line}" == 1$'\t'* ]]
}
@test "snooze by tag with duration sets expiry for matching IDs" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze work "tomorrow"
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Snoozed [1]" ]]
[[ "${output}" =~ "until" ]]
grep -q "^1"$'\t' "${NAG_DIR}/snoozed"
! grep -q "^work" "${NAG_DIR}/snoozed"
}
@test "unsnooze by ID removes entry from snoozed file" {
run_nag at "tomorrow 3pm" "take a break"
run_nag snooze 1
run_nag unsnooze 1
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Unsnoozed [1]" ]]
! grep -q "^1" "${NAG_DIR}/snoozed" 2>/dev/null
}
@test "unsnooze all removes snoozed file" {
run_nag at "tomorrow 3pm" "test alarm"
run_nag snooze all
run_nag unsnooze all
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Unsnoozed all" ]]
[ ! -f "${NAG_DIR}/snoozed" ]
}
@test "unsnooze all when nothing snoozed says so" {
run_nag unsnooze all
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Nothing is snoozed" ]]
}
@test "unsnooze with no args fails" {
run_nag unsnooze
[ "${status}" -eq 1 ]
}
@test "unsnooze by tag removes snoozed entries for matching alarms" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze work
run_nag unsnooze work
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Unsnoozed [1]" ]]
! grep -q "^1" "${NAG_DIR}/snoozed" 2>/dev/null
}
@test "unsnooze by tag requires -f" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze work
run "${_NAG}" unsnooze work < /dev/null
[ "${status}" -eq 0 ]
[[ "${output}" =~ "Unsnooze" ]]
[[ "${output}" =~ "-f" ]]
}
@test "unsnooze nonexistent ID fails" {
run_nag unsnooze 99
[ "${status}" -eq 1 ]
}
@test "unsnooze tag with no snoozed alarms fails" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run "${_NAG}" -f unsnooze work
[ "${status}" -eq 1 ]
[[ "${output}" =~ "not snoozed" ]]
}
@test "snooze replaces existing entry instead of duplicating" {
run_nag at "tomorrow 3pm" "take a break"
run_nag snooze 1
run_nag snooze 1
[ "${status}" -eq 0 ]
[ "$(grep -c "^1" "${NAG_DIR}/snoozed")" -eq 1 ]
}
@test "snooze by tag does not duplicate already-snoozed IDs" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze 1
run_nag snooze work
[ "${status}" -eq 0 ]
[ "$(grep -c "^1" "${NAG_DIR}/snoozed")" -eq 1 ]
}
@test "unsnooze by tag removes ID-snoozed alarms with that tag" {
run_nag at "tomorrow 3pm" "work task"
run_nag tag 1 work
run_nag snooze 1
run_nag snooze work
run_nag unsnooze work
[ "${status}" -eq 0 ]
# Alarm should be fully unsnoozed, no entries left
if [ -f "${NAG_DIR}/snoozed" ]; then
[ ! -s "${NAG_DIR}/snoozed" ] || ! grep -q "^1" "${NAG_DIR}/snoozed"
fi
}