mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 00:11:11 +00:00
fix: pick up openapi examples from [:responses _ :content :default]
This commit is contained in:
parent
4d1d469686
commit
d5021e549a
2 changed files with 36 additions and 9 deletions
|
|
@ -139,15 +139,15 @@
|
||||||
{:responses
|
{:responses
|
||||||
(into {}
|
(into {}
|
||||||
(map (fn [[status {:keys [content], :as response}]]
|
(map (fn [[status {:keys [content], :as response}]]
|
||||||
(let [default (coercion/get-default-schema response)
|
(let [default (coercion/get-default response)
|
||||||
content (-> (merge
|
content (-> (merge
|
||||||
(when default
|
(when default
|
||||||
(into {}
|
(into {}
|
||||||
(map (fn [content-type]
|
(map (fn [content-type]
|
||||||
(let [schema (->schema-object default {:in :responses
|
(let [schema (->schema-object (:schema default) {:in :responses
|
||||||
:type :schema
|
:type :schema
|
||||||
:content-type content-type})]
|
:content-type content-type})]
|
||||||
[content-type (->content nil schema)])))
|
[content-type (->content default schema)])))
|
||||||
content-types))
|
content-types))
|
||||||
(when content
|
(when content
|
||||||
(into {}
|
(into {}
|
||||||
|
|
|
||||||
|
|
@ -471,14 +471,20 @@
|
||||||
(ring/router
|
(ring/router
|
||||||
[["/examples"
|
[["/examples"
|
||||||
{:post {:decription "examples"
|
{:post {:decription "examples"
|
||||||
|
:content-types ["application/json" "application/edn"]
|
||||||
:coercion @coercion
|
:coercion @coercion
|
||||||
:request {:content {"application/json" {:schema (->schema :b)
|
:request {:content {"application/json" {:schema (->schema :b)
|
||||||
:examples {"named-example" {:description "a named example"
|
:examples {"named-example" {:description "a named example"
|
||||||
:value {:b "named"}}}}}}
|
:value {:b "named"}}}}
|
||||||
|
:default {:schema (->schema :b2)
|
||||||
|
:examples {"default-example" {:description "default example"
|
||||||
|
:value {:b2 "named"}}}}}}
|
||||||
:parameters {:query (->schema :q)}
|
:parameters {:query (->schema :q)}
|
||||||
:responses {200 {:description "success"
|
:responses {200 {:description "success"
|
||||||
:content {"application/json" {:schema (->schema :ok)
|
:content {"application/json" {:schema (->schema :ok)
|
||||||
:examples {"response-example" {:value {:ok "response"}}}}}}}
|
:examples {"response-example" {:value {:ok "response"}}}}
|
||||||
|
:default {:schema (->schema :ok)
|
||||||
|
:examples {"default-response-example" {:value {:ok "default"}}}}}}}
|
||||||
:handler identity}}]
|
:handler identity}}]
|
||||||
["/openapi.json"
|
["/openapi.json"
|
||||||
{:get {:handler (openapi/create-openapi-handler)
|
{:get {:handler (openapi/create-openapi-handler)
|
||||||
|
|
@ -508,7 +514,18 @@
|
||||||
:value {:b "named"}}}}
|
:value {:b "named"}}}}
|
||||||
(-> spec
|
(-> spec
|
||||||
(get-in [:paths "/examples" :post :requestBody :content "application/json"])
|
(get-in [:paths "/examples" :post :requestBody :content "application/json"])
|
||||||
normalize))))
|
normalize)))
|
||||||
|
(testing "default"
|
||||||
|
(is (match? {:schema {:type "object"
|
||||||
|
:properties {:b2 {:type "string"
|
||||||
|
:example "EXAMPLE"}}
|
||||||
|
:required ["b2"]
|
||||||
|
:example {:b2 "EXAMPLE2"}}
|
||||||
|
:examples {:default-example {:description "default example"
|
||||||
|
:value {:b2 "named"}}}}
|
||||||
|
(-> spec
|
||||||
|
(get-in [:paths "/examples" :post :requestBody :content "application/edn"])
|
||||||
|
normalize)))))
|
||||||
(testing "body response"
|
(testing "body response"
|
||||||
(is (match? {:schema {:type "object"
|
(is (match? {:schema {:type "object"
|
||||||
:properties {:ok {:type "string"
|
:properties {:ok {:type "string"
|
||||||
|
|
@ -518,7 +535,17 @@
|
||||||
:examples {:response-example {:value {:ok "response"}}}}
|
:examples {:response-example {:value {:ok "response"}}}}
|
||||||
(-> spec
|
(-> spec
|
||||||
(get-in [:paths "/examples" :post :responses 200 :content "application/json"])
|
(get-in [:paths "/examples" :post :responses 200 :content "application/json"])
|
||||||
normalize))))
|
normalize)))
|
||||||
|
(testing "default"
|
||||||
|
(is (match? {:schema {:type "object"
|
||||||
|
:properties {:ok {:type "string"
|
||||||
|
:example "EXAMPLE"}}
|
||||||
|
:required ["ok"]
|
||||||
|
:example {:ok "EXAMPLE2"}}
|
||||||
|
:examples {:default-response-example {:value {:ok "default"}}}}
|
||||||
|
(-> spec
|
||||||
|
(get-in [:paths "/examples" :post :responses 200 :content "application/edn"])
|
||||||
|
normalize)))))
|
||||||
(testing "spec is valid"
|
(testing "spec is valid"
|
||||||
(is (nil? (validate spec))))))))
|
(is (nil? (validate spec))))))))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue