Refactor get-content-from-element to enable tests
This commit is contained in:
parent
dfc65cacc4
commit
0da8216e6c
2 changed files with 54 additions and 12 deletions
|
@ -22,18 +22,26 @@
|
||||||
(s/def ::optional boolean?)
|
(s/def ::optional boolean?)
|
||||||
(def dom-function-parameter (s/keys :opt-un [::deserializer ::optional]))
|
(def dom-function-parameter (s/keys :opt-un [::deserializer ::optional]))
|
||||||
(defn-spec get-content-from-element js-object?
|
(defn-spec get-content-from-element js-object?
|
||||||
|
[name string?]
|
||||||
|
(-> (get-element-by-id name)
|
||||||
|
(.-value)))
|
||||||
|
|
||||||
|
(defn-spec deserialize-content js-object?
|
||||||
|
[content string?
|
||||||
|
deserializer ::deserializer
|
||||||
|
optional ::optional]
|
||||||
|
(cond
|
||||||
|
(and optional (st/blank? content))
|
||||||
|
nil
|
||||||
|
:else
|
||||||
|
(apply deserializer [content])))
|
||||||
|
|
||||||
|
(defn-spec get-deserialized-content js-object?
|
||||||
[name string?
|
[name string?
|
||||||
& {:keys [deserializer optional]
|
& {:keys [deserializer optional]
|
||||||
:or {deserializer nil optional false}} dom-function-parameter]
|
:or {deserializer identity optional false}} dom-function-parameter]
|
||||||
(let [content (-> (get-element-by-id name)
|
(-> (get-content-from-element name)
|
||||||
(.-value))]
|
(deserialize-content deserializer optional)))
|
||||||
(cond
|
|
||||||
(and optional (st/blank? content))
|
|
||||||
nil
|
|
||||||
(some? deserializer)
|
|
||||||
(apply deserializer [content])
|
|
||||||
:else
|
|
||||||
content)))
|
|
||||||
|
|
||||||
(defn-spec set-validation-result! js-object?
|
(defn-spec set-validation-result! js-object?
|
||||||
[name string?
|
[name string?
|
||||||
|
@ -49,8 +57,8 @@
|
||||||
[name string?
|
[name string?
|
||||||
spec js-object?
|
spec js-object?
|
||||||
& {:keys [deserializer optional]
|
& {:keys [deserializer optional]
|
||||||
:or {deserializer nil optional false}} dom-function-parameter]
|
:or {deserializer identity optional false}} dom-function-parameter]
|
||||||
(let [content (get-content-from-element name :optional optional :deserializer deserializer)]
|
(let [content (get-deserialized-content name :optional optional :deserializer deserializer)]
|
||||||
(if (or (and optional (st/blank? content))
|
(if (or (and optional (st/blank? content))
|
||||||
(s/valid? spec content))
|
(s/valid? spec content))
|
||||||
(set-validation-result! name "")
|
(set-validation-result! name "")
|
||||||
|
|
34
src/test/cljs/dda/c4k_common/browser_test.cljs
Normal file
34
src/test/cljs/dda/c4k_common/browser_test.cljs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
(ns dda.c4k-common.browser-test
|
||||||
|
(:require
|
||||||
|
[cljs.test :refer-macros [deftest is are testing run-tests]]
|
||||||
|
[clojure.spec.test.alpha :as st]
|
||||||
|
[dda.c4k-common.browser :as cut]))
|
||||||
|
|
||||||
|
(st/instrument `cut/print-debug)
|
||||||
|
(st/instrument `cut/get-element-by-id)
|
||||||
|
(st/instrument `cut/get-content-from-element)
|
||||||
|
(st/instrument `cut/deserialize-content)
|
||||||
|
(st/instrument `cut/get-deserialized-content)
|
||||||
|
(st/instrument `cut/set-validation-result!)
|
||||||
|
(st/instrument `cut/validate!)
|
||||||
|
(st/instrument `cut/set-output!)
|
||||||
|
(st/instrument `cut/set-form-validated!)
|
||||||
|
(st/instrument `cut/create-js-obj-from-html)
|
||||||
|
(st/instrument `cut/append-to-c4k-content)
|
||||||
|
(st/instrument `cut/append-hickory)
|
||||||
|
(st/instrument `cut/generate-feedback-tag)
|
||||||
|
(st/instrument `cut/generate-label)
|
||||||
|
(st/instrument `cut/generate-br)
|
||||||
|
(st/instrument `cut/generate-input-field)
|
||||||
|
(st/instrument `cut/generate-text-area)
|
||||||
|
(st/instrument `cut/generate-button)
|
||||||
|
(st/instrument `cut/generate-output)
|
||||||
|
(st/instrument `cut/generate-needs-validation)
|
||||||
|
(st/instrument `cut/generate-group)
|
||||||
|
|
||||||
|
(deftest should-deserialize-content
|
||||||
|
(is (= (cut/deserialize-content " " identity true) nil))
|
||||||
|
(is (= (cut/deserialize-content "test" keyword false) :test))
|
||||||
|
(is (= (cut/deserialize-content "test" identity false) "test"))
|
||||||
|
(is (= (cut/deserialize-content "test" identity true) "test")))
|
||||||
|
|
Loading…
Reference in a new issue