-
Notifications
You must be signed in to change notification settings - Fork 259
/
validation.clj
56 lines (50 loc) · 1.85 KB
/
validation.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
(ns test.compojure.validation
(:use fact)
(:use compojure.html.form-helpers)
(:use compojure.validation))
(fact "Parameters that pass validation return empty maps"
[]
(= (validate {:a 1} :a (constantly true) "fail")
{}))
(fact "Parameters that fail validation return error message maps"
[[param message] {:a "fail"
'b "error"
"c" ""}]
(= (validate {param 1} param (constantly false) message)
{param [message]}))
(fact "Error message maps can be merged with merge-errors"
[[in out] {[{}] {}
[{} {} {}] {}
[{:a ["f"]}] {:a ["f"]}
[{:a ["f"]} {:b ["g"]}] {:a ["f"], :b ["g"]}
[{:a ["f"]} {:a ["g"]}] {:a ["f" "g"]}}]
(= (apply merge-errors in)
out))
(fact "The validation function is a short for merge-errors and many validates"
[params [{:a 1, :b 2, :c 3}
{}
{:a 1, :c 3}
{:a 3, :c 1}
{:a 3, :c 1, :b 2}
{:foo 10}
{:a "foo"}]]
(= (validation params
[:a (partial = 1) "a isn't 1"]
[:b (partial = 2) "b isn't 2"]
[:c (partial = 3) "c isn't 3"]
[#(= (count %) 3) "size isn't 3"])
(merge-errors
(validate params :a (partial = 1) "a isn't 1")
(validate params :b (partial = 2) "b isn't 2")
(validate params :c (partial = 3) "c isn't 3")
(validate params #(= (count %) 3) "size isn't 3"))))
(fact "error-class wraps elements in an error div when errors exist"
[func [text-field check-box text-area]]
(binding [*errors* {:foo "bar"}]
(= ((error-class func) :foo)
[:div.error (func :foo)])))
(fact "error-class does nothing div when errors don't exist"
[func [text-field check-box text-area]]
(binding [*errors* {}]
(= ((error-class func) :foo)
(func :foo))))