aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-duet-backend.el26
-rw-r--r--tests/test-duet-transfer.el8
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/test-duet-backend.el b/tests/test-duet-backend.el
index b1d9c34..f0a999c 100644
--- a/tests/test-duet-backend.el
+++ b/tests/test-duet-backend.el
@@ -211,6 +211,32 @@ value for a duplicated keyword."
(list :shell-command "rm -rf /")))))
(should (duet-backend-check-minimum b))))
+(ert-deftest test-duet-backend-check-minimum-flags-nil-command-spec ()
+ "A command builder returning nil fails the minimum tier (nil is a list)."
+ (let ((b (test-duet-backend--fake 'nilcmd 10 :command (lambda (_s _d _o) nil))))
+ (should (duet-backend-check-minimum b))))
+
+(ert-deftest test-duet-backend-check-minimum-flags-empty-argv-cli ()
+ "A CLI backend with nil argv and no declared in-process mode fails."
+ (let ((b (test-duet-backend--fake
+ 'noargv 10
+ :command (lambda (_s _d _o) (list :argv nil :default-directory "/")))))
+ (should (duet-backend-check-minimum b))))
+
+(ert-deftest test-duet-backend-check-minimum-accepts-in-process-spec ()
+ "A backend declaring an in-process mode (:tramp) passes with a nil argv."
+ (let ((b (test-duet-backend--fake
+ 'inproc 10
+ :command (lambda (_s _d _o) (list :argv nil :tramp t)))))
+ (should (null (duet-backend-check-minimum b)))))
+
+(ert-deftest test-duet-backend-check-minimum-flags-non-string-argv ()
+ "An argv carrying non-string elements is not a runnable CLI command."
+ (let ((b (test-duet-backend--fake
+ 'bad 10
+ :command (lambda (_s _d _o) (list :argv '("rsync" 42))))))
+ (should (duet-backend-check-minimum b))))
+
(ert-deftest test-duet-backend-check-publishable-flags-missing-cleanup ()
"The publishable tier additionally requires declared cleanup semantics."
(let ((b (test-duet-backend--fake 'pub 10
diff --git a/tests/test-duet-transfer.el b/tests/test-duet-transfer.el
index a5d0429..ebe5a2c 100644
--- a/tests/test-duet-transfer.el
+++ b/tests/test-duet-transfer.el
@@ -120,6 +120,14 @@
(should (eq 'rsync (plist-get spec :backend)))
(should (eq :local-remote (plist-get spec :route))))))
+(ert-deftest test-duet-transfer-spec-preserves-tramp-marker ()
+ "A spec routed through TRAMP carries the in-process marker, not just nil argv."
+ (test-duet-transfer--with-builtins
+ (let ((spec (duet--transfer-spec '("/tmp/a/file.txt") "/ftp:host:/b" nil)))
+ (should (eq 'tramp (plist-get spec :backend)))
+ (should (eq t (plist-get spec :tramp)))
+ (should (null (plist-get spec :argv))))))
+
;;; Conflict planning — pure, prompt-free
(ert-deftest test-duet-plan-conflicts-no-collisions-all-copy ()