aboutsummaryrefslogtreecommitdiff
path: root/tests/test-pearl-title-sync.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-pearl-title-sync.el')
-rw-r--r--tests/test-pearl-title-sync.el16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/test-pearl-title-sync.el b/tests/test-pearl-title-sync.el
index 6fbd284..512794c 100644
--- a/tests/test-pearl-title-sync.el
+++ b/tests/test-pearl-title-sync.el
@@ -161,5 +161,21 @@ stripped heading, so an unedited bracketed title is never clobbered on Linear."
(test-pearl--in-org "* Plain heading\nno id\n"
(should-error (pearl-sync-current-issue-title) :type 'user-error)))
+(ert-deftest test-pearl-sync-title-push-failure-keeps-provenance ()
+ "A failed title push keeps the hash and the edited heading for retry."
+ (let ((updates nil)
+ (stored (secure-hash 'sha256 "Old Title")))
+ (test-pearl--in-org
+ (format "*** TODO [#B] Edited Title\n:PROPERTIES:\n:LINEAR-ID: a\n:LINEAR-TITLE-SHA256: %s\n:END:\n"
+ stored)
+ (cl-letf (((symbol-function 'pearl--fetch-issue-title-async)
+ (lambda (_id cb) (funcall cb '(:title "Old Title" :updated-at "t0"))))
+ ((symbol-function 'pearl--update-issue-title-async)
+ (lambda (_id title cb) (push title updates) (funcall cb '(:success nil)))))
+ (pearl-sync-current-issue-title)
+ (should (equal '("Edited Title") updates))
+ (should (string= stored (org-entry-get nil "LINEAR-TITLE-SHA256")))
+ (should (string= "Edited Title" (pearl--issue-title-at-point)))))))
+
(provide 'test-pearl-title-sync)
;;; test-pearl-title-sync.el ends here