From 536852b103cc2c3dd525872d108b01cdf92a71b0 Mon Sep 17 00:00:00 2001 From: rcmerci Date: Wed, 1 Nov 2023 18:12:12 +0800 Subject: [PATCH] enhance(rtc): add testcase --- src/test/frontend/db/rtc/fixture.cljs | 2 + src/test/frontend/db/rtc/mock.cljs | 37 ++++++------------- .../frontend/db/rtc/rtc_effects_test.cljs | 35 ++++++++++++++++-- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/src/test/frontend/db/rtc/fixture.cljs b/src/test/frontend/db/rtc/fixture.cljs index b1ed3e8d9c..407d35fcfd 100644 --- a/src/test/frontend/db/rtc/fixture.cljs +++ b/src/test/frontend/db/rtc/fixture.cljs @@ -10,6 +10,8 @@ [frontend.db.rtc.ops-idb-store :as ops-idb-store])) (def *test-rtc-state (atom nil)) +(def test-graph-uuid "e6d04ed7-bbc4-4ed2-a91b-69f3c0b9459d") +(def test-graph-init-local-t 1) (defn- init-state-helper [] diff --git a/src/test/frontend/db/rtc/mock.cljs b/src/test/frontend/db/rtc/mock.cljs index 23d0fa4978..af325848c7 100644 --- a/src/test/frontend/db/rtc/mock.cljs +++ b/src/test/frontend/db/rtc/mock.cljs @@ -4,7 +4,7 @@ [spy.core :as spy])) ;;; websocket -(defrecord Mock-WebSocket [onopen onmessage onclose onerror readyState push-data-chan ^:mutable push-data-fn] +(defrecord Mock-WebSocket [onopen onmessage onclose onerror readyState push-data-to-client-chan ^:mutable handler-fn] Object (close [_] (prn :mock-ws :closed) @@ -14,16 +14,16 @@ js/JSON.parse (js->clj :keywordize-keys true) rtc-const/data-to-ws-decoder)] - (async/put! onmessage msg))) + (handler-fn msg push-data-to-client-chan))) - (set-push-data-fn [_ f] - (set! push-data-fn f))) + (set-handler-fn [_ f] + (set! handler-fn f))) -(defn default-push-data-fn - [msg push-data-chan] +(defn default-handler + [msg push-data-to-client-chan] (case (:action msg) "register-graph-updates" - (async/offer! push-data-chan (select-keys msg [:req-id])) + (async/offer! push-data-to-client-chan (select-keys msg [:req-id])) ;; default nil)) @@ -31,27 +31,12 @@ (defn mock-websocket [data-from-ws-chan] - (let [stop-push-data-loop-ch (async/chan) - ws (->Mock-WebSocket nil (async/chan 10) nil nil 1 - data-from-ws-chan (spy/spy default-push-data-fn))] - (async/go-loop [] - (let [{:keys [stop msg]} - (async/alt! - stop-push-data-loop-ch {:stop true} - (.-onmessage ws) ([msg] {:msg msg}))] - (cond - (or stop (nil? msg)) - (do (prn :mock-ws-loop-stop) nil) - - msg - (do (when-let [push-data-fn (:push-data-fn ws)] - (push-data-fn msg (:push-data-chan ws))) - (recur))))) - ws)) + (->Mock-WebSocket nil (async/chan 10) nil nil 1 + data-from-ws-chan (spy/spy default-handler))) -;; (defn mock-ws-push-data-fn +;; (defn set-ws-handler-fn ;; [ws f] -;; (.set-push-data-fn ws f)) +;; (.set-handler-fn ws f)) ;;; websocket ends ;;;; diff --git a/src/test/frontend/db/rtc/rtc_effects_test.cljs b/src/test/frontend/db/rtc/rtc_effects_test.cljs index 8f42ae7508..f015d6e1f7 100644 --- a/src/test/frontend/db/rtc/rtc_effects_test.cljs +++ b/src/test/frontend/db/rtc/rtc_effects_test.cljs @@ -3,7 +3,7 @@ These tests need to start the rtc-loop. Other simple fn tests are located at `frontend.db.rtc.rtc-fns-test`" (:require ["/frontend/idbkv" :as idb-keyval] - [cljs.core.async :as async :refer [!]] [clojure.test :as t :refer [deftest is use-fixtures]] [datascript.core :as d] [frontend.db.conn :as conn] @@ -30,8 +30,8 @@ (deftest rtc-loop-init-test (let [ws @(:*ws @rtc-fixture/*test-rtc-state) - push-data-fn (:push-data-fn ws) - last-ws-msg (first (spy/last-call push-data-fn))] + handler-fn (:handler-fn ws) + last-ws-msg (first (spy/last-call handler-fn))] (is (= "register-graph-updates" (:action last-ws-msg))))) @@ -80,3 +80,32 @@ (is (= ["update" {:block-uuid (str block-uuid2) :updated-attrs {:content nil}}] update-op-2))))) (reset) (done))))) + + + +(deftest push-data-from-ws-test-1 + (t/async + done + (idb-keyval-mock/with-reset-idb-keyval-mock reset + (go + (let [conn (conn/get-db test-helper/test-db false) + ws @(:*ws @rtc-fixture/*test-rtc-state) + push-data-to-client-chan (:push-data-to-client-chan ws)] + ;; set local-t & graph-uuid in mock-indexeddb-store + (! push-data-to-client-chan {:req-id "push-updates" + :t 2 :t-before 1 + :affected-blocks + {"26c4b513-e251-4ce9-a421-364b774eb736" + {:op :update-page + :self "26c4b513-e251-4ce9-a421-364b774eb736" + :page-name "push-data-from-ws-test-1" + :original-name "Push-Data-From-Ws-Test-1"}}}) + (