Fixed incorrect errors acc when reference resolving

This commit is contained in:
Julien Eluard 2018-10-11 09:44:41 +02:00
parent e4ce762bd6
commit 80f6d2e806
No known key found for this signature in database
GPG Key ID: 6FD7DB5437FCBEF6
3 changed files with 24 additions and 9 deletions

View File

@ -73,17 +73,21 @@
{} type)
{:errors [(errors/error ::errors/invalid-assoc-type {:type type :value value})]}))
(defmethod resolve :event [ctx ext type [event-name event-properties :as value]]
(defn- resolve-reference [ctx ext type [name _ :as value] f error]
(let [{:keys [data errors]} (reference/resolve ctx ext type value)]
(errors/merge-errors {:data #(re-frame/dispatch (if event-properties [data event-properties] [data]))}
(when errors
{:errors (apply conj errors [(errors/error ::errors/unknown-event {:type type :value name})])}))))
(merge (when data {:data (f data)})
(when errors
{:errors (apply conj [(errors/error error name)] errors)}))))
(defmethod resolve :query [ctx ext type [properties name :as value]]
(let [{:keys [data errors]} (reference/resolve ctx ext type value)]
(errors/merge-errors {:data #(re-frame/subscribe (if properties [data properties] [data]))}
(when errors
{:errors (apply conj errors [(errors/error ::errors/unknown-query {:type type :value name})])}))))
(defmethod resolve :event [ctx ext type [_ properties :as value]]
(resolve-reference ctx ext type value
(fn [data] #(re-frame/dispatch (if properties [data properties] [data])))
::errors/unknown-event))
(defmethod resolve :query [ctx ext type [name properties :as value]]
(resolve-reference ctx ext type value
(fn [data] #(re-frame/subscribe (if properties [data properties] [data])))
::errors/unknown-query))
(defmethod resolve :default [_ _ type value]
{:errors [(errors/error ::errors/invalid-type (merge {:type type} (when value {:value value})))]})

View File

@ -110,6 +110,7 @@
(defn parse [ctx ext o]
(if (list? o) ;; TODO introduce a block? fn
(let [{:keys [data errors] :as m} (blocks/parse ctx ext o)]
;; TODO handle nil data case
(errors/merge-errors (parse ctx ext data) errors))
(parse-hiccup-element ctx ext o)))

View File

@ -101,3 +101,13 @@
:name "hello"
:children [{:name "name" :scopes [{:scope :one}]}
{:name "name" :scopes [{:scope :two}]}]}))))
(deftest resolve-reference
(is (= {:errors [{::errors/type ::errors/unknown-event
::errors/value 'event}
{::errors/type ::errors/unknown-reference
::errors/value {:value 'event}}]}
(types/resolve {} {} :event ['event])))
(let [{:keys [data errors]} (types/resolve {:capacities {:events {'event {:value :event}}}} {} :event ['event])]
(is (not errors))
(is data)))