Improved create and update

This commit is contained in:
Simon Brooke 2018-08-06 12:00:39 +01:00
parent 7280c6f41b
commit d6991b5f09
3 changed files with 11 additions and 29 deletions

View file

@ -49,14 +49,12 @@
(defn raw-massage-params
"Sending empty strings, or numbers as strings, to the database often isn't
helpful. Massage these `params` and `form-params` to eliminate these problems.
We must take key field values out of just params, but if form-params are present
we should take all other values out of form-params - because we need the key to
load the form in the first place. `form-params` always override `params`.
**NOTE THAT** the parameter `key-fields` is deprecated and ignored."
([params form-params key-fields]
Date and time fields also need massaging."
([request entity]
(let
[p (reduce
[params (:params request)
form-params (:form-params request)
p (reduce
merge
{}
(map
@ -74,10 +72,8 @@
(map
#(massage-value % form-params)
(keys form-params))))))
([request key-fields]
(raw-massage-params (:params request) (:form-params request) key-fields))
([request]
(raw-massage-params (:params request) (:form-params request) #{})))
(raw-massage-params request nil)))
(def massage-params

View file

@ -1,5 +1,5 @@
(ns adl-support.forms-support
(:require [adl-support.core :refer [do-or-log-error do-or-return-reason]]
(:require [adl-support.core :refer :all]
[adl-support.utils :refer [descendants-with-tag safe-name singularise]]
[clojure.core.memoize :as memo]
[clojure.data.json :as json]
@ -100,9 +100,10 @@
`params` to have a value for each field in these `fields`."
[params fields]
`(merge
(reduce {} (map #(hash-map (keyword %) nil) ~fields))
(reduce merge {} (map #(hash-map (keyword %) nil) ~fields))
~params))
(defn property-defaults
[entity]
(reduce

View file

@ -4,29 +4,14 @@
(deftest massage-params-tests
(testing "Massaging of params"
(let [expected {:id 67}
actual (massage-params {:id 67} {} #{:id})]
(is (= expected actual) "numeric param"))
(let [expected {:id 67}
actual (massage-params {:id "67"} {} #{:id})]
(is (= expected actual) "string param"))
(let [expected {:id 67}
actual (massage-params {"id" "67"} {} #{:id})]
(is (= expected actual) "string keyword"))
(let [expected {:id 67}
actual (massage-params {:id 60} {:id 67} #{:id})]
(is (= expected actual) "params and form-params differ"))
(let [expected {:id 67 :offset 0 :limit 50}
actual (massage-params {:id 60} {:id "67" :offset "0" :limit "50"} #{:id})]
(is (= expected actual) "prefer values from form-params"))
(let [expected {:id 67 :offset 0 :limit 50}
actual (massage-params {:params {:id "67" :offset "0" :limit "50"} :form-params {}})]
(is (= expected actual) "Request with no form params"))
(let [expected {:id 67 :offset 0 :limit 50}
actual (massage-params {:params {:id "0" :offset "1000" :limit "150"}
:form-params {:id "67" :offset "0" :limit "50"}})]
(is (= expected actual) "Request with form params, params and form params differ"))
))
(is (= expected actual) "Request with form params, params and form params differ"))))
(deftest compose-exception-reason-tests
(testing "Compose exception reason"