;;; test-pearl-open.el --- Tests for open-issue-in-browser -*- lexical-binding: t; -*- ;; Copyright (C) 2026 Craig Jennings ;; Author: Craig Jennings ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Tests for `pearl-open-current-issue', which opens the issue at point ;; in the browser from its LINEAR-URL property. `browse-url' is stubbed. ;;; Code: (require 'test-bootstrap (expand-file-name "test-bootstrap.el")) (require 'cl-lib) (defmacro test-pearl--in-org (content &rest body) "Run BODY in an org-mode temp buffer holding CONTENT at point-min." (declare (indent 1)) `(with-temp-buffer (insert ,content) (org-mode) (goto-char (point-min)) ,@body)) (ert-deftest test-pearl-open-current-issue-visits-url () "The command passes the heading's LINEAR-URL to `browse-url'." (let ((visited nil)) (test-pearl--in-org "*** TODO Title\n:PROPERTIES:\n:LINEAR-ID: a\n:LINEAR-URL: https://linear.app/x/ENG-1\n:END:\nbody\n" (cl-letf (((symbol-function 'browse-url) (lambda (url &rest _) (setq visited url)))) (goto-char (point-max)) (pearl-open-current-issue) (should (string= "https://linear.app/x/ENG-1" visited)))))) (ert-deftest test-pearl-open-current-issue-no-url-errors () "An issue heading without a LINEAR-URL signals a user error, no browse." (let ((visited nil)) (test-pearl--in-org "*** TODO Title\n:PROPERTIES:\n:LINEAR-ID: a\n:END:\n" (cl-letf (((symbol-function 'browse-url) (lambda (url &rest _) (setq visited url)))) (should-error (pearl-open-current-issue) :type 'user-error) (should-not visited))))) (ert-deftest test-pearl-open-current-issue-not-on-issue-errors () "Running outside a heading signals a user error." (test-pearl--in-org "plain text, no heading\n" (should-error (pearl-open-current-issue) :type 'user-error))) (provide 'test-pearl-open) ;;; test-pearl-open.el ends here