diff --git a/tests/test-org-ql.el b/tests/test-org-ql.el index cd0a846..aa564f5 100644 --- a/tests/test-org-ql.el +++ b/tests/test-org-ql.el @@ -2111,7 +2111,84 @@ with keyword arg NOW in PLIST." (it "Refuses to link to non-file-backed buffer" (expect (var-after-link-save-open 'org-ql-view-buffers-files link-buffer query :buffer link-buffer) - :to-throw 'user-error '("Views that search non-file-backed buffers can’t be linked to")))))) + :to-throw 'user-error '("Views that search non-file-backed buffers can’t be linked to")))) + (describe "Completion for Files/buffers" + (describe "Contracting org-ql-view-buffers-files" + (it "org-agenda-files from list" + (spy-on 'org-agenda-files :and-return-value temp-filenames) + (expect (org-ql-view--contract-buffers-files temp-filenames) :to-equal "org-agenda-files")) + (it "org-directory" + (spy-on 'org-ql-search-directories-files :and-return-value temp-filenames) + (spy-on 'org-agenda-files :and-return-value '()) + (expect (org-ql-view--contract-buffers-files temp-filenames) :to-equal temp-filenames)) + (it "buffer" + (with-current-buffer (org-ql-test-data-buffer "data.org") + (expect (org-ql-view--contract-buffers-files (current-buffer)) :to-equal "buffer"))) + (it "org-agenda-files from symbol" + (spy-on 'org-agenda-files :and-return-value temp-filenames) + (expect (org-ql-view--contract-buffers-files 'org-agenda-files) :to-equal "org-agenda-files") + (expect (org-ql-view--contract-buffers-files #'org-agenda-files) :to-equal "org-agenda-files")) + (it "Non specific list" + (let ((value1 '("a.org" "b.org")) + (value2 'a)) + (expect (org-ql-view--contract-buffers-files value1) :to-equal value1) + (expect (org-ql-view--contract-buffers-files value2) :to-equal value2)))) + (describe "Expanding org-ql-view-buffers-files" + (it "all" + (let* ((buffer-names (list (make-temp-file "test" nil ".org") (make-temp-file "test" nil ".other"))) + (buffers (mapcar #'get-buffer-create buffer-names))) + (save-excursion + (switch-to-buffer (car buffers)) + (org-mode)) + (spy-on 'buffer-list :and-return-value buffers) + (expect (org-ql-view--expand-buffers-files "all") :to-equal (list (car buffers))))) + (it "org-agenda-files" + (spy-on 'org-agenda-files :and-return-value "value for org-agenda-files") + (expect (org-ql-view--expand-buffers-files "org-agenda-files") :to-equal "value for org-agenda-files")) + (it "org-directory" + (spy-on 'org-ql-search-directories-files :and-return-value "value for org-directory") + (expect (org-ql-view--expand-buffers-files "org-directory") :to-equal "value for org-directory")) + (it "buffer" + (with-temp-buffer + (expect (org-ql-view--expand-buffers-files "buffer") :to-equal (current-buffer)))) + (it "literal values" + (with-temp-buffer + (expect (org-ql-view--expand-buffers-files (current-buffer)) :to-equal (current-buffer))) + (let ((test-buffer (get-buffer-create (make-temp-file "test")))) + (expect (org-ql-view--expand-buffers-files test-buffer) :to-equal test-buffer)) + (let ((test-list '(1 2 3))) + (expect (org-ql-view--expand-buffers-files test-list) :to-equal test-list)) + (let ((string-literal "this is a string")) + (expect (org-ql-view--expand-buffers-files string-literal) :to-equal string-literal)))) + (describe "Testing org-ql-view--complete-buffers-files" + (it "org-agenda-files" + (let ((org-ql-view-buffers-files temp-filenames)) + (spy-on 'org-ql-view--contract-buffers-files :and-call-through) + (spy-on 'org-agenda-files :and-return-value temp-filenames) + (spy-on 'completing-read :and-return-value "org-agenda-files") + (expect (org-ql-view--complete-buffers-files) :to-equal temp-filenames) + (expect 'org-ql-view--contract-buffers-files :to-have-been-called-with temp-filenames) + (expect 'completing-read :to-have-been-called-with "Buffers/Files: " + (list 'buffer 'org-agenda-files 'org-directory 'all) + nil nil "org-agenda-files"))) + (it "nil" + (let ((org-ql-view-buffers-files nil)) + (spy-on 'completing-read :and-return-value nil) + (expect (org-ql-view--complete-buffers-files) :to-equal nil) + (expect 'completing-read :to-have-been-called-with "Buffers/Files: " + (list 'buffer 'org-agenda-files 'org-directory 'all) + nil nil nil))) + (it "list" + (let ((org-ql-view-buffers-files '(1 2 3))) + (spy-on 'completing-read :and-return-value nil) + (expect (org-ql-view--complete-buffers-files) :to-equal org-ql-view-buffers-files) + (expect 'completing-read :not :to-have-been-called))) + (it "buffer" + (let ((org-ql-view-buffers-files (get-buffer-create (make-temp-file "test")))) + (spy-on 'completing-read :and-return-value nil) + (expect (org-ql-view--complete-buffers-files) :to-equal org-ql-view-buffers-files) + (expect 'completing-read :not :to-have-been-called))))))) + ;; MAYBE: Also test `org-ql-views', although I already know it works now. ;; (describe "org-ql-views")