Просмотр исходного кода

fix: don't notify source client with presence update

Tienson Qin 2 недель назад
Родитель
Сommit
2ea618b76f

+ 3 - 3
deps/db-sync/src/logseq/db_sync/worker/handler/ws.cljs

@@ -20,9 +20,9 @@
         (let [editing-block-uuid (:editing-block-uuid message)
               user (presence/get-user self ws)]
           (presence/update-presence! self ws {:editing-block-uuid editing-block-uuid})
-          (ws/broadcast! self nil {:type "presence"
-                                   :editing-block-uuid editing-block-uuid
-                                   :user-id (:user-id user)}))
+          (ws/broadcast! self ws {:type "presence"
+                                  :editing-block-uuid editing-block-uuid
+                                  :user-id (:user-id user)}))
 
         "pull"
         (let [raw-since (:since message)

+ 1 - 0
deps/db-sync/test/logseq/db_sync/test_runner.cljs

@@ -3,6 +3,7 @@
             [logseq.db-sync.node-adapter-test]
             [logseq.db-sync.node-config-test]
             [logseq.db-sync.platform-test]
+            [logseq.db-sync.worker-handler-ws-test]
             [shadow.test :as st]
             [shadow.test.env :as env]))
 

+ 27 - 0
deps/db-sync/test/logseq/db_sync/worker_handler_ws_test.cljs

@@ -0,0 +1,27 @@
+(ns logseq.db-sync.worker-handler-ws-test
+  (:require [cljs.test :refer [deftest is]]
+            [logseq.db-sync.protocol :as protocol]
+            [logseq.db-sync.worker.handler.ws :as ws-handler]
+            [logseq.db-sync.worker.presence :as presence]
+            [logseq.db-sync.worker.ws :as ws]))
+
+(deftest presence-message-broadcast-excludes-source-client-test
+  (let [source-ws #js {:readyState 1}
+        peer-ws #js {:readyState 1}
+        send-events (atom [])
+        self #js {:state #js {:getWebSockets (fn [] #js [source-ws peer-ws])}}
+        raw (protocol/encode-message {:type "presence"
+                                      :editing-block-uuid "block-1"})]
+    (with-redefs [presence/get-user (fn [_self _ws] {:user-id "user-1"})
+                  presence/update-presence! (fn [_self _ws _patch] nil)
+                  ws/send! (fn [target msg]
+                             (swap! send-events conj {:ws target
+                                                      :msg msg}))]
+      (ws-handler/handle-ws-message! self source-ws raw))
+
+    (is (= [peer-ws]
+           (mapv :ws @send-events)))
+    (is (= [{:type "presence"
+             :editing-block-uuid "block-1"
+             :user-id "user-1"}]
+           (mapv :msg @send-events)))))