Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/fluree/server/handler.clj
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
(def QueryResponse
(m/schema [:orn
[:select [:sequential [:or coll? map?]]]
[:select-one [:or coll? map?]]
[:select-one [:or coll? map? nil? [:enum "null"]]]
[:construct map?]]))

(def HistoryQuery
Expand Down Expand Up @@ -235,6 +235,15 @@
:fluree/subscriptions subscriptions)
handler)))

(defn wrap-no-result
"Handle a nil response from a selectOne query with no results."
[handler]
(fn [req]
(let [{:keys [status body] :as result} (handler req)]
(if (and (= 200 status) (nil? body))
(assoc result :body "null")
result))))

(defn wrap-cors
[cors-origins handler]
(let [origins (or cors-origins [#".*"])]
Expand Down Expand Up @@ -523,6 +532,7 @@
coercion/coerce-exceptions-middleware
coercion/coerce-response-middleware
coercion/coerce-request-middleware
wrap-no-result
wrap-request-header-opts
(wrap-closed-mode root-identities closed-mode)
exception-middleware]))
Expand Down
42 changes: 27 additions & 15 deletions test/fluree/server/integration/basic_query_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -118,21 +118,33 @@
"type" "schema:Test"
"ex:name" "query-test"}]})
:headers json-headers}
txn-res (api-post :transact txn-req)
_ (assert (= 200 (:status txn-res)))
query-req {:body
(json/stringify
{"@context" test-system/default-context
"from" ledger-name
"selectOne" '{?t ["*"]}
"where" '{"id" ?t, "type" "schema:Test"}})
:headers json-headers}
query-res (api-post :query query-req)]
(is (= 200 (:status query-res)))
(is (= {"id" "ex:query-test"
"type" "schema:Test"
"ex:name" "query-test"}
(-> query-res :body (json/parse false))))))
txn-res (api-post :transact txn-req)]
(assert (= 200 (:status txn-res)))
(testing "with result"
(let [query-req {:body
(json/stringify
{"@context" test-system/default-context
"from" ledger-name
"selectOne" '{?t ["*"]}
"where" '{"id" ?t, "type" "schema:Test"}})
:headers json-headers}
query-res (api-post :query query-req)]
(is (= 200 (:status query-res)))
(is (= {"id" "ex:query-test"
"type" "schema:Test"
"ex:name" "query-test"}
(-> query-res :body (json/parse false))))))
(testing "without result"
(let [query-req {:body
(json/stringify
{"@context" test-system/default-context
"from" ledger-name
"selectOne" '{?t ["*"]}
"where" '{"id" ?t, "type" "schema:Foo"}})
:headers json-headers}
query-res (api-post :query query-req)]
(is (= 200 (:status query-res)))
(is (nil? (-> query-res :body (json/parse false))))))))

(testing "bind query works"
(let [ledger-name (create-rand-ledger "query-endpoint-bind-test")
Expand Down