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 {: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 {}

View file

@ -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))))))))