diff --git a/modules/reitit-core/src/reitit/coercion.cljc b/modules/reitit-core/src/reitit/coercion.cljc index f6075ae9..969069ce 100644 --- a/modules/reitit-core/src/reitit/coercion.cljc +++ b/modules/reitit-core/src/reitit/coercion.cljc @@ -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)))))) ;; diff --git a/test/cljc/reitit/swagger_test.clj b/test/cljc/reitit/swagger_test.clj index 0958b8b1..542b7ebd 100644 --- a/test/cljc/reitit/swagger_test.clj +++ b/test/cljc/reitit/swagger_test.clj @@ -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")))))