diff --git a/modules/reitit-openapi/src/reitit/openapi.cljc b/modules/reitit-openapi/src/reitit/openapi.cljc index 68dc2caa..bd66ac52 100644 --- a/modules/reitit-openapi/src/reitit/openapi.cljc +++ b/modules/reitit-openapi/src/reitit/openapi.cljc @@ -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 - :type :schema - :content-type content-type})] - [content-type (->content nil schema)]))) + (let [schema (->schema-object (:schema default) {:in :responses + :type :schema + :content-type content-type})] + [content-type (->content default schema)]))) content-types)) (when content (into {} diff --git a/test/cljc/reitit/openapi_test.clj b/test/cljc/reitit/openapi_test.clj index acfd2966..bb915917 100644 --- a/test/cljc/reitit/openapi_test.clj +++ b/test/cljc/reitit/openapi_test.clj @@ -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))))))))