aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-setup-email.bats82
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/test-setup-email.bats b/tests/test-setup-email.bats
new file mode 100644
index 00000000..e42335e5
--- /dev/null
+++ b/tests/test-setup-email.bats
@@ -0,0 +1,82 @@
+#!/usr/bin/env bats
+# Tests for the password helpers in scripts/setup-email.sh.
+#
+# `install_encrypted_password' copies a password file from the encrypted
+# assets dir into PASSWORD_DEST_DIR; `decrypt_password' pipes one through
+# `gpg -d' into PASSWORD_DEST_DIR. Both skip when the destination already
+# exists and exit 1 when the source is missing. These tests source the
+# script (which only defines the helpers — `main' runs only when the script
+# is executed directly) and point the two directory vars at a per-test
+# tmpdir, so nothing touches ~/.config or the real mail setup.
+
+setup() {
+ source "${BATS_TEST_DIRNAME}/../scripts/setup-email.sh"
+ ENCRYPTED_PASSWORDS_DIR="${BATS_TEST_TMPDIR}/src"
+ PASSWORD_DEST_DIR="${BATS_TEST_TMPDIR}/dest"
+ mkdir -p "$ENCRYPTED_PASSWORDS_DIR" "$PASSWORD_DEST_DIR"
+}
+
+# --------------------------- install_encrypted_password ---------------------
+
+@test "install_encrypted_password: copies the source and locks it to 600" {
+ printf 'secret' > "$ENCRYPTED_PASSWORDS_DIR/.gmailpass.gpg"
+ run install_encrypted_password ".gmailpass.gpg"
+ [ "$status" -eq 0 ]
+ [ "$(cat "$PASSWORD_DEST_DIR/.gmailpass.gpg")" = "secret" ]
+ [ "$(stat -c '%a' "$PASSWORD_DEST_DIR/.gmailpass.gpg")" = "600" ]
+ [[ "$output" == *"created"* ]]
+}
+
+@test "install_encrypted_password: skips and keeps an existing destination" {
+ printf 'new' > "$ENCRYPTED_PASSWORDS_DIR/.gmailpass.gpg"
+ printf 'kept' > "$PASSWORD_DEST_DIR/.gmailpass.gpg"
+ run install_encrypted_password ".gmailpass.gpg"
+ [ "$status" -eq 0 ]
+ [ "$(cat "$PASSWORD_DEST_DIR/.gmailpass.gpg")" = "kept" ]
+ [[ "$output" == *"already exists, skipping"* ]]
+}
+
+@test "install_encrypted_password: exits 1 when source and destination both missing" {
+ run install_encrypted_password ".gmailpass.gpg"
+ [ "$status" -eq 1 ]
+ [[ "$output" == *"missing"* ]]
+ [ ! -e "$PASSWORD_DEST_DIR/.gmailpass.gpg" ]
+}
+
+# ------------------------------- decrypt_password ---------------------------
+
+@test "decrypt_password: writes the decrypted plaintext and locks it to 600" {
+ printf 'ciphertext' > "$ENCRYPTED_PASSWORDS_DIR/.cmailpass.gpg"
+ gpg() { printf 'plaintext'; } # stub: no real GPG key here
+ run decrypt_password ".cmailpass.gpg" ".cmailpass"
+ [ "$status" -eq 0 ]
+ [ "$(cat "$PASSWORD_DEST_DIR/.cmailpass")" = "plaintext" ]
+ [ "$(stat -c '%a' "$PASSWORD_DEST_DIR/.cmailpass")" = "600" ]
+ [[ "$output" == *"created"* ]]
+}
+
+@test "decrypt_password: skips and keeps an existing destination" {
+ printf 'ciphertext' > "$ENCRYPTED_PASSWORDS_DIR/.cmailpass.gpg"
+ printf 'kept' > "$PASSWORD_DEST_DIR/.cmailpass"
+ gpg() { printf 'plaintext'; }
+ run decrypt_password ".cmailpass.gpg" ".cmailpass"
+ [ "$status" -eq 0 ]
+ [ "$(cat "$PASSWORD_DEST_DIR/.cmailpass")" = "kept" ]
+ [[ "$output" == *"already exists, skipping"* ]]
+}
+
+@test "decrypt_password: exits 1 when the source is missing" {
+ run decrypt_password ".cmailpass.gpg" ".cmailpass"
+ [ "$status" -eq 1 ]
+ [[ "$output" == *"missing"* ]]
+ [ ! -e "$PASSWORD_DEST_DIR/.cmailpass" ]
+}
+
+@test "decrypt_password: removes the partial file and exits 1 when gpg fails" {
+ printf 'ciphertext' > "$ENCRYPTED_PASSWORDS_DIR/.cmailpass.gpg"
+ gpg() { return 1; } # stub: decryption failure
+ run decrypt_password ".cmailpass.gpg" ".cmailpass"
+ [ "$status" -eq 1 ]
+ [[ "$output" == *"failed to decrypt"* ]]
+ [ ! -e "$PASSWORD_DEST_DIR/.cmailpass" ]
+}