Automatically publish Swagger :consumes for :form params

Make parameters-middleware publish swagger data for endpoints when
:form, but not :body params,
are present.
This commit is contained in:
tjalkane 2020-07-08 09:04:47 +03:00
parent 0ffef07cbf
commit 15df0c5005
2 changed files with 25 additions and 1 deletions

View file

@ -10,4 +10,8 @@
:form-params - a map of parameters from the body :form-params - a map of parameters from the body
:params - a merged map of all types of parameter" :params - a merged map of all types of parameter"
{:name ::parameters {:name ::parameters
:compile (fn [{:keys [parameters]} _]
(if (and (some? (:form parameters)) (nil? (:body parameters)))
{:data {:swagger {:consumes ["application/x-www-form-urlencoded"]}}}
{}))
:wrap params/wrap-params}) :wrap params/wrap-params})

View file

@ -1,7 +1,8 @@
(ns reitit.ring.middleware.parameters-test (ns reitit.ring.middleware.parameters-test
(:require [clojure.test :refer [deftest testing is]] (:require [clojure.test :refer [deftest testing is]]
[reitit.ring.middleware.parameters :as parameters] [reitit.ring.middleware.parameters :as parameters]
[reitit.ring :as ring])) [reitit.ring :as ring]
[reitit.swagger :as swagger]))
(deftest parameters-test (deftest parameters-test
(let [app (ring/ring-handler (let [app (ring/ring-handler
@ -13,3 +14,22 @@
(app {:request-method :get (app {:request-method :get
:uri "/ping" :uri "/ping"
:query-string "kikka=kukka"}))))) :query-string "kikka=kukka"})))))
(deftest parameters-swagger-test
(let [app (ring/ring-handler
(ring/router
[["/form-params" {:post {:parameters {:form {:x string?}}
:handler identity}}]
["/body-params" {:post {:parameters {:body {:x string?}}
:handler identity}}]
["/swagger.json" {:get {:no-doc true
:handler (swagger/create-swagger-handler)}}]]
{:data {:middleware [parameters/parameters-middleware]}}))
spec (fn [path]
(-> {:request-method :get :uri "/swagger.json"}
app
(get-in [:body :paths path :post])))]
(testing "with form parameters"
(is (= ["application/x-www-form-urlencoded"] (:consumes (spec "/form-params")))))
(testing "with body parameters"
(is (= nil (:consumes (spec "/body-params")))))))