瀏覽代碼

Add more commands e2e tests

Tienson Qin 6 月之前
父節點
當前提交
85c1e5c267

+ 7 - 5
clj-e2e/dev/user.clj

@@ -1,9 +1,11 @@
 (ns user
   "fns used on repl"
   (:require [clojure.test :refer [run-tests run-test]]
+            [logseq.e2e.block :as b]
+            [logseq.e2e.commands-test]
             [logseq.e2e.config :as config]
-            [logseq.e2e.editor-test]
             [logseq.e2e.fixtures :as fixtures]
+            [logseq.e2e.keyboard :as k]
             [logseq.e2e.multi-tabs-test]
             [logseq.e2e.outliner-test]
             [logseq.e2e.rtc-basic-test]
@@ -23,10 +25,10 @@
   (some-> (get @*futures test-name) future-cancel)
   (swap! *futures dissoc test-name))
 
-(defn run-editor-test
+(defn run-commands-test
   []
-  (->> (future (run-tests 'logseq.e2e.editor-test))
-       (swap! *futures assoc :editor-test)))
+  (->> (future (run-tests 'logseq.e2e.commands-test))
+       (swap! *futures assoc :commands-test)))
 
 (defn run-outliner-test
   []
@@ -65,7 +67,7 @@
     (w/wait-for (first (util/get-edit-block-container))
                 {:state :detached}))
 
-  (run-tests 'logseq.e2e.editor-test
+  (run-tests 'logseq.e2e.commands-test
              'logseq.e2e.multi-tabs-test
              'logseq.e2e.outliner-test
              'logseq.e2e.rtc-basic-test)

+ 6 - 0
clj-e2e/src/logseq/e2e/assert.clj

@@ -29,3 +29,9 @@
   []
   ;; there's some blocks visible now
   (assert-is-visible "span.block-title-wrap"))
+
+(defn assert-editor-mode
+  []
+  (let [klass ".editor-wrapper textarea"
+        editor (w/-query klass)]
+    (w/wait-for editor)))

+ 18 - 15
clj-e2e/src/logseq/e2e/block.clj

@@ -13,13 +13,29 @@
 
 (defn new-block
   [title]
-  (k/enter)
-  (util/input title))
+  (let [editor? (util/get-editor)]
+    (when-not editor? (open-last-block))
+    (assert/assert-editor-mode)
+    (k/enter)
+    (util/input title)))
 
 (defn save-block
   [text]
   (util/input text))
 
+;; TODO: support tree
+(defn new-blocks
+  [titles]
+  (let [editor? (util/get-editor)]
+    (when-not editor? (open-last-block))
+    (assert/assert-editor-mode)
+    (let [value (util/get-edit-content)]
+      (if (string/blank? value)           ; empty block
+        (save-block (first titles))
+        (new-block (first titles))))
+    (doseq [title (rest titles)]
+      (new-block title))))
+
 (defn delete-blocks
   "Delete the current block if in editing mode, otherwise, delete all the selected blocks."
   []
@@ -27,19 +43,6 @@
     (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)))))
-
 (defn assert-blocks-visible
   "blocks - coll of :block/title"
   [blocks]

+ 1 - 0
clj-e2e/src/logseq/e2e/keyboard.clj

@@ -8,5 +8,6 @@
 (def backspace #(press "Backspace"))
 (def tab #(press "Tab"))
 (def shift+tab #(press "Shift+Tab"))
+(def shift+enter #(press "Shift+Enter"))
 (def arrow-up #(press "ArrowUp"))
 (def arrow-down #(press "ArrowDown"))

+ 8 - 0
clj-e2e/src/logseq/e2e/util.clj

@@ -161,3 +161,11 @@
   []
   (w/refresh)
   (assert/assert-graph-loaded?))
+
+(defn move-cursor-to-end
+  []
+  (k/press "ControlOrMeta+a" "ArrowRight"))
+
+(defn move-cursor-to-start
+  []
+  (k/press "ControlOrMeta+a" "ArrowLeft"))

+ 122 - 0
clj-e2e/test/logseq/e2e/commands_test.clj

@@ -0,0 +1,122 @@
+(ns logseq.e2e.commands-test
+  (: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]
+   [wally.main :as w]))
+
+(use-fixtures :once fixtures/open-page)
+
+(use-fixtures :each fixtures/new-logseq-page)
+
+(deftest command-trigger-test
+  (testing "/command trigger popup"
+    (b/new-block "b2")
+    (util/type " /")
+    (w/wait-for ".ui__popover-content")
+    (is (some? (w/find-one-by-text "span" "Node reference")))
+    (k/backspace)
+    (w/wait-for-not-visible ".ui__popover-content")))
+
+(defn- input-command
+  [command-match]
+  (util/type "/")
+  (util/type command-match)
+  (w/wait-for ".ui__popover-content")
+  (k/enter))
+
+(deftest node-reference-test
+  (testing "Node reference"
+    (testing "Page reference"
+      (b/new-blocks ["b1" ""])
+      (input-command "Node eferen")
+      (util/type "Another page")
+      (k/enter)
+      (is (= "[[Another page]]" (util/get-edit-content)))
+      (util/exit-edit)
+      (is (= "Another page" (util/get-text "a.page-ref"))))
+    (testing "Block reference"
+      (b/new-block "")
+      (input-command "Node eferen")
+      (util/type "b1")
+      (util/wait-timeout 300)
+      (k/enter)
+      (is (string/includes? (util/get-edit-content) "[["))
+      (util/exit-edit)
+      (is (= "b1" (util/get-text ".block-ref"))))))
+
+(deftest link-test
+  (testing "/link"
+    (let [add-logseq-link (fn []
+                            (util/type "https://logseq.com")
+                            (k/tab)
+                            (util/type "Logseq")
+                            (k/tab)
+                            (k/enter))]
+      (b/new-block "")
+      (input-command "link")
+      (add-logseq-link)
+      (is (= "[Logseq](https://logseq.com)" (util/get-edit-content)))
+      (util/type " some content ")
+      (input-command "link")
+      (add-logseq-link)
+      (is (= (str "[Logseq](https://logseq.com)"
+                  " some content "
+                  "[Logseq](https://logseq.com)") (util/get-edit-content))))))
+
+(deftest link-image-test
+  (testing "/image link"
+    (b/new-block "")
+    (input-command "image link")
+    (util/type "https://logseq.com/test.png")
+    (k/tab)
+    (util/type "Logseq")
+    (k/tab)
+    (k/enter)
+    (is (= "![Logseq](https://logseq.com/test.png)" (util/get-edit-content)))))
+
+(deftest underline-test
+  (testing "/underline"
+    (b/new-block "")
+    (input-command "underline")
+    (is (= "<ins></ins>" (util/get-edit-content)))
+    (util/type "test")
+    (is (= "<ins>test</ins>" (util/get-edit-content)))
+    (util/move-cursor-to-end)))
+
+(deftest code-block-test
+  (testing "/code block"
+    (b/new-block "")
+    (input-command "code block")
+    (w/wait-for ".CodeMirror")
+    (util/wait-timeout 100)
+    ;; create another block
+    (k/shift+enter)))
+
+(deftest math-block-test
+  (testing "/math block"
+    (b/new-block "")
+    (input-command "math block")
+    (util/type "1 + 2 = 3")
+    (util/exit-edit)
+    (w/wait-for ".katex")))
+
+(deftest quote-test
+  (testing "/quote"
+    (b/new-block "")
+    (input-command "quote")
+    (w/wait-for "div[data-node-type='quote']")))
+
+(deftest headings-test
+  (testing "/heading"
+    (dotimes [i 6]
+      (let [heading (str "h" (inc i))
+            text (str heading " test ")]
+        (b/new-block text)
+        (input-command heading)
+        (is (= text (util/get-edit-content)))
+        (util/exit-edit)
+        (w/wait-for heading)))))

+ 0 - 44
clj-e2e/test/logseq/e2e/editor_test.clj

@@ -1,44 +0,0 @@
-(ns logseq.e2e.editor-test
-  (: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]
-   [wally.main :as w]))
-
-(use-fixtures :once fixtures/open-page)
-
-(deftest commands-test
-  (testing "/command trigger popup"
-    (util/new-page "Test")
-    (b/save-block "b1")
-    (util/type " /")
-    (w/wait-for ".ui__popover-content")
-    (is (some? (w/find-one-by-text "span" "Node reference")))
-    (k/backspace)
-    (w/wait-for-not-visible ".ui__popover-content"))
-
-  (testing "Node reference"
-    (testing "Page reference"
-      (b/new-block "/")
-      (util/type "Node eferen")
-      (w/wait-for ".ui__popover-content")
-      (k/enter)
-      (util/type "Another page")
-      (k/enter)
-      (is (= "[[Another page]]" (util/get-edit-content)))
-      (util/exit-edit)
-      (is (= "Another page" (util/get-text "a.page-ref"))))
-    (testing "Block reference"
-      (b/new-block "/")
-      (util/type "Node eferen")
-      (w/wait-for ".ui__popover-content")
-      (k/enter)
-      (util/type "b1")
-      (util/wait-timeout 300)
-      (k/enter)
-      (is (string/includes? (util/get-edit-content) "[["))
-      (util/exit-edit)
-      (is (= "b1" (util/get-text ".block-ref"))))))

+ 12 - 5
clj-e2e/test/logseq/e2e/fixtures.clj

@@ -1,7 +1,8 @@
 (ns logseq.e2e.fixtures
-  (:require [wally.main :as w]
-            [logseq.e2e.config :as config]
-            [logseq.e2e.playwright-page :as pw-page]))
+  (:require [logseq.e2e.config :as config]
+            [logseq.e2e.playwright-page :as pw-page]
+            [logseq.e2e.util :as util]
+            [wally.main :as w]))
 
 ;; TODO: save trace
 ;; TODO: parallel support
@@ -10,8 +11,7 @@
   (w/with-page-open
     (w/make-page {:headless (or headless @config/*headless)
                   :persistent false
-                  :slow-mo @config/*slow-mo
-                  })
+                  :slow-mo @config/*slow-mo})
     (w/navigate (str "http://localhost:" (or port @config/*port)))
     (f)))
 
@@ -55,3 +55,10 @@
     (binding [*pw-ctx* ctx]
       (f)
       (.close (.browser *pw-ctx*)))))
+
+(defonce *page-number (atom 0))
+
+(defn new-logseq-page
+  [f]
+  (util/new-page (str "page " (swap! *page-number inc)))
+  (f))

+ 4 - 7
clj-e2e/test/logseq/e2e/outliner_test.clj

@@ -1,16 +1,16 @@
 (ns logseq.e2e.outliner-test
   (:require
    [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.block :as b]
    [logseq.e2e.util :as util]
    [wally.main :as w]))
 
 (use-fixtures :once fixtures/open-page)
+(use-fixtures :each fixtures/new-logseq-page)
 
 (deftest create-test-page-and-insert-blocks
-  (util/new-page "p1")
   ;; a page block and a child block
   (is (= 2 (util/blocks-count)))
   (b/new-blocks ["first block" "second block"])
@@ -18,7 +18,6 @@
   (is (= 3 (util/blocks-count))))
 
 (deftest indent-and-outdent-test
-  (util/new-page "p2")
   (b/new-blocks ["b1" "b2"])
   (testing "simple indent and outdent"
     (util/indent)
@@ -44,7 +43,6 @@
       (is (and (= x2 x4) (= x3 x5) (< x2 x3))))))
 
 (deftest move-up-down-test
-  (util/new-page "p3")
   (b/new-blocks ["b1" "b2" "b3" "b4"])
   (util/repeat-keyboard 2 "Shift+ArrowUp")
   (let [contents (util/get-page-blocks-contents)]
@@ -58,16 +56,15 @@
 
 (deftest delete-test
   (testing "Delete blocks case 1"
-    (util/new-page "p4")
     (b/new-blocks ["b1" "b2" "b3" "b4"])
     (b/delete-blocks)                   ; delete b4
     (util/repeat-keyboard 2 "Shift+ArrowUp") ; select b3 and b2
     (b/delete-blocks)
     (is (= "b1" (util/get-edit-content)))
-    (is (= 1 (util/page-blocks-count))))
+    (is (= 1 (util/page-blocks-count)))))
 
+(deftest delete-test-with-children
   (testing "Delete block with its children"
-    (util/new-page "p5")
     (b/new-blocks ["b1" "b2" "b3" "b4"])
     (util/indent)
     (k/arrow-up)