summaryrefslogtreecommitdiff
path: root/tests/test-org-refile-config-ensure-org-mode.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-02-15 21:14:18 -0600
committerCraig Jennings <c@cjennings.net>2026-02-15 21:14:18 -0600
commitedfb11b1a161d39a3f88279bc7b395aa8e6f68b7 (patch)
tree10805d200687e3477b2c250871050ccc0b144a5d /tests/test-org-refile-config-ensure-org-mode.el
parent61bfb79f2c55983697f87b9ba3961a9fb46de2fe (diff)
test: add 38 tests for org-agenda-config and org-refile-config
- testutil-org.el: shared dynamic timestamp helpers (days-ago, days-ahead, today) - org-agenda-config: 31 tests across 2 files (skip functions + add-files) - org-refile-config: 7 tests for ensure-org-mode validation - Remove prog-shell from checklist (fully covered by existing 9 tests)
Diffstat (limited to 'tests/test-org-refile-config-ensure-org-mode.el')
-rw-r--r--tests/test-org-refile-config-ensure-org-mode.el123
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/test-org-refile-config-ensure-org-mode.el b/tests/test-org-refile-config-ensure-org-mode.el
new file mode 100644
index 00000000..c86ad269
--- /dev/null
+++ b/tests/test-org-refile-config-ensure-org-mode.el
@@ -0,0 +1,123 @@
+;;; test-org-refile-config-ensure-org-mode.el --- Tests for cj/org-refile-ensure-org-mode -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Tests for cj/org-refile-ensure-org-mode from org-refile-config.el.
+;; Uses testutil-general.el for filesystem setup/teardown.
+
+;;; Code:
+
+(require 'ert)
+(require 'org)
+
+(add-to-list 'load-path (expand-file-name "tests" user-emacs-directory))
+(require 'testutil-general)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'org-refile-config)
+
+;;; Normal Cases
+
+(ert-deftest test-org-refile-ensure-org-mode-normal-org-file-returns-buffer ()
+ "A .org file already in org-mode should return its buffer."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/notes.org" "* Heading\n")))
+ (let ((buf (find-file-noselect file)))
+ (unwind-protect
+ (progn
+ (with-current-buffer buf
+ (let ((org-mode-hook nil) (text-mode-hook nil))
+ (org-mode)))
+ (let ((result (cj/org-refile-ensure-org-mode file)))
+ (should (bufferp result))
+ (with-current-buffer result
+ (should (derived-mode-p 'org-mode)))))
+ (kill-buffer buf)))))
+ (cj/delete-test-base-dir)))
+
+(ert-deftest test-org-refile-ensure-org-mode-normal-switches-fundamental-to-org ()
+ "A .org file in fundamental-mode should be switched to org-mode."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/stuck.org" "* TODO Task\n")))
+ (let ((buf (find-file-noselect file)))
+ (unwind-protect
+ (progn
+ (with-current-buffer buf
+ (fundamental-mode))
+ (should (with-current-buffer buf
+ (eq major-mode 'fundamental-mode)))
+ (let ((org-mode-hook nil) (text-mode-hook nil))
+ (cj/org-refile-ensure-org-mode file))
+ (with-current-buffer buf
+ (should (derived-mode-p 'org-mode))))
+ (kill-buffer buf)))))
+ (cj/delete-test-base-dir)))
+
+;;; Error Cases
+
+(ert-deftest test-org-refile-ensure-org-mode-error-non-org-extension ()
+ "A non-.org file should signal an error."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/notes.txt" "Some text\n")))
+ (should-error (cj/org-refile-ensure-org-mode file)
+ :type 'error)))
+ (cj/delete-test-base-dir)))
+
+(ert-deftest test-org-refile-ensure-org-mode-error-markdown-extension ()
+ "A .md file should signal an error."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/notes.md" "# Heading\n")))
+ (should-error (cj/org-refile-ensure-org-mode file)
+ :type 'error)))
+ (cj/delete-test-base-dir)))
+
+(ert-deftest test-org-refile-ensure-org-mode-error-no-extension ()
+ "A file without an extension should signal an error."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/notes" "content\n")))
+ (should-error (cj/org-refile-ensure-org-mode file)
+ :type 'error)))
+ (cj/delete-test-base-dir)))
+
+;;; Boundary Cases
+
+(ert-deftest test-org-refile-ensure-org-mode-boundary-org-in-dirname ()
+ "A file with .org in the directory name but not the extension should error."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/my.org.files/todo.txt" "* TODO\n")))
+ (should-error (cj/org-refile-ensure-org-mode file)
+ :type 'error)))
+ (cj/delete-test-base-dir)))
+
+(ert-deftest test-org-refile-ensure-org-mode-boundary-uppercase-org-extension ()
+ "A .ORG file (uppercase) should be accepted (case-insensitive match)."
+ (unwind-protect
+ (progn
+ (cj/create-test-base-dir)
+ (let ((file (cj/create-directory-or-file-ensuring-parents
+ "refile-test/notes.ORG" "* Heading\n")))
+ (let ((buf (cj/org-refile-ensure-org-mode file)))
+ (unwind-protect
+ (should (bufferp buf))
+ (when (buffer-live-p buf) (kill-buffer buf))))))
+ (cj/delete-test-base-dir)))
+
+(provide 'test-org-refile-config-ensure-org-mode)
+;;; test-org-refile-config-ensure-org-mode.el ends here