diff --git a/CHANGELOG.md b/CHANGELOG.md index 738df37d..7a12fd80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,13 +12,22 @@ We use [Break Versioning][breakver]. The version numbers follow a `. {:request-method :get :uri "/swagger.json"} (app) :body (->> (m/decode m/instance "application/json")) - :paths path :get))) - produces (comp set :produces spec) - consumes (comp set :consumes spec)] + :paths path method))) + produces (comp set :produces (partial spec :get)) + consumes (comp set :consumes (partial spec :get)) + post-produces (comp set :produces (partial spec :post)) + post-consumes (comp set :consumes (partial spec :post))] (testing "with defaults" (let [path "/defaults"] @@ -85,7 +90,12 @@ (let [path "/just-edn"] (is (= #{"application/edn"} (produces path) - (consumes path))))))) + (consumes path))))) + (testing "form parameters swagger-data" + (let [path "/form-params"] + (is (= #{} + (post-produces path) + (post-consumes path))))))) (deftest muuntaja-swagger-parts-test (let [app (http/ring-handler @@ -103,17 +113,35 @@ (muuntaja/format-response-interceptor) (muuntaja/format-request-interceptor)] :get identity}] + ["/form-request" + {:interceptors [(muuntaja/format-negotiate-interceptor) + (muuntaja/format-request-interceptor)] + :post {:parameters {:form {:x string?}} + :handler identity}}] + ["/form-response" + {:interceptors [(muuntaja/format-negotiate-interceptor) + (muuntaja/format-response-interceptor)] + :post {:parameters {:form {:x string?}} + :handler identity}}] + ["/form-with-both" + {:interceptors [(muuntaja/format-negotiate-interceptor) + (muuntaja/format-response-interceptor) + (muuntaja/format-request-interceptor)] + :post {:parameters {:form {:x string?}} + :handler identity}}] ["/swagger.json" {:get {:no-doc true :handler (swagger/create-swagger-handler)}}]] {:data {:muuntaja m/instance}}) {:executor sieppari/executor}) - spec (fn [path] + spec (fn [method path] (-> {:request-method :get :uri "/swagger.json"} - (app) :body :paths (get path) :get)) - produces (comp :produces spec) - consumes (comp :consumes spec)] + (app) :body :paths (get path) method)) + produces (comp :produces (partial spec :get)) + consumes (comp :consumes (partial spec :get)) + post-produces (comp :produces (partial spec :post)) + post-consumes (comp :consumes (partial spec :post))] (testing "just request formatting" (let [path "/request"] @@ -133,7 +161,7 @@ (produces path))) (is (nil? (consumes path))))) - (testing "just response formatting" + (testing "request and response formatting" (let [path "/both"] (is (= #{"application/json" "application/transit+msgpack" @@ -144,4 +172,16 @@ "application/transit+msgpack" "application/transit+json" "application/edn"} - (consumes path))))))) + (consumes path))))) + (testing "just request formatting for form params" + (let [path "/form-request"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))) + (testing "just response formatting for form params" + (let [path "/form-response"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))) + (testing "just request formatting for form params" + (let [path "/form-with-both"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))))) 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"))))))) diff --git a/test/clj/reitit/ring/middleware/muuntaja_test.clj b/test/clj/reitit/ring/middleware/muuntaja_test.clj index f3d7fa31..0cd5beed 100644 --- a/test/clj/reitit/ring/middleware/muuntaja_test.clj +++ b/test/clj/reitit/ring/middleware/muuntaja_test.clj @@ -34,19 +34,24 @@ ["/just-edn" {:muuntaja just-edn :get identity}] + ["/form-params" + {:post {:parameters {:form {:x string?}} + :handler identity}}] ["/swagger.json" {:get {:no-doc true :handler (swagger/create-swagger-handler)}}]] {:data {:muuntaja m/instance :middleware [muuntaja/format-middleware]}})) - spec (fn [path] + spec (fn [method path] (let [path (keyword path)] (-> {:request-method :get :uri "/swagger.json"} (app) :body (->> (m/decode m/instance "application/json")) - :paths path :get))) - produces (comp set :produces spec) - consumes (comp set :consumes spec)] + :paths path method))) + produces (comp set :produces (partial spec :get)) + consumes (comp set :consumes (partial spec :get)) + post-produces (comp set :produces (partial spec :post)) + post-consumes (comp set :consumes (partial spec :post))] (testing "with defaults" (let [path "/defaults"] @@ -82,7 +87,12 @@ (let [path "/just-edn"] (is (= #{"application/edn"} (produces path) - (consumes path))))))) + (consumes path))))) + (testing "form parameters swagger-data" + (let [path "/form-params"] + (is (= #{} + (post-produces path) + (post-consumes path))))))) (deftest muuntaja-swagger-parts-test (let [app (ring/ring-handler @@ -100,16 +110,34 @@ muuntaja/format-response-middleware muuntaja/format-request-middleware] :get identity}] + ["/form-request" + {:middleware [muuntaja/format-negotiate-middleware + muuntaja/format-request-middleware] + :post {:parameters {:form {:x string?}} + :handler identity}}] + ["/form-response" + {:middleware [muuntaja/format-negotiate-middleware + muuntaja/format-response-middleware] + :post {:parameters {:form {:x string?}} + :handler identity}}] + ["/form-with-both" + {:middleware [muuntaja/format-negotiate-middleware + muuntaja/format-response-middleware + muuntaja/format-request-middleware] + :post {:parameters {:form {:x string?}} + :handler identity}}] ["/swagger.json" {:get {:no-doc true :handler (swagger/create-swagger-handler)}}]] {:data {:muuntaja m/instance}})) - spec (fn [path] + spec (fn [method path] (-> {:request-method :get :uri "/swagger.json"} - (app) :body :paths (get path) :get)) - produces (comp :produces spec) - consumes (comp :consumes spec)] + (app) :body :paths (get path) method)) + produces (comp :produces (partial spec :get)) + consumes (comp :consumes (partial spec :get)) + post-produces (comp :produces (partial spec :post)) + post-consumes (comp :consumes (partial spec :post))] (testing "just request formatting" (let [path "/request"] @@ -129,7 +157,7 @@ (produces path))) (is (nil? (consumes path))))) - (testing "just response formatting" + (testing "request and response formatting" (let [path "/both"] (is (= #{"application/json" "application/transit+msgpack" @@ -140,4 +168,16 @@ "application/transit+msgpack" "application/transit+json" "application/edn"} - (consumes path))))))) + (consumes path))))) + (testing "just request formatting for form params" + (let [path "/form-request"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))) + (testing "just response formatting for form params" + (let [path "/form-response"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))) + (testing "just request formatting for form params" + (let [path "/form-with-both"] + (is (nil? (post-produces path))) + (is (nil? (post-consumes path))))))) diff --git a/test/clj/reitit/ring/middleware/parameters_test.clj b/test/clj/reitit/ring/middleware/parameters_test.clj index e9658a1f..06d297ad 100644 --- a/test/clj/reitit/ring/middleware/parameters_test.clj +++ b/test/clj/reitit/ring/middleware/parameters_test.clj @@ -1,7 +1,8 @@ (ns reitit.ring.middleware.parameters-test (:require [clojure.test :refer [deftest testing is]] [reitit.ring.middleware.parameters :as parameters] - [reitit.ring :as ring])) + [reitit.ring :as ring] + [reitit.swagger :as swagger])) (deftest parameters-test (let [app (ring/ring-handler @@ -13,3 +14,22 @@ (app {:request-method :get :uri "/ping" :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")))))))