Browse Source

test(e2e): split ns config,playwright-page, add multi-tabs-test

rcmerci 10 months ago
parent
commit
465fd1870c

+ 25 - 14
clj-e2e/dev/user.clj

@@ -1,18 +1,36 @@
 (ns user
   "fns used on repl"
   (:require [clojure.test :refer [run-tests run-test]]
-            [logseq.e2e.util :as util]
-            [wally.main :as w]
-            [wally.repl :as repl]
             [logseq.e2e.editor-test]
+            [logseq.e2e.fixtures :as fixtures]
             [logseq.e2e.outliner-test]
             [logseq.e2e.rtc-basic-test]
-            [logseq.e2e.fixtures :as fixtures]))
+            [logseq.e2e.multi-tabs-test]
+            [logseq.e2e.util :as util]
+            [logseq.e2e.config :as config]
+            [wally.main :as w]
+            [wally.repl :as repl]))
 
 ;; Use port 3001 for local testing
-(reset! fixtures/*port 3001)
+(reset! config/*port 3001)
 ;; show ui
-(reset! fixtures/*headless false)
+(reset! config/*headless false)
+
+(defn run-editor-test
+  []
+  (future (run-tests 'logseq.e2e.editor-test)))
+
+(defn run-outliner-test
+  []
+  (future (run-tests 'logseq.e2e.outliner-test)))
+
+(defn run-rtc-basic-test
+  []
+  (future (run-tests 'logseq.e2e.rtc-basic-test)))
+
+(defn run-multi-tabs-test
+  []
+  (future (run-tests 'logseq.e2e.multi-tabs-test)))
 
 (comment
 
@@ -21,20 +39,13 @@
      repl/pause
      {:headless false}))
 
-;; You can put `(repl/pause)` in any test to pause the tests,
+  ;; You can put `(repl/pause)` in any test to pause the tests,
   ;; this allows us to continue experimenting with the current page.
   (repl/pause)
 
   ;; To resume the tests, close the page/context/browser
   (repl/resume)
 
-  ;; Run all the tests in specific ns with `future` to not block repl
-  (future (run-tests 'logseq.e2e.editor-test))
-
-  (future (run-tests 'logseq.e2e.outliner-test))
-
-  (future (run-tests 'logseq.e2e.rtc-basic-test))
-
   ;; Run specific test
   (future (run-test logseq.e2e.editor-test/commands-test))
 

+ 4 - 0
clj-e2e/src/logseq/e2e/config.clj

@@ -0,0 +1,4 @@
+(ns logseq.e2e.config)
+
+(defonce *port (atom 3002))
+(defonce *headless (atom true))

+ 21 - 0
clj-e2e/src/logseq/e2e/playwright_page.clj

@@ -0,0 +1,21 @@
+(ns logseq.e2e.playwright-page
+  (:require [logseq.e2e.config :as config]))
+
+(defn get-pages
+  [pw-ctx]
+  (.pages pw-ctx))
+
+(defn open-pages
+  [pw-ctx n]
+  (let [url (str "http://localhost:" @config/*port)]
+    (dotimes [_i n]
+      (.. pw-ctx newPage (navigate url)))))
+
+(defn close-pages
+  [pages]
+  (doseq [p pages]
+    (.close p)))
+
+(defn close-pw-ctx
+  [pw-ctx]
+  (.close pw-ctx))

+ 22 - 8
clj-e2e/test/logseq/e2e/fixtures.clj

@@ -1,21 +1,20 @@
 (ns logseq.e2e.fixtures
-  (:require [wally.main :as w]))
-
-(defonce *port (atom 3002))
-(defonce *headless (atom true))
+  (:require [wally.main :as w]
+            [logseq.e2e.config :as config]
+            [logseq.e2e.playwright-page :as pw-page]))
 
 ;; TODO: save trace
 ;; TODO: parallel support
 (defn open-page
   [f & {:keys [headless port]}]
   (w/with-page-open
-    (w/make-page {:headless (or headless @*headless)
+    (w/make-page {:headless (or headless @config/*headless)
                   :persistent false
                   :slow-mo 100
                   ;; Set `slow-mo` lower to find more flaky tests
                   ;; :slow-mo 30
                   })
-    (w/navigate (str "http://localhost:" (or port @*port)))
+    (w/navigate (str "http://localhost:" (or port @config/*port)))
     (f)))
 
 (def *page1 (atom nil))
@@ -24,13 +23,13 @@
 (defn open-2-pages
   "Use `*page1` and `*page2` in `f`"
   [f & {:keys [headless port]}]
-  (let [headless (or headless @*headless)
+  (let [headless (or headless @config/*headless)
         page-opts {:headless headless
                    :persistent false
                    :slow-mo 100}
         p1 (w/make-page page-opts)
         p2 (w/make-page page-opts)
-        port' (or port @*port)]
+        port' (or port @config/*port)]
     (run!
      #(w/with-page %
         (w/navigate (str "http://localhost:" port')))
@@ -42,3 +41,18 @@
       (f))
     (w/with-page-open p1)
     (w/with-page-open p2)))
+
+(def ^:dynamic *pw-ctx* nil)
+(defn open-new-context
+  "create a new playwright-context in `*pw-ctx*`"
+  [f]
+  (let [page-opts {:headless false
+                   :persistent false
+                   :slow-mo 100}
+        p @(w/make-page page-opts)
+        ctx (.newContext (.browser (.context p)))]
+    ;; context for p is no longer needed
+    (.close (.context p))
+    (binding [*pw-ctx* ctx]
+      (f)
+      (pw-page/close-pw-ctx *pw-ctx*))))

+ 19 - 0
clj-e2e/test/logseq/e2e/multi_tabs_test.clj

@@ -0,0 +1,19 @@
+(ns logseq.e2e.multi-tabs-test
+  (:require
+   [clojure.test :refer [deftest testing is use-fixtures]]
+   [logseq.e2e.fixtures :as fixtures]
+   [logseq.e2e.util :as util]
+   [wally.main :as w]
+   [wally.repl :as repl]
+   [logseq.e2e.playwright-page :as pw-page]))
+
+(use-fixtures :once fixtures/open-new-context)
+
+(deftest multi-tabs-test
+  (testing "create 3 local graphs"
+    (pw-page/open-pages fixtures/*pw-ctx* 3)
+    (is (= 3 (count (pw-page/get-pages fixtures/*pw-ctx*))))
+    ;; (util/new-graph "graph1" false)
+    ;; (util/new-graph "graph2" false)
+    ;; (util/new-graph "graph3" false)
+    ))