joy icon indicating copy to clipboard operation
joy copied to clipboard

validator params does not act as documented

Open LeviSchuck opened this issue 3 years ago • 1 comments

If I set up a params object (naming it validate-account to not shadow the params function, which I think is a bad example)

(def validate-account
     (params :accounts
       (validates [:name :real-name] :required true)
       (permit [:name :real-name])))

The documented behavior is not met, in fact both the error case and the successful case do not work as described.

repl:39:> (rescue (validate-account {:name "hello"}))
(@{:name "name is required" :real-name "real-name is required"} nil)
repl:40:> (rescue (validate-account {:name "hello" :real-name "real"}))
(@{:name "name is required" :real-name "real-name is required"} nil)

Instead the true behavior is found when it is wrapped in {:body {...}}

repl:41:> (rescue (validate-account {:body {:name "hello"}}))
(@{:real-name "real-name is required"} nil)
repl:42:> (rescue (validate-account {:body {:name "hello" :real-name "real"}}))
(nil @{:db/table :accounts :name "hello" :real-name "real"})

LeviSchuck avatar Apr 30 '21 01:04 LeviSchuck

Hmm maybe there should be a validate-body and validate for requests and for regular dictionaries

swlkr avatar Apr 30 '21 01:04 swlkr