diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-pearl-favorites.el | 17 | ||||
| -rw-r--r-- | tests/test-pearl-reverse-compile.el | 78 |
2 files changed, 88 insertions, 7 deletions
diff --git a/tests/test-pearl-favorites.el b/tests/test-pearl-favorites.el index 55808b3..3f1452f 100644 --- a/tests/test-pearl-favorites.el +++ b/tests/test-pearl-favorites.el @@ -56,6 +56,23 @@ For an issue node, IDENTIFIER fills the issue's user-facing key." (should (string= "Active bugs" (plist-get p :title))) (should (string= "view-1" (plist-get p :id))))) +(ert-deftest test-pearl-normalize-favorite-custom-view-blank-title-uses-name () + "A favorited custom view with a blank own title takes the customView's name. +Linear populates Favorite.title only for favorite folders, so an entity favorite +arrives with a null/empty title and the entity's own name is the only display +string -- the favorites query selects customView.name for exactly this." + (let* ((node (list (cons 'id "fav-customView") + (cons 'type "customView") + (cons 'title nil) + (cons 'url "https://linear.app/x/view/v1") + (cons 'sortOrder 0.1) + (cons 'customView (list (cons 'id "view-1") + (cons 'name "Pearl Open Issues"))))) + (p (pearl--normalize-favorite node))) + (should (eq 'view (plist-get p :kind))) + (should (string= "Pearl Open Issues" (plist-get p :title))) + (should (string= "view-1" (plist-get p :id))))) + (ert-deftest test-pearl-normalize-favorite-project () (let ((p (pearl--normalize-favorite (test-pearl-fav--node "project" "Platform" "https://linear.app/x/project/p1" 0.2 diff --git a/tests/test-pearl-reverse-compile.el b/tests/test-pearl-reverse-compile.el index 382c72a..209d9a6 100644 --- a/tests/test-pearl-reverse-compile.el +++ b/tests/test-pearl-reverse-compile.el @@ -195,13 +195,77 @@ ;;; copy-down command-side: candidate builder + finish -(ert-deftest test-pearl-linear-view-favorites-extracts-views () - "Only view-kind favorites become copy-down candidates, as (title . id)." - (let ((favs (list (list :kind 'view :title "V1" :id "vid-1") - (list :kind 'project :title "P" :id "pid") - (list :kind 'view :title "V2" :id "vid-2")))) - (should (equal (pearl--linear-view-favorites favs) - '(("V1" . "vid-1") ("V2" . "vid-2")))))) +(ert-deftest test-pearl-save-linear-view-locally-saves-current-view () + "When the buffer shows a Linear view, the command offers to save that view +directly -- without touching favorites or fetching the custom-view list -- and +hands its name + id to the finisher." + (let (finished favorites-called custom-views-called) + (cl-letf (((symbol-function 'pearl--require-account-context) (lambda (&rest _) nil)) + ((symbol-function 'pearl--read-active-source) + (lambda () '(:type view :name "Pearl Open Issues" :id "view-1"))) + ((symbol-function 'pearl--read-yes-no) (lambda (&rest _) t)) + ((symbol-function 'pearl--progress) (lambda (&rest _) nil)) + ((symbol-function 'pearl--favorites-async) + (lambda (&rest _) (setq favorites-called t))) + ((symbol-function 'pearl--custom-views) + (lambda (&rest _) (setq custom-views-called t) nil)) + ((symbol-function 'pearl--customview-filterdata-async) + (lambda (view-id cb) (funcall cb (list view-id)))) + ((symbol-function 'pearl--save-linear-view-locally-finish) + (lambda (title view-id _fd) (setq finished (cons title view-id))))) + (pearl-save-linear-view-locally) + (should (equal finished '("Pearl Open Issues" . "view-1"))) + (should-not favorites-called) + (should-not custom-views-called)))) + +(ert-deftest test-pearl-save-linear-view-locally-picks-from-all-views () + "With no view in the buffer, the picker lists ALL custom views (not just +favorites) and hands the chosen view's name + id to the finisher." + (let (finished favorites-called) + (cl-letf (((symbol-function 'pearl--require-account-context) (lambda (&rest _) nil)) + ((symbol-function 'pearl--read-active-source) (lambda () nil)) + ((symbol-function 'pearl--progress) (lambda (&rest _) nil)) + ((symbol-function 'pearl--favorites-async) + (lambda (&rest _) (setq favorites-called t))) + ((symbol-function 'pearl--custom-views) + (lambda (&rest _) + '(((id . "v1") (name . "Pearl Open Issues")) + ((id . "v2") (name . "My bugs"))))) + ((symbol-function 'completing-read) (lambda (&rest _) "My bugs")) + ((symbol-function 'pearl--customview-filterdata-async) + (lambda (view-id cb) (funcall cb (list view-id)))) + ((symbol-function 'pearl--save-linear-view-locally-finish) + (lambda (title view-id _fd) (setq finished (cons title view-id))))) + (pearl-save-linear-view-locally) + (should (equal finished '("My bugs" . "v2"))) + (should-not favorites-called)))) + +(ert-deftest test-pearl-save-linear-view-locally-declined-current-falls-to-picker () + "Declining the current-view offer falls through to the all-views picker." + (let (finished) + (cl-letf (((symbol-function 'pearl--require-account-context) (lambda (&rest _) nil)) + ((symbol-function 'pearl--read-active-source) + (lambda () '(:type view :name "Current" :id "cur"))) + ((symbol-function 'pearl--read-yes-no) (lambda (&rest _) nil)) + ((symbol-function 'pearl--progress) (lambda (&rest _) nil)) + ((symbol-function 'pearl--custom-views) + (lambda (&rest _) '(((id . "v9") (name . "Picked"))))) + ((symbol-function 'completing-read) (lambda (&rest _) "Picked")) + ((symbol-function 'pearl--customview-filterdata-async) + (lambda (view-id cb) (funcall cb (list view-id)))) + ((symbol-function 'pearl--save-linear-view-locally-finish) + (lambda (title view-id _fd) (setq finished (cons title view-id))))) + (pearl-save-linear-view-locally) + (should (equal finished '("Picked" . "v9")))))) + +(ert-deftest test-pearl-save-linear-view-locally-no-views-errors () + "With no current view and no custom views, the command errors rather than +silently saving nothing." + (cl-letf (((symbol-function 'pearl--require-account-context) (lambda (&rest _) nil)) + ((symbol-function 'pearl--read-active-source) (lambda () nil)) + ((symbol-function 'pearl--progress) (lambda (&rest _) nil)) + ((symbol-function 'pearl--custom-views) (lambda (&rest _) nil))) + (should-error (pearl-save-linear-view-locally) :type 'user-error))) (ert-deftest test-pearl-save-linear-view-locally-finish-nil-filterdata-errors () "A nil filterData (fetch failure / no filter) errors rather than saving." |
