From ec8109f8d00e9ecdfd618dc5586378ad3c35add2 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Thu, 16 Jun 2022 07:29:07 +0800 Subject: [PATCH] Add more outliner core tests --- src/main/frontend/modules/outliner/core.cljs | 33 ++++++++++++------- .../frontend/modules/outliner/core_test.cljs | 31 +++++++++++++++++ 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/frontend/modules/outliner/core.cljs b/src/main/frontend/modules/outliner/core.cljs index 182224ceee..9b9f8ebfa0 100644 --- a/src/main/frontend/modules/outliner/core.cljs +++ b/src/main/frontend/modules/outliner/core.cljs @@ -370,20 +370,29 @@ ;;; ### insert-blocks, delete-blocks, move-blocks -(defn- fix-top-level-blocks +(defn fix-top-level-blocks "Blocks with :block/level" [blocks] - (loop [blocks blocks - last-top-level-block nil - result []] - (if-let [block (first blocks)] - (if (= 1 (:block/level block)) - (let [block' (assoc block - :block/left {:db/id (:db/id last-top-level-block)} - :block/parent (:block/parent last-top-level-block))] - (recur (rest blocks) block (conj result block'))) - (recur (rest blocks) last-top-level-block (conj result block))) - result))) + (let [top-level-blocks (filter #(= (:block/level %) 1) blocks) + id->block (zipmap (map :db/id top-level-blocks) top-level-blocks) + uuid->block (zipmap (map :block/uuid top-level-blocks) top-level-blocks)] + (if (every? (fn [block] + (let [left (:block/left block) + id (if (map? left) (:db/id left) (second left))] + (some? (or (get id->block id) (get uuid->block id))))) (rest top-level-blocks)) + ;; no need to fix + blocks + (loop [blocks blocks + last-top-level-block nil + result []] + (if-let [block (first blocks)] + (if (= 1 (:block/level block)) + (let [block' (assoc block + :block/left {:db/id (:db/id last-top-level-block)} + :block/parent (:block/parent last-top-level-block))] + (recur (rest blocks) block (conj result block'))) + (recur (rest blocks) last-top-level-block (conj result block))) + result))))) (defn- insert-blocks-aux [blocks target-block {:keys [sibling? replace-empty-target? keep-uuid? move? outliner-op]}] diff --git a/src/test/frontend/modules/outliner/core_test.cljs b/src/test/frontend/modules/outliner/core_test.cljs index bd412d4877..564196db37 100644 --- a/src/test/frontend/modules/outliner/core_test.cljs +++ b/src/test/frontend/modules/outliner/core_test.cljs @@ -215,6 +215,37 @@ (outliner-core/indent-outdent-blocks! [(get-block 13) (get-block 14)] false)) (is (= [2 12 13 14 16] (get-children 22))))) +(deftest test-fix-top-level-blocks + (testing "no need to fix" + (let [blocks [{:block/uuid #uuid "62aa668b-e258-445d-aef6-5510054ff495", + :block/properties {}, + :block/left #:db{:id 144}, + :block/format :markdown, + :block/level 1, + :block/content "a", + :db/id 145, + :block/parent #:db{:id 144}, + :block/page #:db{:id 144}} + {:block/uuid #uuid "62aa668d-65d1-440c-849b-a0717f691193", + :block/properties {}, + :block/left #:db{:id 145}, + :block/format :markdown, + :block/level 1, + :block/content "b", + :db/id 146, + :block/parent #:db{:id 144}, + :block/page #:db{:id 144}} + {:block/uuid #uuid "62aa668e-f866-48ee-b8fe-737e101c548d", + :block/properties {}, + :block/left #:db{:id 146}, + :block/format :markdown, + :block/level 1, + :block/content "c", + :db/id 147, + :block/parent #:db{:id 144}, + :block/page #:db{:id 144}}]] + (= blocks (outliner-core/fix-top-level-blocks blocks))))) + (deftest test-outdent-blocks (testing " [1 [[2 [[3]