branch: master commit 24a022843df5825f654aacc8313368c9f22287a1 Author: Ian D <du...@gnu.org> Commit: Ian D <du...@gnu.org>
Added tests for actions * org-edna.el (org-edna-prompt-for-archive): New defcustom. (org-edna-action/archive!): Use it. (org-edna-action/delete-property!): New action. * org-edna-tests.el: Added tests for the remaining actions. * org-edna-tests.org: Added some more test headings. --- org-edna-tests.el | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ org-edna-tests.org | 8 ++++++ org-edna.el | 13 +++++++++- 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/org-edna-tests.el b/org-edna-tests.el index 4698e52..27110b3 100644 --- a/org-edna-tests.el +++ b/org-edna-tests.el @@ -27,6 +27,7 @@ (require 'org-edna) (require 'ert) +(require 'org-id) (defconst org-edna-test-dir (expand-file-name (file-name-directory (or load-file-name buffer-file-name)))) @@ -49,6 +50,7 @@ (defconst org-edna-test-id-heading-two "b010cbad-60dc-46ef-a164-eb155e62cbb2") (defconst org-edna-test-id-heading-three "97e6b0f0-40c4-464f-b760-6e5ca9744eb5") (defconst org-edna-test-id-heading-four "7d4d564b-18b2-445c-a0c8-b1b3fb9ad29e") +(defconst org-edna-test-archive-heading "d7668277-f959-43ba-8e85-8a3c76996862") (defun org-edna-find-test-heading (id) "Find the test heading with id ID." @@ -366,6 +368,77 @@ (should (string-equal (org-entry-get nil "SCHEDULED") "<2000-01-15 Sat 00:00>"))))) +(ert-deftest org-edna-action-tag () + (let ((pom (org-edna-find-test-heading org-edna-test-id-heading-one))) + (org-with-point-at pom + (org-edna-action/tag! nil "tag") + (should (equal (org-get-tags) '("tag"))) + (org-edna-action/tag! nil "") + (should-not (org-get-tags))))) + +(ert-deftest org-edna-action-property () + (let ((pom (org-edna-find-test-heading org-edna-test-id-heading-one))) + (org-with-point-at pom + (org-edna-action/set-property! nil "TEST" "1") + (should (equal (org-entry-get nil "TEST") "1")) + (org-edna-action/delete-property! nil "TEST") + (should-not (org-entry-get nil "TEST"))))) + +(ert-deftest org-edna-action-clock () + (let ((pom (org-edna-find-test-heading org-edna-test-id-heading-one))) + (org-with-point-at pom + (org-edna-action/clock-in! nil) + (should (org-clocking-p)) + (should (equal org-clock-hd-marker pom)) + (org-edna-action/clock-out! nil) + (should-not (org-clocking-p))))) + +(ert-deftest org-edna-action-priority () + (let ((pom (org-edna-find-test-heading org-edna-test-id-heading-one)) + (org-lowest-priority ?C) + (org-highest-priority ?A) + (org-default-priority ?B)) + (org-with-point-at pom + (org-edna-action/set-priority! nil "A") + (should (equal (org-entry-get nil "PRIORITY") "A")) + (org-edna-action/set-priority! nil 'down) + (should (equal (org-entry-get nil "PRIORITY") "B")) + (org-edna-action/set-priority! nil 'up) + (should (equal (org-entry-get nil "PRIORITY") "A")) + (org-edna-action/set-priority! nil ?C) + (should (equal (org-entry-get nil "PRIORITY") "C")) + (org-edna-action/set-priority! nil 'remove) + (should (equal (org-entry-get nil "PRIORITY") "B"))))) + +(ert-deftest org-edna-action-effort () + (let ((pom (org-edna-find-test-heading org-edna-test-id-heading-one))) + (org-with-point-at pom + (org-edna-action/set-effort! nil "0:01") + (should (equal (org-entry-get nil "EFFORT") "0:01")) + (org-edna-action/set-effort! nil 'increment) + (should (equal (org-entry-get nil "EFFORT") "0:02")) + (org-entry-delete nil "EFFORT")))) + +(ert-deftest org-edna-action-archive () + (let ((org-archive-save-context-info '(todo)) + (pom (org-edna-find-test-heading org-edna-test-archive-heading)) + ;; Archive it to the same location + (org-archive-location "::** Archive") + (org-edna-prompt-for-archive nil)) + (org-with-point-at pom + (org-edna-action/archive! nil) + (should (equal (org-entry-get nil "ARCHIVE_TODO") "TODO")) + (org-entry-delete nil "ARCHIVE_TODO")))) + +(ert-deftest org-edna-action-chain () + (let ((old-pom (org-edna-find-test-heading org-edna-test-id-heading-one)) + (new-pom (org-edna-find-test-heading org-edna-test-id-heading-two))) + (org-entry-put old-pom "TEST" "1") + (org-with-point-at new-pom + (org-edna-action/chain! old-pom "TEST") + (should (equal (org-entry-get nil "TEST") "1"))) + (org-entry-delete old-pom "TEST"))) + ;; Conditions diff --git a/org-edna-tests.org b/org-edna-tests.org index ca881df..0c2c24e 100644 --- a/org-edna-tests.org +++ b/org-edna-tests.org @@ -1,3 +1,6 @@ +#+STARTUP: nologdone +#+PROPERTY: EFFORT_ALL 0:01 0:02 0:03 + * COMMENT Copying Copyright (C) 2017 Ian Dunn @@ -64,6 +67,11 @@ SCHEDULED: <2017-01-01 Sun> :PROPERTIES: :ID: 06aca55e-ce09-46df-80d7-5b52e55d6505 :END: +** Archive +*** TODO Archive One +:PROPERTIES: +:ID: d7668277-f959-43ba-8e85-8a3c76996862 +:END: * Finder Tests ** Match *** TODO Blocking Test diff --git a/org-edna.el b/org-edna.el index bb99ec4..f980ba9 100644 --- a/org-edna.el +++ b/org-edna.el @@ -41,6 +41,11 @@ properties used during actions or conditions." :group 'org-edna :type 'boolean) +(defcustom org-edna-prompt-for-archive t + "Whether Edna should prompt before archiving a target." + :group 'org-edna + :type 'boolean) + (defmacro org-edna--syntax-error (msg form pos) `(signal 'invalid-read-syntax (list :msg ,msg :form ,form :pos ,pos))) @@ -508,6 +513,10 @@ IDS are all UUIDs as understood by `org-id-find'." (ignore last-entry) (org-entry-put nil property value)) +(defun org-edna-action/delete-property! (last-entry property) + (ignore last-entry) + (org-entry-delete nil property)) + (defun org-edna-action/clock-in! (last-entry) (ignore last-entry) (org-clock-in)) @@ -531,7 +540,9 @@ IDS are all UUIDs as understood by `org-id-find'." (defun org-edna-action/archive! (last-entry) (ignore last-entry) - (org-archive-subtree-default-with-confirmation)) + (if org-edna-prompt-for-archive + (org-archive-subtree-default-with-confirmation) + (org-archive-subtree-default))) (defun org-edna-action/chain! (last-entry property) (when-let ((old-prop (org-entry-get last-entry property)))