Establishes version control for the personal Logseq DB fork before starting the server-client architecture migration and domain features described in docs/agent-guide and the approved implementation plan. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
132 lines
4.7 KiB
Clojure
132 lines
4.7 KiB
Clojure
(ns logseq.e2e.property-scoped-choices-test
|
|
(:require [clojure.test :refer [deftest use-fixtures]]
|
|
[logseq.e2e.assert :as assert]
|
|
[logseq.e2e.block :as b]
|
|
[logseq.e2e.fixtures :as fixtures]
|
|
[logseq.e2e.keyboard :as k]
|
|
[logseq.e2e.locator :as loc]
|
|
[logseq.e2e.page :as page]
|
|
[logseq.e2e.util :as util]
|
|
[wally.main :as w]
|
|
[wally.repl :as repl]))
|
|
|
|
(use-fixtures :once fixtures/open-page)
|
|
|
|
(use-fixtures :each
|
|
fixtures/new-logseq-page
|
|
fixtures/validate-graph)
|
|
|
|
(defn- add-property
|
|
[property-name]
|
|
(b/new-blocks ["setup"])
|
|
(w/click (util/get-by-text "setup" true))
|
|
(k/press "Control+e")
|
|
(util/input-command "Add property")
|
|
(w/click "input[placeholder]")
|
|
(util/input property-name)
|
|
(w/click (w/get-by-text "New option:"))
|
|
(w/click (loc/and "span" (util/get-by-text "Text" true)))
|
|
(k/esc)
|
|
(assert/assert-is-visible (format ".property-k:text('%s')" property-name)))
|
|
|
|
(defn- add-tag-property
|
|
[property-name]
|
|
(w/click "button:has-text('Add tag property')")
|
|
(w/click "input[placeholder='Add or change property']")
|
|
(util/input property-name)
|
|
(w/click (loc/filter "a.menu-link" :has-text property-name))
|
|
(assert/assert-is-visible (format ".property-k:text('%s')" property-name)))
|
|
|
|
(defn- open-choices-pane
|
|
[property-name]
|
|
(w/click (loc/filter ".property-k" :has-text property-name))
|
|
(w/click (loc/filter "div[role='menuitem']" :has-text "Available choices")))
|
|
|
|
(defn- add-choice
|
|
[property-name choice]
|
|
(open-choices-pane property-name)
|
|
(w/click (loc/filter "div[role='menuitem']" :has-text "Add choice"))
|
|
(w/fill "input[placeholder='title']" choice)
|
|
(w/click "button:has-text('Save')")
|
|
(k/esc))
|
|
|
|
(defn- hide-choice-for-tag
|
|
[property-name choice tag]
|
|
(open-choices-pane property-name)
|
|
(util/wait-timeout 100)
|
|
(w/click (format ".choices-list li:has-text('%s') button[title='More settings']" choice))
|
|
(util/wait-timeout 100)
|
|
(w/click (loc/filter "div[role='menuitem']" :has-text (str "Hide for #" tag)))
|
|
(k/esc))
|
|
|
|
(defn- open-property-value-select
|
|
[property-name]
|
|
(w/click (format ".bottom-property-pill:has(.property-k:has-text('%s')) .property-value-container .jtrigger"
|
|
property-name))
|
|
(assert/assert-is-visible (format "input[placeholder='Set %s']" property-name))
|
|
(w/click (format "input[placeholder='Set %s']" property-name))
|
|
(assert/assert-is-visible ".cp__select-results"))
|
|
|
|
(deftest tag-scoped-property-choices-test
|
|
(let [setup-page (page/get-page-name)
|
|
tag "Device"
|
|
property-name "device-type"
|
|
scoped-choice "wired"
|
|
global-choice "wireless"]
|
|
(add-property property-name)
|
|
(page/new-page tag)
|
|
(page/convert-to-tag tag)
|
|
(add-tag-property property-name)
|
|
(add-choice property-name scoped-choice)
|
|
(util/wait-timeout 100)
|
|
(k/esc)
|
|
(page/goto-page setup-page)
|
|
(add-choice property-name global-choice)
|
|
(util/wait-timeout 100)
|
|
(k/esc)
|
|
(page/goto-page tag)
|
|
;; open tag properties
|
|
(w/click (.first (w/-query "a.block-control")))
|
|
(hide-choice-for-tag property-name global-choice tag)
|
|
(util/wait-timeout 100)
|
|
(k/esc)
|
|
(page/new-page "scoped-choices-test")
|
|
(b/new-block "Device item")
|
|
(util/set-tag tag)
|
|
(open-property-value-select property-name)
|
|
(assert/assert-is-visible (loc/filter ".cp__select-results" :has-text scoped-choice))
|
|
(assert/assert-have-count (loc/filter ".cp__select-results" :has-text global-choice) 0)))
|
|
|
|
(deftest tag-scoped-property-choices-isolated-test
|
|
(let [tag-a "Device2"
|
|
tag-b "Vehicle"
|
|
property-name "device2-type"
|
|
choice-a "wired2"
|
|
choice-b "gas"]
|
|
(add-property property-name)
|
|
(page/new-page tag-a)
|
|
(page/convert-to-tag tag-a)
|
|
(add-tag-property property-name)
|
|
(add-choice property-name choice-a)
|
|
(util/wait-timeout 100)
|
|
(k/esc)
|
|
(page/new-page tag-b)
|
|
(page/convert-to-tag tag-b)
|
|
(add-tag-property property-name)
|
|
(add-choice property-name choice-b)
|
|
(util/wait-timeout 100)
|
|
(k/esc)
|
|
(page/new-page "scoped-choices-device2")
|
|
(b/new-block "Device2 item")
|
|
(util/set-tag tag-a)
|
|
(open-property-value-select property-name)
|
|
(assert/assert-is-visible (loc/filter ".cp__select-results" :has-text choice-a))
|
|
(assert/assert-have-count (loc/filter ".cp__select-results" :has-text choice-b) 0)
|
|
(k/esc)
|
|
(page/new-page "scoped-choices-vehicle")
|
|
(b/new-block "Vehicle item")
|
|
(util/set-tag tag-b)
|
|
(open-property-value-select property-name)
|
|
(assert/assert-is-visible (loc/filter ".cp__select-results" :has-text choice-b))
|
|
(assert/assert-have-count (loc/filter ".cp__select-results" :has-text choice-a) 0)))
|