From fcb3097602b37f4b046ba4cb0ccfcf06be315de8 Mon Sep 17 00:00:00 2001 From: rcmerci Date: Thu, 25 Apr 2024 12:39:29 +0800 Subject: [PATCH] test: add a fixture to persist tx-data-log save the whole transact history to ease debugging --- src/test/frontend/worker/fixtures.cljs | 39 ++++++++++++-------- src/test/frontend/worker/undo_redo_test.cljs | 5 ++- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/test/frontend/worker/fixtures.cljs b/src/test/frontend/worker/fixtures.cljs index 6f2e8af6e..7f1275106 100644 --- a/src/test/frontend/worker/fixtures.cljs +++ b/src/test/frontend/worker/fixtures.cljs @@ -1,23 +1,11 @@ (ns frontend.worker.fixtures - (:require [datascript.core :as d] + (:require ["fs" :as fs-node] + [datascript.core :as d] [frontend.db.conn :as conn] [frontend.test.helper :as test-helper] [frontend.worker.db-listener :as worker-db-listener] - [frontend.worker.undo-redo :as worker-undo-redo])) - - -(defn listen-test-db-to-gen-undo-ops-fixture - [f] - (let [test-db-conn (conn/get-db test-helper/test-db-name-db-version false)] - (assert (some? test-db-conn)) - (worker-undo-redo/clear-undo-redo-stack) - (worker-db-listener/listen-db-changes! test-helper/test-db-name-db-version test-db-conn - {:handler-keys [:gen-undo-ops - ;; :sync-db-to-main-thread - ]}) - - (f) - (d/unlisten! test-db-conn :frontend.worker.db-listener/listen-db-changes!))) + [frontend.worker.undo-redo :as worker-undo-redo] + [logseq.db.sqlite.util :as sqlite-util])) (defn listen-test-db-fixture @@ -31,3 +19,22 @@ (f) (d/unlisten! test-db-conn :frontend.worker.db-listener/listen-db-changes!)))) + +(def ^:private *tx-log-name-index (atom 0)) +(defn listen-test-db-to-write-tx-log-json-file + "Write {:tx-log :init-db } to file 'tx-log-.json'" + [f] + (let [test-db-conn (conn/get-db test-helper/test-db-name-db-version false) + init-db @test-db-conn + *tx-log (atom [])] + (d/listen! test-db-conn :collect-tx-data + (fn [{:keys [tx-data]}] + (swap! *tx-log conj tx-data))) + (try + (f) + (finally + (let [file-name (str "tx-log-" @*tx-log-name-index ".json")] + (println "saving " file-name " ...") + (fs-node/writeFileSync file-name (sqlite-util/write-transit-str {:tx-log @*tx-log :init-db init-db})) + (swap! *tx-log-name-index inc)))) + (d/unlisten! test-db-conn :collect-tx-data))) diff --git a/src/test/frontend/worker/undo_redo_test.cljs b/src/test/frontend/worker/undo_redo_test.cljs index f89a611ce..0ac037521 100644 --- a/src/test/frontend/worker/undo_redo_test.cljs +++ b/src/test/frontend/worker/undo_redo_test.cljs @@ -27,7 +27,8 @@ (use-fixtures :each start-and-destroy-db - worker-fixtures/listen-test-db-to-gen-undo-ops-fixture) + (worker-fixtures/listen-test-db-fixture [:gen-undo-ops]) + worker-fixtures/listen-test-db-to-write-tx-log-json-file) (def ^:private gen-non-exist-block-uuid gen/uuid) @@ -118,7 +119,7 @@ :frontend.worker.undo-redo/move-block (assert (= (:block-origin-left (second op)) (:block/uuid (:block/left (d/entity current-db [:block/uuid (:block-uuid (second op))])))) - {:op op :tx-data (:tx-data tx) :x (keys tx)}) + {:op op :entity (into {} (d/entity current-db [:block/uuid (:block-uuid (second op))]))}) :frontend.worker.undo-redo/update-block (assert (some? (d/entity current-db [:block/uuid (:block-uuid (second op))]))