Add color checks and test of event creation for fills

This commit is contained in:
Andrey Antukh 2025-06-05 13:18:41 +02:00
parent 8c54cb764f
commit 6719902647
3 changed files with 88 additions and 40 deletions

View file

@ -12,7 +12,7 @@
[app.common.files.helpers :as cfh] [app.common.files.helpers :as cfh]
[app.common.schema :as sm] [app.common.schema :as sm]
[app.common.text :as txt] [app.common.text :as txt]
[app.common.types.color :as ctc] [app.common.types.color :as types.color]
[app.common.types.fill :as types.fill] [app.common.types.fill :as types.fill]
[app.common.types.shape :as shp] [app.common.types.shape :as shp]
[app.common.types.shape.shadow :refer [check-shadow]] [app.common.types.shape.shadow :refer [check-shadow]]
@ -181,15 +181,19 @@
([ids color position] ([ids color position]
(change-fill ids color position nil)) (change-fill ids color position nil))
([ids color position options] ([ids color position options]
(ptk/reify ::change-fill (assert (every? uuid? ids) "expect a coll of uuids for `ids`")
ptk/WatchEvent (assert (number? position) "expect a number for position")
(watch [_ state _]
(let [change-fn #(assoc-shape-fill %1 position %2) (let [color (types.color/check-color color)]
undo-id (js/Symbol)] (ptk/reify ::change-fill
(rx/concat ptk/WatchEvent
(rx/of (dwu/start-undo-transaction undo-id)) (watch [_ state _]
(transform-fill state ids color change-fn options) (let [change-fn #(assoc-shape-fill %1 position %2)
(rx/of (dwu/commit-undo-transaction undo-id)))))))) undo-id (js/Symbol)]
(rx/concat
(rx/of (dwu/start-undo-transaction undo-id))
(transform-fill state ids color change-fn options)
(rx/of (dwu/commit-undo-transaction undo-id)))))))))
(defn change-fill-and-clear (defn change-fill-and-clear
([ids color] (change-fill-and-clear ids color nil)) ([ids color] (change-fill-and-clear ids color nil))
@ -208,33 +212,27 @@
([ids color] (add-fill ids color nil)) ([ids color] (add-fill ids color nil))
([ids color options] ([ids color options]
(assert (assert (every? uuid? ids) "expected a valid coll of uuid's")
(ctc/check-color color) (let [color (types.color/check-color color)]
"expected a valid color struct") (ptk/reify ::add-fill
ptk/WatchEvent
(assert (watch [_ state _]
(every? uuid? ids) (let [change-fn
"expected a valid coll of uuid's") (fn [shape attrs]
(-> shape
(ptk/reify ::add-fill (update :fills #(into [attrs] %))))
ptk/WatchEvent undo-id
(watch [_ state _] (js/Symbol)]
(let [change-fn (rx/concat
(fn [shape attrs] (rx/of (dwu/start-undo-transaction undo-id))
(-> shape (transform-fill state ids color change-fn options)
(update :fills #(into [attrs] %)))) (rx/of (dwu/commit-undo-transaction undo-id)))))))))
undo-id
(js/Symbol)]
(rx/concat
(rx/of (dwu/start-undo-transaction undo-id))
(transform-fill state ids color change-fn options)
(rx/of (dwu/commit-undo-transaction undo-id))))))))
(defn remove-fill (defn remove-fill
([ids color position] (remove-fill ids color position nil)) ([ids color position] (remove-fill ids color position nil))
([ids color position options] ([ids color position options]
(assert (ctc/check-color color) (assert (types.color/check-color color)
"expected a valid color struct") "expected a valid color struct")
(assert (every? uuid? ids) (assert (every? uuid? ids)
"expected a valid coll of uuid's") "expected a valid coll of uuid's")
@ -263,7 +261,7 @@
([ids color] (remove-all-fills ids color nil)) ([ids color] (remove-all-fills ids color nil))
([ids color options] ([ids color options]
(assert (ctc/check-color color) "expected a valid color struct") (assert (types.color/check-color color) "expected a valid color struct")
(assert (every? uuid? ids) "expected a valid coll of uuid's") (assert (every? uuid? ids) "expected a valid coll of uuid's")
@ -573,11 +571,11 @@
"expected valid color operations") "expected valid color operations")
(assert (assert
(ctc/check-color new-color) (types.color/check-color new-color)
"expected valid color structure") "expected valid color structure")
(assert (assert
(ctc/check-color old-color) (types.color/check-color old-color)
"expected valid color structure") "expected valid color structure")
(ptk/reify ::change-color-in-selected (ptk/reify ::change-color-in-selected
@ -599,7 +597,7 @@
(defn apply-color-from-palette (defn apply-color-from-palette
[color stroke?] [color stroke?]
(let [color (ctc/check-color color)] (let [color (types.color/check-color color)]
(ptk/reify ::apply-color-from-palette (ptk/reify ::apply-color-from-palette
ptk/WatchEvent ptk/WatchEvent
(watch [_ state _] (watch [_ state _]
@ -634,7 +632,7 @@
(defn apply-color-from-colorpicker (defn apply-color-from-colorpicker
[color] [color]
(let [color (ctc/check-color color)] (let [color (types.color/check-color color)]
(ptk/reify ::apply-color-from-colorpicker (ptk/reify ::apply-color-from-colorpicker
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
@ -675,7 +673,7 @@
(defn add-recent-color (defn add-recent-color
[color] [color]
(let [color (ctc/check-color color)] (let [color (types.color/check-color color)]
(ptk/reify ::add-recent-color (ptk/reify ::add-recent-color
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
@ -695,11 +693,11 @@
(defn apply-color-from-assets (defn apply-color-from-assets
[file-id color stroke?] [file-id color stroke?]
(let [color (ctc/check-library-color color)] (let [color (types.color/check-library-color color)]
(ptk/reify ::apply-color-from-asserts (ptk/reify ::apply-color-from-asserts
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]
(let [color (ctc/library-color->color color file-id)] (let [color (types.color/library-color->color color file-id)]
(rx/of (apply-color-from-palette color stroke?) (rx/of (apply-color-from-palette color stroke?)
(add-recent-color color))))))) (add-recent-color color)))))))

View file

@ -0,0 +1,48 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC
(ns frontend-tests.data.workspace-colors-test
(:require
[app.common.uuid :as uuid]
[app.main.data.workspace.colors :as dwc]
[clojure.test :as t]
[potok.v2.core :as ptk]))
(t/deftest build-change-fill-event
(let [color1 {:color "#fabada"
:opacity 1}
color2 {:color "#fabada"
:opacity 1
:ref-id uuid/zero
:ref-file uuid/zero}
color3 {:color "#fabada"
:opacity -1}
color4 {:opacity 1
:color "ffffff"}]
(t/is (ptk/event? (dwc/change-fill #{uuid/zero} color1 1)))
(t/is (ptk/event? (dwc/change-fill #{uuid/zero} color2 1)))
(t/is (thrown? js/Error
(ptk/event? (dwc/change-fill #{uuid/zero} color3 1))))
(t/is (thrown? js/Error
(ptk/event? (dwc/change-fill #{uuid/zero} color4 1))))))
(t/deftest build-add-fill-event
(let [color1 {:color "#fabada"
:opacity 1}
color2 {:color "#fabada"
:opacity 1
:ref-id uuid/zero
:ref-file uuid/zero}
color3 {:color "#fabada"
:opacity -1}
color4 {:opacity 1
:color "ffffff"}]
(t/is (ptk/event? (dwc/add-fill #{uuid/zero} color1 1)))
(t/is (ptk/event? (dwc/add-fill #{uuid/zero} color2 1)))
(t/is (thrown? js/Error
(ptk/event? (dwc/add-fill #{uuid/zero} color3 1))))
(t/is (thrown? js/Error
(ptk/event? (dwc/add-fill #{uuid/zero} color4 1))))))

View file

@ -2,6 +2,7 @@
(:require (:require
[cljs.test :as t] [cljs.test :as t]
[frontend-tests.basic-shapes-test] [frontend-tests.basic-shapes-test]
[frontend-tests.data.workspace-colors-test]
[frontend-tests.helpers-shapes-test] [frontend-tests.helpers-shapes-test]
[frontend-tests.logic.comp-remove-swap-slots-test] [frontend-tests.logic.comp-remove-swap-slots-test]
[frontend-tests.logic.components-and-tokens] [frontend-tests.logic.components-and-tokens]
@ -39,6 +40,7 @@
'frontend-tests.util-snap-data-test 'frontend-tests.util-snap-data-test
'frontend-tests.util-simple-math-test 'frontend-tests.util-simple-math-test
'frontend-tests.basic-shapes-test 'frontend-tests.basic-shapes-test
'frontend-tests.data.workspace-colors-test
'frontend-tests.tokens.logic.token-actions-test 'frontend-tests.tokens.logic.token-actions-test
'frontend-tests.tokens.logic.token-data-test 'frontend-tests.tokens.logic.token-data-test
'frontend-tests.tokens.import-export-test 'frontend-tests.tokens.import-export-test