diff --git a/clj-e2e/src/logseq/e2e/assert.clj b/clj-e2e/src/logseq/e2e/assert.clj index 3835423c6e..c101f1ac63 100644 --- a/clj-e2e/src/logseq/e2e/assert.clj +++ b/clj-e2e/src/logseq/e2e/assert.clj @@ -5,8 +5,9 @@ (def assert-that PlaywrightAssertions/assertThat) (defn assert-is-visible + "Multiple elements may match `q`, check and wait for the first element to be visible." [q] - (-> (w/-query q) assert-that .isVisible) + (-> q w/query first assert-that .isVisible) true) (defn assert-is-hidden @@ -23,3 +24,7 @@ (assert-is-hidden ".selection-action-bar") (assert-is-visible "#search-button") true) + +(defn assert-graph-loaded? + [] + (assert-is-visible "span.block-title-wrap")) diff --git a/clj-e2e/src/logseq/e2e/block.clj b/clj-e2e/src/logseq/e2e/block.clj new file mode 100644 index 0000000000..d9b77b83e2 --- /dev/null +++ b/clj-e2e/src/logseq/e2e/block.clj @@ -0,0 +1,41 @@ +(ns logseq.e2e.block + (:require [logseq.e2e.assert :as assert] + [logseq.e2e.keyboard :as k] + [logseq.e2e.util :as util] + [wally.main :as w] + [clojure.string :as string])) + +(defn open-last-block + [] + (util/double-esc) + (assert/assert-in-normal-mode?) + (w/click (last (w/query ".ls-page-blocks .ls-block .block-content")))) + +(defn new-block + [title] + (k/enter) + (util/input title)) + +(defn save-block + [text] + (util/input text)) + +(defn delete-blocks + "Delete the current block if in editing mode, otherwise, delete all the selected blocks." + [] + (let [editor (util/get-editor)] + (when editor (util/exit-edit)) + (k/backspace))) + +;; TODO: support tree +(defn new-blocks + [titles] + (open-last-block) + (let [value (util/get-edit-content)] + (if (string/blank? value) ; empty block + (do + (save-block (first titles)) + (doseq [title (rest titles)] + (new-block title))) + (doseq [title titles] + (new-block title))))) diff --git a/clj-e2e/src/logseq/e2e/graph.clj b/clj-e2e/src/logseq/e2e/graph.clj index 1a5332d579..853b0a9749 100644 --- a/clj-e2e/src/logseq/e2e/graph.clj +++ b/clj-e2e/src/logseq/e2e/graph.clj @@ -1,11 +1,17 @@ (ns logseq.e2e.graph - (:require [logseq.e2e.util :as util] + (:require [logseq.e2e.assert :as assert] + [logseq.e2e.util :as util] [wally.main :as w])) (defn- refresh-all-remote-graphs [] (w/click "span:text(\"Refresh\")")) +(defn goto-all-graphs + [] + (util/search "go to all graphs") + (w/click (w/get-by-label "Go to all graphs"))) + (defn new-graph [graph-name enable-sync?] (util/search "add a db graph") @@ -21,14 +27,19 @@ (defn wait-for-remote-graph [graph-name] - (util/search "go to all graphs") - (w/click (w/get-by-label "Go to all graphs")) + (goto-all-graphs) (util/repeat-until-visible 5 - (format "div[aria-label='e2e %s']" graph-name) + (format "div[aria-label='e2e logseq_db_%s']" graph-name) refresh-all-remote-graphs)) (defn remove-remote-graph [graph-name] (wait-for-remote-graph graph-name) - (w/click (format "div[aria-label='e2e %s'] a:has-text(\"Remove (server)\")" graph-name)) + (w/click (format "div[aria-label='e2e logseq_db_%s'] a:has-text(\"Remove (server)\")" graph-name)) (w/click "div[role='alertdialog'] button:text('ok')")) + +(defn switch-graph + [to-graph-name] + (goto-all-graphs) + (w/click (format "div[aria-label='e2e logseq_db_%1$s'] span:text('%1$s')" to-graph-name)) + (assert/assert-graph-loaded?)) diff --git a/clj-e2e/src/logseq/e2e/playwright_page.clj b/clj-e2e/src/logseq/e2e/playwright_page.clj index cdef80fb80..6aa82961c2 100644 --- a/clj-e2e/src/logseq/e2e/playwright_page.clj +++ b/clj-e2e/src/logseq/e2e/playwright_page.clj @@ -1,6 +1,7 @@ (ns logseq.e2e.playwright-page "operations on playwright pages." - (:require [logseq.e2e.config :as config] + (:require [logseq.e2e.assert :as assert] + [logseq.e2e.config :as config] [wally.main :as w])) (defn get-pages @@ -16,7 +17,7 @@ (.navigate page url) ;; wait the demo graph loaded (w/with-page page - (w/wait-for "span.block-title-wrap")))))) + (assert/assert-graph-loaded?)))))) (defn close-pages [pages] diff --git a/clj-e2e/src/logseq/e2e/util.clj b/clj-e2e/src/logseq/e2e/util.clj index 4cd33ac1c0..094ec13135 100644 --- a/clj-e2e/src/logseq/e2e/util.clj +++ b/clj-e2e/src/logseq/e2e/util.clj @@ -1,7 +1,6 @@ (ns logseq.e2e.util (:refer-clojure :exclude [type]) - (:require [clojure.string :as string] - [clojure.test :refer [is]] + (:require [clojure.test :refer [is]] [logseq.e2e.assert :as assert] [logseq.e2e.keyboard :as k] [wally.main :as w] @@ -87,26 +86,10 @@ [] (count-elements ".ls-page-blocks .ls-block")) -(defn new-block - [title] - (k/enter) - (input title)) - -(defn save-block - [text] - (input text)) - (defn exit-edit [] (k/esc)) -(defn delete-blocks - "Delete the current block if in editing mode, otherwise, delete all the selected blocks." - [] - (let [editor (get-editor)] - (when editor (exit-edit)) - (k/backspace))) - (defn get-text [locator] (if (string? locator) @@ -141,25 +124,6 @@ [] (indent-outdent false)) -(defn open-last-block - [] - (double-esc) - (assert/assert-in-normal-mode?) - (w/click (last (w/query ".ls-page-blocks .ls-block .block-content")))) - -;; TODO: support tree -(defn new-blocks - [titles] - (open-last-block) - (let [value (get-edit-content)] - (if (string/blank? value) ; empty block - (do - (save-block (first titles)) - (doseq [title (rest titles)] - (new-block title))) - (doseq [title titles] - (new-block title))))) - (defn repeat-keyboard [n shortcut] (dotimes [_i n] diff --git a/clj-e2e/test/logseq/e2e/editor_test.clj b/clj-e2e/test/logseq/e2e/editor_test.clj index 0defdfc583..daf020d54a 100644 --- a/clj-e2e/test/logseq/e2e/editor_test.clj +++ b/clj-e2e/test/logseq/e2e/editor_test.clj @@ -2,6 +2,7 @@ (:require [clojure.string :as string] [clojure.test :refer [deftest testing is use-fixtures]] + [logseq.e2e.block :as b] [logseq.e2e.fixtures :as fixtures] [logseq.e2e.keyboard :as k] [logseq.e2e.util :as util] @@ -12,7 +13,7 @@ (deftest commands-test (testing "/command trigger popup" (util/new-page "Test") - (util/save-block "b1") + (b/save-block "b1") (util/type " /") (w/wait-for ".ui__popover-content") (is (some? (w/find-one-by-text "span" "Node reference"))) @@ -21,7 +22,7 @@ (testing "Node reference" (testing "Page reference" - (util/new-block "/") + (b/new-block "/") (util/type "Node eferen") (w/wait-for ".ui__popover-content") (k/enter) @@ -31,7 +32,7 @@ (util/exit-edit) (is (= "Another page" (util/get-text "a.page-ref")))) (testing "Block reference" - (util/new-block "/") + (b/new-block "/") (util/type "Node eferen") (w/wait-for ".ui__popover-content") (k/enter) diff --git a/clj-e2e/test/logseq/e2e/multi_tabs_test.clj b/clj-e2e/test/logseq/e2e/multi_tabs_test.clj index f4e15d97f6..86ef8c9e51 100644 --- a/clj-e2e/test/logseq/e2e/multi_tabs_test.clj +++ b/clj-e2e/test/logseq/e2e/multi_tabs_test.clj @@ -1,6 +1,8 @@ (ns logseq.e2e.multi-tabs-test (:require [clojure.test :refer [deftest testing is use-fixtures]] + [com.climate.claypoole :as cp] + [logseq.e2e.block :as b] [logseq.e2e.fixtures :as fixtures] [logseq.e2e.playwright-page :as pw-page] [logseq.e2e.util :as util] @@ -9,6 +11,17 @@ (use-fixtures :once fixtures/open-new-context) +(defn- add-blocks-and-check-on-other-tabs + [new-blocks add-blocks-tab check-blocks-tabs] + (let [new-blocks-count (count new-blocks)] + (w/with-page add-blocks-tab + (b/new-blocks new-blocks)) + (cp/prun! + (count check-blocks-tabs) + #(w/with-page % + (is (= (util/page-blocks-count) new-blocks-count))) + check-blocks-tabs))) + (deftest multi-tabs-test (testing "edit on one tab, check all tab's blocks are same" (pw-page/open-pages fixtures/*pw-ctx* 3) @@ -16,8 +29,14 @@ blocks-to-add (map #(str "b" %) (range 10))] (is (= 3 (count pages))) (w/with-page p1 - (util/new-blocks blocks-to-add)) + (b/new-blocks blocks-to-add)) (w/with-page p2 (is (= (util/page-blocks-count) (count blocks-to-add)))) (w/with-page p3 - (is (= (util/page-blocks-count) (count blocks-to-add))))))) + (is (= (util/page-blocks-count) (count blocks-to-add)))))) + + ;; (testing "add new graphs, and do switching graphs on tabs" + ;; (let [[p1 p2 p3 :as pages] (pw-page/get-pages fixtures/*pw-ctx*)] + ;; (w/with-page p1 + ;; (repl/pause)))) + ) diff --git a/clj-e2e/test/logseq/e2e/outliner_test.clj b/clj-e2e/test/logseq/e2e/outliner_test.clj index 490a208c71..d9ac2790f7 100644 --- a/clj-e2e/test/logseq/e2e/outliner_test.clj +++ b/clj-e2e/test/logseq/e2e/outliner_test.clj @@ -3,6 +3,7 @@ [clojure.test :refer [deftest testing is use-fixtures]] [logseq.e2e.fixtures :as fixtures] [logseq.e2e.keyboard :as k] + [logseq.e2e.block :as b] [logseq.e2e.util :as util] [wally.main :as w])) @@ -12,19 +13,19 @@ (util/new-page "p1") ;; a page block and a child block (is (= 2 (util/blocks-count))) - (util/new-blocks ["first block" "second block"]) + (b/new-blocks ["first block" "second block"]) (util/exit-edit) (is (= 3 (util/blocks-count)))) (deftest indent-and-outdent-test (util/new-page "p2") - (util/new-blocks ["b1" "b2"]) + (b/new-blocks ["b1" "b2"]) (testing "simple indent and outdent" (util/indent) (util/outdent)) (testing "indent a block with its children" - (util/new-block "b3") + (b/new-block "b3") (util/indent) (k/arrow-up) (util/indent) @@ -33,8 +34,8 @@ (is (< x1 x2 x3)))) (testing "unindent a block with its children" - (util/open-last-block) - (util/new-blocks ["b4" "b5"]) + (b/open-last-block) + (b/new-blocks ["b4" "b5"]) (util/indent) (k/arrow-up) (util/outdent) @@ -44,7 +45,7 @@ (deftest move-up-down-test (util/new-page "p3") - (util/new-blocks ["b1" "b2" "b3" "b4"]) + (b/new-blocks ["b1" "b2" "b3" "b4"]) (util/repeat-keyboard 2 "Shift+ArrowUp") (let [contents (util/get-page-blocks-contents)] (is (= contents ["b1" "b2" "b3" "b4"]))) @@ -58,20 +59,20 @@ (deftest delete-test (testing "Delete blocks case 1" (util/new-page "p4") - (util/new-blocks ["b1" "b2" "b3" "b4"]) - (util/delete-blocks) ; delete b4 + (b/new-blocks ["b1" "b2" "b3" "b4"]) + (b/delete-blocks) ; delete b4 (util/repeat-keyboard 2 "Shift+ArrowUp") ; select b3 and b2 - (util/delete-blocks) + (b/delete-blocks) (is (= "b1" (util/get-edit-content))) (is (= 1 (util/page-blocks-count)))) (testing "Delete block with its children" (util/new-page "p5") - (util/new-blocks ["b1" "b2" "b3" "b4"]) + (b/new-blocks ["b1" "b2" "b3" "b4"]) (util/indent) (k/arrow-up) (util/indent) (k/arrow-up) - (util/delete-blocks) + (b/delete-blocks) (is (= "b1" (util/get-edit-content))) (is (= 1 (util/page-blocks-count))))) diff --git a/src/main/frontend/components/repo.cljs b/src/main/frontend/components/repo.cljs index 2edfec71d7..ba41175b7b 100644 --- a/src/main/frontend/components/repo.cljs +++ b/src/main/frontend/components/repo.cljs @@ -69,14 +69,14 @@ :let [only-cloud? (and remote? (nil? root)) db-based? (config/db-based-graph? url)]] [:div.flex.justify-between.mb-4.items-center.group {:key (or url GraphUUID) - :aria-label (str "e2e " GraphName)} + :aria-label (str "e2e " url)} [:div [:span.flex.items-center.gap-1 (normalized-graph-label repo (fn [] (when-not (state/sub :rtc/downloading-graph-uuid) (cond - root ; exists locally + root ; exists locally (state/pub-event! [:graph/switch url]) (and db-based? remote?)