graph_parser_test.cljs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. (ns logseq.graph-parser-test
  2. (:require [cljs.test :refer [deftest testing is]]
  3. [clojure.string :as string]
  4. [logseq.graph-parser :as graph-parser]
  5. [logseq.db :as ldb]
  6. [logseq.graph-parser.block :as gp-block]
  7. [datascript.core :as d]))
  8. (def foo-edn
  9. "Example exported whiteboard page as an edn exportable."
  10. '{:blocks
  11. [{:block/content "foo content",
  12. :block/format :markdown,
  13. :block/unordered true}],
  14. :pages
  15. ({:block/format :markdown,
  16. :block/whiteboard? true,
  17. :block/original-name "my foo whiteboard"})})
  18. (deftest parse-file
  19. (testing "id properties"
  20. (let [conn (ldb/start-conn)]
  21. (graph-parser/parse-file conn "foo.md" "- id:: 628953c1-8d75-49fe-a648-f4c612109098" {})
  22. (is (= [{:id "628953c1-8d75-49fe-a648-f4c612109098"}]
  23. (->> (d/q '[:find (pull ?b [*])
  24. :in $
  25. :where [?b :block/content] [(missing? $ ?b :block/name)]]
  26. @conn)
  27. (map first)
  28. (map :block/properties)))
  29. "id as text has correct :block/properties"))
  30. (let [conn (ldb/start-conn)]
  31. (graph-parser/parse-file conn "foo.md" "- id:: [[628953c1-8d75-49fe-a648-f4c612109098]]" {})
  32. (is (= [{:id #{"628953c1-8d75-49fe-a648-f4c612109098"}}]
  33. (->> (d/q '[:find (pull ?b [*])
  34. :in $
  35. :where [?b :block/content] [(missing? $ ?b :block/name)]]
  36. @conn)
  37. (map first)
  38. (map :block/properties)))
  39. "id as linked ref has correct :block/properties")))
  40. (testing "unexpected failure during block extraction"
  41. (let [conn (ldb/start-conn)
  42. deleted-page (atom nil)]
  43. (with-redefs [gp-block/with-pre-block-if-exists (fn stub-failure [& _args]
  44. (throw (js/Error "Testing unexpected failure")))]
  45. (try
  46. (graph-parser/parse-file conn "foo.md" "- id:: 628953c1-8d75-49fe-a648-f4c612109098"
  47. {:delete-blocks-fn (fn [page _file]
  48. (reset! deleted-page page))})
  49. (catch :default _)))
  50. (is (= nil @deleted-page)
  51. "Page should not be deleted when there is unexpected failure"))))
  52. (defn- test-property-order [num-properties]
  53. (let [conn (ldb/start-conn)
  54. properties (mapv #(keyword (str "p" %)) (range 0 num-properties))
  55. text (->> properties
  56. (map #(str (name %) ":: " (name %) "-value"))
  57. (string/join "\n"))
  58. ;; Test page properties and block properties
  59. body (str text "\n- " text)
  60. _ (graph-parser/parse-file conn "foo.md" body {})
  61. properties-orders (->> (d/q '[:find (pull ?b [*])
  62. :in $
  63. :where [?b :block/content] [(missing? $ ?b :block/name)]]
  64. @conn)
  65. (map first)
  66. (map :block/properties-order))]
  67. (is (every? vector? properties-orders)
  68. "Order is persisted as a vec to avoid edn serialization quirks")
  69. (is (= [properties properties] properties-orders)
  70. "Property order")))
  71. (deftest properties-order
  72. (testing "Sort order and persistence of a few properties"
  73. (test-property-order 4))
  74. (testing "Sort order and persistence of 10 properties"
  75. (test-property-order 10)))
  76. (testing "parsing whiteboard page"
  77. (let [conn (ldb/start-conn)]
  78. (graph-parser/parse-file conn "/whiteboards/foo.edn" (pr-str foo-edn) {})
  79. (is (= {:block/name "foo" :block/file {:file/path "/whiteboards/foo.edn"}}
  80. (let [blocks (d/q '[:find (pull ?b [* {:block/parent
  81. [:block/name
  82. {:block/file
  83. [:file/path]}]}])
  84. :in $
  85. :where [?b :block/content] [(missing? $ ?b :block/name)]]
  86. @conn)
  87. parent (:block/parent (ffirst blocks))]
  88. parent))
  89. "parsed block in the whiteboard page has correct parent page"))))