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

test(rtc): add ns client-steps, add asserts to step2

rcmerci 1 год назад
Родитель
Сommit
895dd349e0

+ 6 - 15
src/rtc_e2e_test/basic_edits_test.cljs

@@ -1,7 +1,6 @@
 (ns basic-edits-test
-  (:require [client1-edits]
-            [client2-edits]
-            [cljs.test :as t :refer [deftest testing]]
+  (:require [client-steps]
+            [cljs.test :as t :refer [deftest]]
             [const]
             [fixture]
             [helper]
@@ -20,18 +19,10 @@
    (js/Promise.
     (if const/is-client1?
       (m/sp
-        (testing "create page first"
-          (client1-edits/step1--create-page))
-        (testing "start rtc for client1"
-          (m/? client1-edits/step2--task-start-rtc))
-        (testing "wait page1 synced"
-          (m/? client1-edits/step3--task-wait-page1-to-remote))
-        (testing "insert 300 blocks"
-          (m/? client1-edits/step4--task-insert-300-blocks-to-remote))
+        (doseq [task client-steps/client1-steps]
+          (m/? task))
         (done))
       (m/sp
-        (testing "start rtc for client2"
-          (m/? client2-edits/step1--task-start-rtc))
-        (testing "wait page1 synced from client1"
-          (m/? client2-edits/step2--task-wait-page1-synced))
+        (doseq [task client-steps/client2-steps]
+          (m/? task))
         (done))))))

+ 0 - 62
src/rtc_e2e_test/client1_edits.cljs

@@ -1,62 +0,0 @@
-(ns client1-edits
-  (:require [cljs.test :as t :refer [is]]
-            [const]
-            [datascript.core :as d]
-            [frontend.worker.rtc.client-op :as client-op]
-            [frontend.worker.rtc.core :as rtc-core]
-            [frontend.worker.rtc.log-and-state :as rtc-log-and-state]
-            [helper]
-            [logseq.outliner.batch-tx :as batch-tx]
-            [missionary.core :as m]))
-
-(defn step1--create-page
-  []
-  (let [conn (helper/get-downloaded-test-conn)
-        tx-data (const/tx-data-map :create-page)]
-    (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :skip-store-conn true}
-      (d/transact! conn tx-data))
-    (is (=
-         #{[:update-page const/page1-uuid]
-           [:update const/page1-uuid
-            [[:block/title "[\"~#'\",\"basic-edits-test\"]" true]
-             [:block/created-at "[\"~#'\",1724836490809]" true]
-             [:block/updated-at "[\"~#'\",1724836490809]" true]
-             [:block/type "[\"~#'\",\"page\"]" true]]]
-           [:move const/block1-uuid]
-           [:update const/block1-uuid
-            [[:block/updated-at "[\"~#'\",1724836490810]" true]
-             [:block/created-at "[\"~#'\",1724836490810]" true]
-             [:block/title "[\"~#'\",\"block1\"]" true]]]}
-         (set (map helper/simplify-client-op (client-op/get-all-ops const/downloaded-test-repo)))))))
-
-(def step2--task-start-rtc
-  (m/sp
-    (let [r (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))]
-      (is (nil? r)))))
-
-(def step3--task-wait-page1-to-remote
-  (m/sp
-    (let [r (m/? (m/timeout
-                  (m/reduce (fn [_ v]
-                              (when (and (= :rtc.log/push-local-update (:type v))
-                                         (empty? (client-op/get-all-ops const/downloaded-test-repo)))
-                                (is (nil? (:ex-data v)))
-                                (reduced v)))
-                            rtc-log-and-state/rtc-log-flow)
-                  6000 :timeout))]
-      (is (not= :timeout r)))))
-
-(def step4--task-insert-300-blocks-to-remote
-  (m/sp
-    (let [conn (helper/get-downloaded-test-conn)]
-      (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :skip-store-conn true}
-        (d/transact! conn (const/tx-data-map :insert-300-blocks)))
-      (let [r (m/? (m/timeout
-                  (m/reduce (fn [_ v]
-                              (when (and (= :rtc.log/push-local-update (:type v))
-                                         (empty? (client-op/get-all-ops const/downloaded-test-repo)))
-                                (is (nil? (:ex-data v)))
-                                (reduced v)))
-                            rtc-log-and-state/rtc-log-flow)
-                  10000 :timeout))]
-        (is (not= :timeout r))))))

+ 0 - 33
src/rtc_e2e_test/client2_edits.cljs

