fix: pick up openapi examples from [:responses _ :content :default]

This commit is contained in:
Joel Kaasinen 2023-08-28 13:00:37 +03:00
parent 4d1d469686
commit d5021e549a
2 changed files with 36 additions and 9 deletions

View file

@ -139,15 +139,15 @@
{:responses
(into {}
(map (fn [[status {:keys [content], :as response}]]
(let [default (coercion/get-default-schema response)
(let [default (coercion/get-default response)
content (-> (merge
(when default
(into {}
(map (fn [content-type]
(let [schema (->schema-object default {:in :responses
(let [schema (->schema-object (:schema default) {:in :responses
:type :schema
:content-type content-type})]
[content-type (->content nil schema)])))
[content-type (->content default schema)])))
content-types))
(when content
(into {}

View file

@ -471,14 +471,20 @@
(ring/router
[["/examples"
{:post {:decription "examples"
:content-types ["application/json" "application/edn"]
:coercion @coercion
:request {:content {"application/json" {:schema (->schema :b)
: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)}
:responses {200 {:description "success"
: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}}]
["/openapi.json"
{:get {:handler (openapi/create-openapi-handler)
@ -508,7 +514,18 @@
:value {:b "named"}}}}
(-> spec
(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"
(is (match? {:schema {:type "object"
:properties {:ok {:type "string"
@ -518,7 +535,17 @@
:examples {:response-example {:value {:ok "response"}}}}
(-> spec
(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"
(is (nil? (validate spec))))))))