joy-framework / joy

A full stack web framework written in janet
https://joy.swlkr.com
MIT License
537 stars 30 forks source link

validator params does not act as documented #90

Open LeviSchuck opened 3 years ago

LeviSchuck commented 3 years ago

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"})
swlkr commented 3 years ago

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