瀏覽代碼

test(rtc): add helpers for asset-sync ut

rcmerci 1 年之前
父節點
當前提交
f45eb29d6e

+ 2 - 2
src/main/frontend/worker/rtc/asset_sync.cljs

@@ -108,11 +108,10 @@
     (chan)
     (go
       (<! (async/timeout 2000))
-      ;; TODO: get-unpushed-assets-update-count
       (pos? (op-mem-layer/get-unpushed-asset-update-count repo)))))
 
 (defn <loop-for-assets-sync
-  [state graph-uuid repo conn]
+  [state graph-uuid repo conn & {:keys [loop-started-ch]}]
   {:pre [(state-validator state)]}
   (go
     (reset! (:*repo state) repo)
@@ -125,6 +124,7 @@
           stop-assets-sync-loop-chan (chan)]
       (reset! (:*stop-asset-sync-loop-chan state) stop-assets-sync-loop-chan)
       (async/sub data-from-ws-pub "push-assets-updates" push-data-from-ws-ch)
+      (when loop-started-ch (async/close! loop-started-ch))
       (<! (go-loop [push-assets-update-ops-ch
                     (make-push-assets-update-ops-timeout-ch repo (not @*auto-push-assets-update-ops?))]
             (let [{:keys [continue push-data-from-ws client-assets-update stop]}

+ 13 - 0
src/test/frontend/worker/rtc/asset_sync_effects_test.cljs

@@ -0,0 +1,13 @@
+(ns frontend.worker.rtc.asset-sync-effects-test
+  "This ns include tests abouts asset-sync with other components.
+  These tests need to start the asset-sync-loop."
+  (:require [cljs.core.async :as async :refer [<! >! go timeout]]
+            [clojure.test :as t :refer [deftest is use-fixtures]]
+            [frontend.test.helper :include-macros true :as test-helper]
+            [frontend.worker.rtc.fixture :as rtc-fixture]))
+
+(use-fixtures :each
+  test-helper/start-and-destroy-db-map-fixture
+  rtc-fixture/listen-test-db-fixture
+  rtc-fixture/start-and-stop-asset-sync-loop-fixture
+  rtc-fixture/clear-op-mem-stores-fixture)

+ 48 - 11
src/test/frontend/worker/rtc/fixture.cljs

@@ -3,6 +3,7 @@
             [cljs.core.async :as async :refer [<! >! chan go]]
             [frontend.worker.rtc.mock :as rtc-mock]
             [frontend.worker.rtc.core :as rtc-core]
+            [frontend.worker.rtc.asset-sync :as asset-sync]
             [frontend.test.helper :as test-helper]
             [datascript.core :as d]
             [frontend.db.conn :as conn]
@@ -12,6 +13,7 @@
             [frontend.state :as state]))
 
 (def *test-rtc-state (atom nil))
+(def *test-asset-sync-state (atom nil))
 (def test-graph-uuid "e6d04ed7-bbc4-4ed2-a91b-69f3c0b9459d")
 (def test-graph-init-local-t 1)
 
@@ -22,10 +24,18 @@
     (assoc (rtc-core/init-state ws data-from-ws-chan test-helper/test-db "")
            :*auto-push-client-ops? (atom false))))
 
+(defn- init-state-helper-for-asset-sync-loop
+  []
+  (let [data-from-ws-chan (chan (async/sliding-buffer 100))
+        ws (rtc-mock/mock-websocket data-from-ws-chan)
+        rtc-state (rtc-core/init-state ws data-from-ws-chan test-helper/test-db "")]
+    (assoc (asset-sync/init-state-from-rtc-state rtc-state)
+           :*auto-push-assets-update-ops? (atom false))))
+
 (defn- <start-rtc-loop
   []
   (go
-    (let [graph-uuid "e56287f0-44de-487d-8b9f-02e91ec57d98" ; just random generated
+    (let [graph-uuid test-graph-uuid
           repo test-helper/test-db
           state (init-state-helper)
           loop-started-ch (chan)]
@@ -33,21 +43,48 @@
       (rtc-core/<loop-for-rtc state graph-uuid repo (db/get-db repo false) (state/get-date-formatter) :loop-started-ch loop-started-ch)
       (<! loop-started-ch))))
 
+(defn- <start-asset-sync-loop
+  []
+  (go
+    (let [graph-uuid test-graph-uuid
+          repo test-helper/test-db
+          state (init-state-helper-for-asset-sync-loop)
+          loop-started-ch (chan)]
+      (reset! *test-asset-sync-state state)
+      (asset-sync/<loop-for-assets-sync state graph-uuid repo (db/get-db repo false) :loop-started-ch loop-started-ch)
+      (<! loop-started-ch))))
+
 (def start-and-stop-rtc-loop-fixture
   {:before
    #(t/async done
-             (go
-               (<! (<start-rtc-loop))
-               (prn :<started-rtc-loop)
-               (done)))
+      (go
+        (<! (<start-rtc-loop))
+        (prn :<started-rtc-loop)
+        (done)))
+   :after
+   #(t/async done
+      (go
+        (when-let [stop-rtc-loop-chan (some-> (:*stop-rtc-loop-chan @*test-rtc-state) deref)]
+          (prn :stopping-rtc-loop)
+          (>! stop-rtc-loop-chan true))
+        (reset! *test-rtc-state nil)
+        (done)))})
+
+(def start-and-stop-asset-sync-loop-fixture
+  {:before
+   #(t/async done
+      (go
+        (<! (<start-asset-sync-loop))
+        (prn :<start-asset-sync-loop)
+        (done)))
    :after
    #(t/async done
-             (go
-               (when-let [stop-rtc-loop-chan (some-> (:*stop-rtc-loop-chan @*test-rtc-state) deref)]
-                 (prn :stopping-rtc-loop)
-                 (>! stop-rtc-loop-chan true))
-               (reset! *test-rtc-state nil)
-               (done)))})
+      (go
+        (when-let [stop-asset-sync-loop-chan (some-> (:*stop-asset-sync-loop-chan @*test-asset-sync-state) deref)]
+          (prn :stopping-asset-sync-loop)
+          (>! stop-asset-sync-loop-chan true))
+        (reset! *test-asset-sync-state nil)
+        (done)))})
 
 
 (def listen-test-db-fixture