fix: don't notify source client with presence update

This commit is contained in:
Tienson Qin
2026-02-06 15:55:55 +08:00
parent e6b7fdd16e
commit 2ea618b76f
3 changed files with 31 additions and 3 deletions

View File

@@ -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)

View File

@@ -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]))

View File

@@ -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)))))