diff --git a/tests/roam-files/f1.org b/tests/roam-files/f1.org new file mode 100644 index 0000000..1effa2c --- /dev/null +++ b/tests/roam-files/f1.org @@ -0,0 +1,7 @@ +#+TITLE: File 1 + +link to [[file:nested/f1.org][Nested File 1]] +link to [[file:f2.org][File 2]] + +Arbitrary [[https://google.com][HTML]] link +Arbitrary text diff --git a/tests/roam-files/f2.org b/tests/roam-files/f2.org new file mode 100644 index 0000000..797d8bb --- /dev/null +++ b/tests/roam-files/f2.org @@ -0,0 +1,3 @@ +#+TITLE: File 2 + +This file has no links. diff --git a/tests/roam-files/nested/f1.org b/tests/roam-files/nested/f1.org new file mode 100644 index 0000000..a09eb3f --- /dev/null +++ b/tests/roam-files/nested/f1.org @@ -0,0 +1,4 @@ +#+TITLE: Nested File 1 + +Link to [[file:f2.org][Nested File 2]] +Link to [[file:../f1.org][File 1]] diff --git a/tests/roam-files/nested/f2.org b/tests/roam-files/nested/f2.org new file mode 100644 index 0000000..362ae4e --- /dev/null +++ b/tests/roam-files/nested/f2.org @@ -0,0 +1,3 @@ +#+TITLE: Nested File 2 + +Link to [[file:f1.org][Nested File 1]] diff --git a/tests/roam-files/no-title.org b/tests/roam-files/no-title.org new file mode 100644 index 0000000..d751e65 --- /dev/null +++ b/tests/roam-files/no-title.org @@ -0,0 +1 @@ +no title in this file :O diff --git a/tests/test-org-roam.el b/tests/test-org-roam.el index 21d779c..084afae 100644 --- a/tests/test-org-roam.el +++ b/tests/test-org-roam.el @@ -29,7 +29,63 @@ (require 'buttercup) (require 'org-roam) +(defun abs-path (file-path) + (file-truename (expand-file-name file-path org-roam-directory))) + ;;; Tests -(describe "Org-roam cache" - (it "Mock Test" - (expect t :to-be t))) +(describe "org-roam" + (before-all + (setq org-roam-directory (file-truename (concat default-directory "tests/roam-files")))) + + (it "org-roam--build-cache-async" + (expect org-roam-cache-initialized :to-be nil) + (expect (hash-table-count org-roam-forward-links-cache) :to-be 0) + (expect (hash-table-count org-roam-backward-links-cache) :to-be 0) + (expect (hash-table-count org-roam-titles-cache) :to-be 0) + + (org-roam--build-cache-async) + (sleep-for 3) ;; Because it's async + + ;; Caches should be populated + (expect org-roam-cache-initialized :to-be t) + (expect (hash-table-count org-roam-forward-links-cache) :to-be 3) + (expect (hash-table-count org-roam-backward-links-cache) :to-be 4) + (expect (hash-table-count org-roam-titles-cache) :to-be 4) + + ;; Forward cache + (let ((f1 (gethash (abs-path "f1.org") org-roam-forward-links-cache)) + (f2 (gethash (abs-path "f2.org") org-roam-forward-links-cache)) + (nested-f1 (gethash (abs-path "nested/f1.org") org-roam-forward-links-cache)) + (nested-f2 (gethash (abs-path "nested/f2.org") org-roam-forward-links-cache)) + (expected-f1 (list (abs-path "nested/f1.org") + (abs-path "f2.org"))) + (expected-nested-f1 (list (abs-path "nested/f2.org") + (abs-path "f1.org"))) + (expected-nested-f2 (list (abs-path "nested/f1.org")))) + + (expect f1 :to-have-same-items-as expected-f1) + (expect f2 :to-be nil) + (expect nested-f1 :to-have-same-items-as expected-nested-f1) + (expect nested-f2 :to-have-same-items-as expected-nested-f2)) + + ;; Backward cache + (let ((f1 (hash-table-keys (gethash (abs-path "f1.org") org-roam-backward-links-cache))) + (f2 (hash-table-keys (gethash (abs-path "f2.org") org-roam-backward-links-cache))) + (nested-f1 (hash-table-keys(gethash (abs-path "nested/f1.org") org-roam-backward-links-cache))) + (nested-f2 (hash-table-keys (gethash (abs-path "nested/f2.org") org-roam-backward-links-cache))) + (expected-f1 (list (abs-path "nested/f1.org"))) + (expected-f2 (list (abs-path "f1.org"))) + (expected-nested-f1 (list (abs-path "nested/f2.org") + (abs-path "f1.org"))) + (expected-nested-f2 (list (abs-path "nested/f1.org")))) + (expect f1 :to-have-same-items-as expected-f1) + (expect f2 :to-have-same-items-as expected-f2) + (expect nested-f1 :to-have-same-items-as expected-nested-f1) + (expect nested-f2 :to-have-same-items-as expected-nested-f2)) + + ;; Titles Cache + (expect (gethash (abs-path "f1.org") org-roam-titles-cache) :to-equal "File 1") + (expect (gethash (abs-path "f2.org") org-roam-titles-cache) :to-equal "File 2") + (expect (gethash (abs-path "nested/f1.org") org-roam-titles-cache) :to-equal "Nested File 1") + (expect (gethash (abs-path "nested/f2.org") org-roam-titles-cache) :to-equal "Nested File 2") + (expect (gethash (abs-path "no-title.org") org-roam-titles-cache) :to-be nil)))