penpot/frontend/test/frontend_tests/tokens/token_errors_test.cljs
2026-05-29 11:24:58 +02:00

54 lines
2.5 KiB
Clojure

;; 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 Sucursal en España SL
(ns frontend-tests.tokens.token-errors-test
(:require
[app.main.data.workspace.tokens.errors :as wte]
[cljs.test :as t :include-macros true]))
;; ---------------------------------------------------------------------------
;; resolve-error-message
;; ---------------------------------------------------------------------------
(t/deftest resolve-error-message-with-error-fn
(t/testing "calls :error/fn with :error/value when both keys are present"
(let [error {:error/fn (fn [v] (str "bad value: " v))
:error/value "abc"}]
(t/is (= "bad value: abc" (wte/resolve-error-message error))))))
(t/deftest resolve-error-message-without-error-fn
(t/testing "returns :message when :error/fn is absent (schema-validation error)"
(let [error {:message "This field is required"}]
(t/is (= "This field is required" (wte/resolve-error-message error))))))
(t/deftest resolve-error-message-nil-error-fn
(t/testing "returns :message when :error/fn is explicitly nil"
(let [error {:error/fn nil :message "fallback message"}]
(t/is (= "fallback message" (wte/resolve-error-message error))))))
;; ---------------------------------------------------------------------------
;; resolve-error-assoc-message
;; ---------------------------------------------------------------------------
(t/deftest resolve-error-assoc-message-with-error-fn
(t/testing "assocs :message produced by :error/fn into the error map"
(let [error {:error/fn (fn [v] (str "invalid: " v))
:error/value "42"
:error/code :error.token/invalid-color}]
(let [result (wte/resolve-error-assoc-message error)]
(t/is (= "invalid: 42" (:message result)))
(t/is (= :error.token/invalid-color (:error/code result)))))))
(t/deftest resolve-error-assoc-message-without-error-fn
(t/testing "returns the error map unchanged when :error/fn is absent"
(let [error {:message "This field is required"}]
(t/is (= error (wte/resolve-error-assoc-message error))))))
(t/deftest resolve-error-assoc-message-nil-error-fn
(t/testing "returns the error map unchanged when :error/fn is explicitly nil"
(let [error {:error/fn nil :message "fallback"}]
(t/is (= error (wte/resolve-error-assoc-message error))))))