#!/usr/bin/env zunit @setup { load "../auto-notify.plugin.zsh" function notify-send { echo - "Notification Title: $1" echo - "Notification Body: $2" echo - "${@:3}" } function uname { echo - "Linux" } # Mock date function to return a frozen timestamp function date { if [[ "$1" == +"%s" ]]; then echo - "11100" else date - "$@" fi } } @test 'auto-notify-send does not send notification if tracking not set' { unset AUTO_COMMAND unset AUTO_COMMAND_FULL unset AUTO_COMMAND_START run _auto_notify_send assert $state equals 0 assert "$output" is_empty } @test 'auto-notify-send does not send notification for short task' { AUTO_COMMAND="foo bar -r" AUTO_COMMAND_FULL="foo bar -r" AUTO_COMMAND_START=11099 run _auto_notify_send assert $state equals 0 assert "$output" is_empty } @test 'auto-notify-send does not send notification for ignored commands' { for command in $AUTO_NOTIFY_IGNORE; do AUTO_COMMAND="somealias" AUTO_COMMAND_FULL="$command" AUTO_COMMAND_START=11000 run _auto_notify_send assert $state equals 0 assert "$output" is_empty done } @test 'auto-notify-send does not send notification for ignored piped commands' { AUTO_COMMAND="echo hello world | less -r" AUTO_COMMAND_FULL="echo hello world | less -r" AUTO_COMMAND_START=11000 run _auto_notify_send assert $state equals 0 assert "$output" is_empty } @test 'auto-notify-send does not send notification for ignored commands with arguments' { for command in $AUTO_NOTIFY_IGNORE; do AUTO_COMMAND="somealias bar -r" AUTO_COMMAND_FULL="$command bar -r" AUTO_COMMAND_START=11000 run _auto_notify_send assert $state equals 0 assert "$output" is_empty done } @test 'auto-notify-send sends notification on Linux' { AUTO_COMMAND="f bar -r" AUTO_COMMAND_FULL="foo bar -r" AUTO_COMMAND_START=11080 AUTO_NOTIFY_EXPIRE_TIME=15000 run _auto_notify_send assert $state equals 0 assert "$lines[1]" same_as 'Notification Title: "f bar -r" Completed' assert "$lines[2]" same_as "Notification Body: Total time: 20 seconds" assert "$lines[3]" same_as "Exit code: 0" assert "$lines[4]" same_as "--app-name=zsh --hint=int:transient:1 --urgency=normal --expire-time=15000" } @test 'auto-notify-send sends notification and icon on Linux on success' { AUTO_COMMAND="f bar -r" AUTO_COMMAND_FULL="foo bar -r" AUTO_COMMAND_START=11080 AUTO_NOTIFY_EXPIRE_TIME=15000 AUTO_NOTIFY_ICON_SUCCESS=/path/to/success/icon.png run _auto_notify_send assert $state equals 0 assert "$lines[1]" same_as 'Notification Title: "f bar -r" Completed' assert "$lines[2]" same_as "Notification Body: Total time: 20 seconds" assert "$lines[3]" same_as "Exit code: 0" assert "$lines[4]" same_as "--app-name=zsh --hint=int:transient:1 --urgency=normal --expire-time=15000 --icon=/path/to/success/icon.png" } @test 'auto-notify-send sends notification on macOS' { AUTO_COMMAND="f bar -r" AUTO_COMMAND_FULL="foo bar -r" AUTO_COMMAND_START=11080 function uname { echo - "Darwin" } function osascript { echo - "${@}" } run _auto_notify_send assert $state equals 0 assert "$lines[1]" same_as '-e on run argv -e display notification (item 1 of argv) with title (item 2 of argv) -e end run Total time: 20 seconds' assert "$lines[2]" same_as 'Exit code: 0 "f bar -r" Completed' } @test 'auto-notify-send sends warning on unsupported platform' { AUTO_COMMAND="f bar -r" AUTO_COMMAND_FULL="foo bar -r" AUTO_COMMAND_START=11080 function uname { echo - "Hal9000" } run _auto_notify_send assert $state equals 0 assert "$lines[1]" same_as "Unknown platform for sending notifications: Hal9000" assert "$lines[2]" same_as "Please post an issue on gitub.com/MichaelAquilina/zsh-auto-notify/issues/" } @test 'auto-notify-send sends custom message' { AUTO_COMMAND="doom -i" AUTO_COMMAND_FULL="doom -i" AUTO_COMMAND_START=11055 AUTO_NOTIFY_TITLE="%command has completed in %elapseds yo" AUTO_NOTIFY_BODY="%command exited with code %exit_code" run _auto_notify_send assert $state equals 0 assert "$lines[1]" same_as 'Notification Title: doom -i has completed in 45s yo' assert "$lines[2]" same_as "Notification Body: doom -i exited with code 0" }