@@ -1,33 +0,0 @@
-(ns client2-edits
-  (:require [cljs.test :as t :refer [is]]
-            [const]
-            [datascript.core :as d]
-            [frontend.common.missionary-util :as c.m]
-            [frontend.worker.rtc.core :as rtc-core]
-            [helper]
-            [missionary.core :as m]))
-
-(def step1--task-start-rtc
-  (m/sp
-    (let [r (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))]
-      (is (nil? r)))))
-
-(def step2--task-wait-page1-synced
-  (c.m/backoff
-   (take 4 c.m/delays)
-   (m/sp
-     (let [conn (helper/get-downloaded-test-conn)
-           page1 (d/pull @conn '[*] [:block/uuid const/page1-uuid])
-           block1 (d/pull @conn '[*] [:block/uuid const/block1-uuid])]
-       (when-not (:block/uuid page1)
-         (throw (ex-info "wait page1 synced" {:missionary/retry true})))
-       (is
-        (= {:block/title "basic-edits-test"
-            :block/name "basic-edits-test"
-            :block/type "page"}
-           (select-keys page1 [:block/title :block/name :block/type])))
-       (is
-        (= {:block/title "block1"
-            :block/order "a0"
-            :block/parent {:db/id (:db/id page1)}}
-           (select-keys block1 [:block/title :block/order :block/parent])))))))

+ 120 - 0
src/rtc_e2e_test/client_steps.cljs

@@ -0,0 +1,120 @@
+(ns client-steps
+  (:require [cljs.test :as t :refer [is]]
+            [const]
+            [datascript.core :as d]
+            [frontend.common.missionary-util :as c.m]
+            [frontend.worker.rtc.client-op :as client-op]
+            [frontend.worker.rtc.core :as rtc-core]
+            [frontend.worker.rtc.log-and-state :as rtc-log-and-state]
+            [helper]
+            [logseq.db :as ldb]
+            [logseq.outliner.batch-tx :as batch-tx]
+            [missionary.core :as m]))
+
+(def step0
+  {:client1
+   (m/sp
+     (let [conn (helper/get-downloaded-test-conn)
+           tx-data (const/tx-data-map :create-page)]
+       (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :skip-store-conn true}
+         (d/transact! conn tx-data))
+       (is (=
+            #{[:update-page const/page1-uuid]
+              [:update const/page1-uuid
+               [[:block/title "[\"~#'\",\"basic-edits-test\"]" true]
+                [:block/created-at "[\"~#'\",1724836490809]" true]
+                [:block/updated-at "[\"~#'\",1724836490809]" true]
+                [:block/type "[\"~#'\",\"page\"]" true]]]
+              [:move const/block1-uuid]
+              [:update const/block1-uuid
+               [[:block/updated-at "[\"~#'\",1724836490810]" true]
+                [:block/created-at "[\"~#'\",1724836490810]" true]
+                [:block/title "[\"~#'\",\"block1\"]" true]]]}
+            (set (map helper/simplify-client-op (client-op/get-all-ops const/downloaded-test-repo)))))))
+   :client2 nil})
+
+(def step1
+  "client1: start rtc, wait page1, client1->remote
+  client2: start rtc, wait page1, remote->client2"
+  {:client1
+   (m/sp
+     (let [r (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))]
+       (is (nil? r))
+       (let [r (m/? (m/timeout
+                     (m/reduce (fn [_ v]
+                                 (when (and (= :rtc.log/push-local-update (:type v))
+                                            (empty? (client-op/get-all-ops const/downloaded-test-repo)))
+                                   (is (nil? (:ex-data v)))
+                                   (reduced v)))
+                               rtc-log-and-state/rtc-log-flow)
+                     6000 :timeout))]
+         (is (not= :timeout r)))))
+   :client2
+   (m/sp
+    (let [r (m/? (rtc-core/new-task--rtc-start const/downloaded-test-repo const/test-token))]
+      (is (nil? r)))
+    (m/?
+     (c.m/backoff
+      (take 4 c.m/delays)
+      (m/sp
+       (let [conn (helper/get-downloaded-test-conn)
+             page1 (d/pull @conn '[*] [:block/uuid const/page1-uuid])
+             block1 (d/pull @conn '[*] [:block/uuid const/block1-uuid])]
+         (when-not (:block/uuid page1)
+           (throw (ex-info "wait page1 synced" {:missionary/retry true})))
+         (is
+          (= {:block/title "basic-edits-test"
+              :block/name "basic-edits-test"
+              :block/type "page"}
+             (select-keys page1 [:block/title :block/name :block/type])))
+         (is
+          (= {:block/title "block1"
+              :block/order "a0"
+              :block/parent {:db/id (:db/id page1)}}
+             (select-keys block1 [:block/title :block/order :block/parent]))))))))})
+
+(def step2
+  "client1: insert 300 blocks, wait for changes to sync to remote
+  client2: wait for blocks to sync from remote"
+  {:client1
+   (m/sp
+     (let [conn (helper/get-downloaded-test-conn)]
+       (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :skip-store-conn true}
+         (d/transact! conn (const/tx-data-map :insert-300-blocks)))
+       (let [r (m/? (m/timeout
+                     (m/reduce (fn [_ v]
+                                 (when (and (= :rtc.log/push-local-update (:type v))
+                                            (empty? (client-op/get-all-ops const/downloaded-test-repo)))
+                                   (is (nil? (:ex-data v)))
+                                   (reduced v)))
+                               rtc-log-and-state/rtc-log-flow)
+                     10000 :timeout))]
+         (is (not= :timeout r)))))
+   :client2
+   (c.m/backoff
+    (take 4 c.m/delays)
+    (m/sp
+      (let [conn (helper/get-downloaded-test-conn)
+            page (d/pull @conn '[*] [:block/uuid const/page2-uuid])]
+        (when-not (:block/uuid page)
+          (throw (ex-info "wait for page to be synced" {:missionary/retry true})))
+        (let [blocks (ldb/sort-by-order (ldb/get-page-blocks @conn (:db/id page)))]
+          (is (= 300 (count blocks)))
+          (is (= (map #(str "x" %) (range 300))
+                 (map :block/title blocks)))))))})
+
+(defn- wrap-print-step-info
+  [steps client]
+  (map-indexed
+   (fn [idx step]
+     (m/sp
+       (println (str "[" client "]") "start step" idx)
+       (some-> (get step client) m/?)
+       (println (str "[" client "]") "end step" idx)))
+   steps))
+
+(def client1-steps
+  (wrap-print-step-info [step0 step1 step2] :client1))
+
+(def client2-steps
+  (wrap-print-step-info [step0 step1 step2] :client2))