Переглянути джерело

enhance(plugins): WIP add more block property related e2e tests

charlie 4 місяців тому
батько
коміт
0a462208cb

+ 1 - 0
clj-e2e/deps.edn

@@ -5,6 +5,7 @@
                                     :sha "8571fae7c51400ac61c8b1026cbfba68279bc461"}
         ;; io.github.zmedelis/bosquet {:mvn/version "2025.03.28"}
         org.clj-commons/claypoole          {:mvn/version "1.2.2"}
+        metosin/jsonista                   {:mvn/version "0.3.13"}
         clj-time/clj-time                  {:mvn/version "0.15.2"}}
  :aliases
  {:build {:deps {io.github.clojure/tools.build {:mvn/version "0.10.5"}}

+ 29 - 7
clj-e2e/test/logseq/e2e/plugins_basic_test.clj

@@ -2,6 +2,7 @@
   (:require
    [clojure.string :as string]
    [clojure.test :refer [deftest testing is use-fixtures]]
+   [jsonista.core :as json]
    [logseq.e2e.assert :as assert]
    [logseq.e2e.fixtures :as fixtures]
    [logseq.e2e.keyboard :as k]
@@ -42,9 +43,10 @@
         ns1 (string/lower-case (if (and ns? (not inbuilt?))
                                  (str "sdk." (first ns')) "api"))
         name1 (if ns? (to-snake-case (last ns')) tag)
-        estr (format "args => { const o=logseq.%1$s; return o['%2$s']?.apply(null, args || []); }" ns1 name1)]
-    ;(prn "Debug: eval-js #" estr (vec args))
-    (w/eval-js estr (vec args))))
+        estr (format "s => { const args = JSON.parse(s);const o=logseq.%1$s; return o['%2$s']?.apply(null, args || []); }" ns1 name1)]
+    (let [args (json/write-value-as-string (vec args))]
+      ;(prn "Debug: eval-js #" estr args)
+      (w/eval-js estr args))))
 
 (defn- assert-api-ls-block!
   ([ret] (assert-api-ls-block! ret 1))
@@ -56,9 +58,9 @@
 
 (deftest apis-related-test
   (testing "block related apis"
-    (page/new-page "test-apis")
-    (ls-api-call! :ui.showMsg "hello world" "error")
-    (let [ret (ls-api-call! :editor.appendBlockInPage "test-apis" "append-block-in-page-0")
+    (page/new-page "test-block-apis")
+    (ls-api-call! :ui.showMsg "hello world" "info")
+    (let [ret (ls-api-call! :editor.appendBlockInPage "test-block-apis" "append-block-in-page-0")
           uuid' (assert-api-ls-block! ret)]
       (-> (ls-api-call! :editor.insertBlock uuid' "insert-0")
         (assert-api-ls-block!))
@@ -66,4 +68,24 @@
       (k/esc)
       (w/wait-for ".block-title-wrap:text('append-but-updated-0')")
       (ls-api-call! :editor.removeBlock uuid')
-      (assert-api-ls-block! uuid' 0))))
+      (assert-api-ls-block! uuid' 0)))
+
+  (testing "block properties related apis"
+    (page/new-page "test-block-properties-apis")
+    (let [ret (ls-api-call! :editor.appendBlockInPage "test-block-properties-apis" "block-in-page-0" {:properties {:p1 1}})
+          uuid' (assert-api-ls-block! ret)
+          prop1 (ls-api-call! :editor.getBlockProperty uuid' "p1")
+          props1 (ls-api-call! :editor.getBlockProperties uuid' "p1")]
+      (w/wait-for ".property-k:text('p1')")
+      (is (= 1 (get prop1 "value")))
+      (is (= (get prop1 "ident") ":plugin.property._api/p1"))
+      (is (= 1 (get props1 ":plugin.property._api/p1")))
+      (ls-api-call! :editor.upsertBlockProperty uuid' "p2" "p2")
+      (ls-api-call! :editor.upsertBlockProperty uuid' "p3" true)
+      (let [prop2 (ls-api-call! :editor.getBlockProperty uuid' "p2")
+            prop3 (ls-api-call! :editor.getBlockProperty uuid' "p3")]
+        (w/wait-for ".property-k:text('p2')")
+        (is (= "p2" (get prop2 "value")))
+        (is (true? prop3)))
+      (prn uuid'))
+    ))

+ 5 - 1
src/main/logseq/api.cljs

@@ -989,7 +989,11 @@
                                  (get properties ident))
                 property-value (if-let [property-id (:db/id property-value)]
                                  (db/pull property-id) property-value)
-
+                property-value (cond-> property-value
+                                 (map? property-value)
+                                 (assoc
+                                   :value (:logseq.property/value property-value)
+                                   :ident ident))
                 parsed-value (api-block/parse-property-json-value-if-need ident property-value)]
             (or parsed-value
               (bean/->js (sdk-utils/normalize-keyword-for-json property-value)))))))))