feat: warning when swagger encounters per-content-type coercions

This commit is contained in:
Joel Kaasinen 2023-03-10 08:49:27 +02:00
parent ae55b6628c
commit 8c87fef7b6
2 changed files with 43 additions and 9 deletions

View file

@ -167,6 +167,12 @@
;; api-docs
;;
(defn -warn-unsupported-coercions [{:keys [parameters responses] :as data}]
(when (:request parameters)
(println "WARNING [reitit.coercion]: swagger apidocs don't support :request coercion"))
(when (some :content (vals responses))
(println "WARNING [reitit.coercion]: swagger apidocs don't support :responses :content coercion")))
(defn get-apidocs [coercion specification data]
(let [swagger-parameter {:query :query
:body :body
@ -176,15 +182,17 @@
:multipart :formData}]
(case specification
:openapi (-get-apidocs coercion specification data)
:swagger (->> (update
data
:parameters
(fn [parameters]
(->> parameters
(map (fn [[k v]] [(swagger-parameter k) v]))
(filter first)
(into {}))))
(-get-apidocs coercion specification)))))
:swagger (do
(-warn-unsupported-coercions data)
(->> (update
data
:parameters
(fn [parameters]
(->> parameters
(map (fn [[k v]] [(swagger-parameter k) v]))
(filter first)
(into {}))))
(-get-apidocs coercion specification))))))
;;

View file

@ -384,3 +384,29 @@
spec (:body (app {:request-method :get, :uri "/swagger.json"}))]
(is (= ["query" "body" "formData" "header" "path"]
(map :in (get-in spec [:paths "/parameters" :post :parameters]))))))
(deftest multiple-content-types-test
(testing ":request coercion"
(let [app (ring/ring-handler
(ring/router
[["/parameters"
{:post {:coercion spec/coercion
:parameters {:request {:content {"application/json" {:x string?}}}}
:handler identity}}]
["/swagger.json"
{:get {:no-doc true
:handler (swagger/create-swagger-handler)}}]]))
output (with-out-str (app {:request-method :get, :uri "/swagger.json"}))]
(is (.contains output "WARN"))))
(testing "multiple response content types"
(let [app (ring/ring-handler
(ring/router
[["/parameters"
{:post {:coercion spec/coercion
:responses {200 {:content {"application/json" {:r string?}}}}
:handler identity}}]
["/swagger.json"
{:get {:no-doc true
:handler (swagger/create-swagger-handler)}}]]))
output (with-out-str (app {:request-method :get, :uri "/swagger.json"}))]
(is (.contains output "WARN")))))