aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-calibredb-epub-config--open-to-favorites.el57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/test-calibredb-epub-config--open-to-favorites.el b/tests/test-calibredb-epub-config--open-to-favorites.el
new file mode 100644
index 000000000..d11618081
--- /dev/null
+++ b/tests/test-calibredb-epub-config--open-to-favorites.el
@@ -0,0 +1,57 @@
+;;; test-calibredb-epub-config--open-to-favorites.el --- in-progress open filter -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; `cj/--calibredb-open-to-favorites' advises `calibredb' :after so every launch
+;; lands filtered to `calibredb-favorite-keyword' (Craig's "in-progress" books).
+;; It scopes the filter to the TAG field (sets `calibredb-tag-filter-p', clears
+;; the other filter-p flags) before delegating to `calibredb-search-keyword-filter',
+;; so the keyword can't over-match in a book's title or description. It no-ops
+;; when no usable keyword is set.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'calibredb-epub-config)
+
+;; calibredb defcustom + internal flags; declared special so `let' binds them
+;; dynamically (all unbound under `make test', which never runs the use-package
+;; :config or loads calibredb).
+(defvar calibredb-favorite-keyword)
+(defvar calibredb-tag-filter-p)
+(defvar calibredb-favorite-filter-p)
+(defvar calibredb-author-filter-p)
+(defvar calibredb-date-filter-p)
+(defvar calibredb-format-filter-p)
+
+(ert-deftest test-calibredb-open-to-favorites-applies-keyword-scoped-to-tags ()
+ "Normal: with a favorite keyword set, the filter runs with that keyword and is
+scoped to the tag field (so it can't over-match a description); a stale
+non-tag filter flag is cleared."
+ (let ((applied :unset)
+ (calibredb-favorite-keyword "in-progress")
+ (calibredb-tag-filter-p nil)
+ (calibredb-favorite-filter-p t) ; stale, must be cleared
+ (calibredb-author-filter-p nil)
+ (calibredb-date-filter-p nil)
+ (calibredb-format-filter-p nil))
+ (cl-letf (((symbol-function 'calibredb-search-keyword-filter)
+ (lambda (kw) (setq applied kw))))
+ (cj/--calibredb-open-to-favorites))
+ (should (equal applied "in-progress")) ; keyword applied
+ (should (eq calibredb-tag-filter-p t)) ; scoped to the tag field
+ (should-not calibredb-favorite-filter-p))) ; stale flag cleared
+
+(ert-deftest test-calibredb-open-to-favorites-noop-without-usable-keyword ()
+ "Boundary/Error: nil, empty, or non-string keyword applies no filter."
+ (dolist (kw (list nil "" 42))
+ (let ((applied :unset)
+ (calibredb-favorite-keyword kw))
+ (cl-letf (((symbol-function 'calibredb-search-keyword-filter)
+ (lambda (k) (setq applied k))))
+ (cj/--calibredb-open-to-favorites))
+ (should (eq applied :unset)))))
+
+(provide 'test-calibredb-epub-config--open-to-favorites)
+;;; test-calibredb-epub-config--open-to-favorites.el ends here