aboutsummaryrefslogtreecommitdiff
path: root/tests/test-org-config-noop-state-log.el
blob: 125eb30089fe3375ed6045f079880c815ecacebe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
;;; test-org-config-noop-state-log.el --- Suppress no-op state-change logs -*- lexical-binding: t; -*-

;;; Commentary:
;; org's state-change logging writes "- State X from X" lines for no-op
;; transitions (identical from/to state), which carry no information.  With
;; `org-log-into-drawer' nil those lines also land inline, where they wedge
;; between a heading and its planning line and break org's parser.  Two fixes
;; in `cj/org-todo-settings': log state changes into :LOGBOOK: drawers
;; (`org-log-into-drawer' t), and suppress no-op state logs at the
;; `org-add-log-setup' choke point via `cj/org--suppress-noop-state-log'.

;;; Code:

(require 'ert)
(require 'org)          ;; declares the org-log-* vars special
(require 'org-config)

(ert-deftest test-org-config-log-into-drawer-enabled ()
  "Normal: cj/org-todo-settings enables org-log-into-drawer (LOGBOOK)."
  (let ((org-log-into-drawer nil))
    (cj/org-todo-settings)
    (should (eq org-log-into-drawer t))))

(ert-deftest test-org-config-noop-state-log-p-identical-is-noop ()
  "Normal: identical from/to state on a 'state purpose is a no-op."
  (should (cj/org--noop-state-log-p 'state "TODO" "TODO")))

(ert-deftest test-org-config-noop-state-log-p-real-change-not-noop ()
  "Normal: a genuine state change is not a no-op."
  (should-not (cj/org--noop-state-log-p 'state "DONE" "TODO")))

(ert-deftest test-org-config-noop-state-log-p-nil-prev-not-noop ()
  "Boundary: a nil previous state (initial log) is not a no-op."
  (should-not (cj/org--noop-state-log-p 'state "TODO" nil)))

(ert-deftest test-org-config-noop-state-log-p-non-state-purpose-not-noop ()
  "Boundary: identical strings under a non-state purpose are not suppressed."
  (should-not (cj/org--noop-state-log-p 'note "x" "x")))

(ert-deftest test-org-config-noop-state-log-p-nil-both-not-noop ()
  "Error: a nil/nil state pair is not a suppressible no-op."
  (should-not (cj/org--noop-state-log-p 'state nil nil)))

(ert-deftest test-org-config-suppress-advice-skips-noop ()
  "Normal: the advice does NOT call through for a no-op state transition."
  (let ((called nil))
    (cj/org--suppress-noop-state-log
     (lambda (&rest _) (setq called t)) 'state "TODO" "TODO")
    (should-not called)))

(ert-deftest test-org-config-suppress-advice-passes-real-change ()
  "Normal: the advice calls through for a genuine state change."
  (let ((called nil))
    (cj/org--suppress-noop-state-log
     (lambda (&rest _) (setq called t)) 'state "DONE" "TODO")
    (should called)))

(provide 'test-org-config-noop-state-log)
;;; test-org-config-noop-state-log.el ends here