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 (defn raw-massage-params
"Sending empty strings, or numbers as strings, to the database often isn't "Sending empty strings, or numbers as strings, to the database often isn't
helpful. Massage these `params` and `form-params` to eliminate these problems. 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 Date and time fields also need massaging."
we should take all other values out of form-params - because we need the key to ([request entity]
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]
(let (let
[p (reduce [params (:params request)
form-params (:form-params request)
p (reduce
merge merge
{} {}
(map (map
@ -74,10 +72,8 @@
(map (map
#(massage-value % form-params) #(massage-value % form-params)
(keys form-params)))))) (keys form-params))))))
([request key-fields]
(raw-massage-params (:params request) (:form-params request) key-fields))
([request] ([request]
(raw-massage-params (:params request) (:form-params request) #{}))) (raw-massage-params request nil)))
(def massage-params (def massage-params

View file

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

View file

@ -4,29 +4,14 @@
(deftest massage-params-tests (deftest massage-params-tests
(testing "Massaging of params" (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} (let [expected {:id 67 :offset 0 :limit 50}
actual (massage-params {:params {:id "67" :offset "0" :limit "50"} :form-params {}})] actual (massage-params {:params {:id "67" :offset "0" :limit "50"} :form-params {}})]
(is (= expected actual) "Request with no form params")) (is (= expected actual) "Request with no form params"))
(let [expected {:id 67 :offset 0 :limit 50} (let [expected {:id 67 :offset 0 :limit 50}
actual (massage-params {:params {:id "0" :offset "1000" :limit "150"} actual (massage-params {:params {:id "0" :offset "1000" :limit "150"}
:form-params {:id "67" :offset "0" :limit "50"}})] :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 (deftest compose-exception-reason-tests
(testing "Compose exception reason" (testing "Compose exception reason"