From 6703a02baafb7b220ccb421ec57228142fdd1b8b Mon Sep 17 00:00:00 2001 From: tjalkane <1162417+Koura@users.noreply.github.com> Date: Wed, 8 Jul 2020 10:18:57 +0300 Subject: [PATCH] Publish Swagger :consumes for parameters-interceptor Make parameters-interceptor automatically publish swagger data for endpoints when :form, but not :body params, are present. --- .../reitit/http/interceptors/parameters.clj | 4 ++++ .../http/interceptors/parameters_test.clj | 23 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/modules/reitit-interceptors/src/reitit/http/interceptors/parameters.clj b/modules/reitit-interceptors/src/reitit/http/interceptors/parameters.clj index 0a21ba20..5731744e 100644 --- a/modules/reitit-interceptors/src/reitit/http/interceptors/parameters.clj +++ b/modules/reitit-interceptors/src/reitit/http/interceptors/parameters.clj @@ -11,6 +11,10 @@ :params - a merged map of all types of parameter" [] {:name ::parameters + :compile (fn [{:keys [parameters]} _] + (if (and (some? (:form parameters)) (nil? (:body parameters))) + {:data {:swagger {:consumes ["application/x-www-form-urlencoded"]}}} + {})) :enter (fn [ctx] (let [request (:request ctx)] (assoc ctx :request (params/params-request request))))}) diff --git a/test/clj/reitit/http/interceptors/parameters_test.clj b/test/clj/reitit/http/interceptors/parameters_test.clj index 6618a762..bb326782 100644 --- a/test/clj/reitit/http/interceptors/parameters_test.clj +++ b/test/clj/reitit/http/interceptors/parameters_test.clj @@ -2,7 +2,8 @@ (:require [clojure.test :refer [deftest testing is]] [reitit.http.interceptors.parameters :as parameters] [reitit.http :as http] - [reitit.interceptor.sieppari :as sieppari])) + [reitit.interceptor.sieppari :as sieppari] + [reitit.swagger :as swagger])) (deftest parameters-test (let [app (http/ring-handler @@ -15,3 +16,23 @@ (app {:request-method :get :uri "/ping" :query-string "kikka=kukka"}))))) + +(deftest parameters-swagger-test + (let [app (http/ring-handler + (http/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 {:interceptors [(parameters/parameters-interceptor)]}}) +  {:executor sieppari/executor}) + 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")))))))