test(e2e): open 2 instances, login, create rtc-graph

This commit is contained in:
rcmerci
2025-04-24 19:03:22 +08:00
parent e7edd933c7
commit e3734264fc
6 changed files with 116 additions and 9 deletions

View File

@@ -1,4 +1,4 @@
{:extra-indents {missionary.core/sp [[:block 0]]
missionary.core/ap [[:block 0]]
frontend.common.missionary/run-task [[:inner 0]]}
:sort-ns-references? true}
{:extra-indents {missionary.core/sp [[:block 0]]
missionary.core/ap [[:block 0]]
frontend.common.missionary/run-task [[:inner 0]]}
:sort-ns-references? true}

4
clj-e2e/.cljfmt.edn Normal file
View File

@@ -0,0 +1,4 @@
{:extra-indents {missionary.core/sp [[:block 0]]
missionary.core/ap [[:block 0]]
frontend.common.missionary/run-task [[:inner 0]]}
:sort-ns-references? true}

View File

@@ -4,7 +4,7 @@
io.github.pfeodrippe/wally {:git/url "https://github.com/logseq/wally"
:sha "6b0583701fc64ec5177eec6577e33bb8d9115d61"}
;; io.github.zmedelis/bosquet {:mvn/version "2025.03.28"}
}
org.clj-commons/claypoole {:mvn/version "1.2.2"}}
:aliases
{:build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.5"}}
:ns-default build}

View File

@@ -4,7 +4,8 @@
[clojure.test :refer [is]]
[wally.main :as w]
[wally.selectors :as ws])
(:import (com.microsoft.playwright.assertions PlaywrightAssertions)))
(:import [com.microsoft.playwright.assertions PlaywrightAssertions]
[com.microsoft.playwright TimeoutError]))
(def assert-that PlaywrightAssertions/assertThat)
@@ -39,6 +40,11 @@
(def press w/keyboard-press)
(defn cmdk
[input-text]
(press "Meta+k")
(input input-text))
(defn search
[text]
(w/click :#search-button)
@@ -147,3 +153,44 @@
(def mac? (= "Mac OS X" (System/getProperty "os.name")))
(def mod-key (if mac? "Meta" "Control"))
(defn login-test-account
[& {:keys [username password]
:or {username "e2etest"
password "Logseq-e2e"}}]
(w/eval-js "localStorage.setItem(\"login-enabled\",true);")
(w/click "button[title=\"More\"]")
(w/click "div:text(\"Login\")")
(input username)
(press "Tab")
(input password)
(w/click "button[type=\"submit\"]:text(\"Sign in\")")
(w/wait-for-not-visible ".cp__user-login"))
(defn new-graph
[graph-name enable-sync?]
(cmdk "add a db graph")
(w/click (w/get-by-label "Add a DB graph"))
(w/wait-for "h2:text(\"Create a new graph\")")
(w/click "input[placeholder=\"your graph name\"]")
(input graph-name)
(when enable-sync?
(w/click "button#rtc-sync"))
(w/click "button:text(\"Submit\")")
(when enable-sync?
(w/wait-for "button.cloud.on.idle" {:timeout 20000})))
(defn wait-for-remote-graph
[graph-name]
(cmdk "all graphs")
(w/click (w/get-by-label "Go to all graphs"))
(dotimes [i 5]
(prn :wait-for-remote-graph-try i)
(w/click "span:text(\"Refresh\")")
(try
(w/wait-for (str "span:has-text(\"" graph-name "\")"))
(catch TimeoutError e
(when (= 4 i)
(throw e))))))

View File

@@ -4,8 +4,9 @@
;; TODO: save trace
;; TODO: parallel support
(defn open-page
[f & {:keys [headless]
:or {headless true}}]
[f & {:keys [headless port]
:or {headless true
port 3002}}]
(w/with-page-open
(w/make-page {:headless headless
:persistent false
@@ -13,5 +14,31 @@
;; Set `slow-mo` lower to find more flaky tests
;; :slow-mo 30
})
(w/navigate "http://localhost:3002")
(w/navigate (str "http://localhost:" port))
(f)))
(def *page1 (atom nil))
(def *page2 (atom nil))
(defn open-2-pages
"Use `*page1` and `*page2` in `f`"
[f & {:keys [headless port]
:or {headless true
port 3002}}]
(let [p1 (w/make-page {:headless headless
:persistent false
:slow-mo 100})
p2 (w/make-page {:headless headless
:persistent false
:slow-mo 100})]
(run!
#(w/with-page %
(w/navigate (str "http://localhost:" port)))
[p1 p2])
(reset! *page1 p1)
(reset! *page2 p2)
(binding [w/*page* (delay (throw (ex-info "Don't use *page*, use *page1* and *page2* instead" {})))]
(f))
(w/with-page-open p1)
(w/with-page-open p2)))

View File

@@ -0,0 +1,29 @@
(ns logseq.e2e.rtc-basic-test
(:require
[clojure.test :refer [deftest testing is use-fixtures]]
[com.climate.claypoole :as cp]
[logseq.e2e.fixtures :as fixtures :refer [*page1 *page2]]
[logseq.e2e.util :as util]
[wally.main :as w]
[wally.repl :as repl]))
(use-fixtures :once fixtures/open-2-pages)
;; (use-fixtures :once #(fixtures/open-2-pages % :headless false :port 3001))
(deftest rtc-basic-test
(let [graph-name (str "rtc-graph-" (.toEpochMilli (java.time.Instant/now)))]
(testing "open 2 app instances"
(cp/prun!
2
#(w/with-page %
(util/login-test-account))
[@*page1 @*page2])
(w/with-page @*page1
(util/new-graph graph-name true))
(w/with-page @*page2
(util/wait-for-remote-graph graph-name)))))
(comment
(def xxx (future (clojure.test/run-tests)))
(future-cancel xxx))