Skip to content

Commit 5f2f88d

Browse files
authored
Merge pull request #1146 from metosin/fix-ref-map-default-1145
look inside :ref when searching for default for :map child
2 parents d76cb59 + 38168dd commit 5f2f88d

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/malli/transform.cljc

+3-1
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,9 @@
486486
(when (or (not optional) add-optional-keys)
487487
(let [e (find p key)]
488488
(when-some [f (if e (constantly (val e))
489-
(get-default v))]
489+
(or (get-default v)
490+
(when (m/-ref-schema? v)
491+
(get-default (m/-deref v)))))]
490492
[k (fn [] (default-fn schema (f)))])))))
491493
(m/children schema))]
492494
(when (seq defaults)

test/malli/transform_test.cljc

+13-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[clojure.test :refer [are deftest is testing]]
44
[malli.core :as m]
55
[malli.core-test]
6+
[malli.registry :as mr]
67
[malli.transform :as mt])
78
#?(:clj (:import (java.net URI))))
89

@@ -1032,7 +1033,18 @@
10321033

10331034
(testing ":default/fn property on schema"
10341035
(let [schema [:string {:default/fn (fn [] "called")}]]
1035-
(is (= "called" (m/decode schema nil mt/default-value-transformer))))))
1036+
(is (= "called" (m/decode schema nil mt/default-value-transformer)))))
1037+
1038+
(testing ":refs"
1039+
(let [opts {:registry (mr/composite-registry m/default-registry
1040+
{"bing" :int})}
1041+
transformer (mt/default-value-transformer {:defaults {:int (constantly 7)}})]
1042+
(is (= 7 (m/decode [:ref "bing"] nil opts transformer)))
1043+
(is (= [7] (m/decode [:vector [:ref "bing"]] [nil] opts transformer)))
1044+
(is (= {:a 7} (m/decode [:map [:a [:ref "bing"]]] {:a nil} opts transformer)))
1045+
(is (= {:a 7} (m/decode [:map [:a [:ref "bing"]]] {} opts transformer)))
1046+
(is (= {:a 8} (m/decode [:map [:a [:ref {:default 8} "bing"]]] {:a nil} opts transformer)))
1047+
(is (= {:a 8} (m/decode [:map [:a [:ref {:default 8} "bing"]]] {} opts transformer))))))
10361048

10371049
(deftest type-properties-based-transformations
10381050
(is (= 12 (m/decode malli.core-test/Over6 "12" mt/string-transformer))))

0 commit comments

Comments
 (0)