mirror of
https://github.com/metosin/reitit.git
synced 2025-12-19 01:11:11 +00:00
expand the transformed mw
This commit is contained in:
parent
368850b6ab
commit
ba78008d90
2 changed files with 42 additions and 23 deletions
|
|
@ -81,7 +81,7 @@
|
||||||
([[path {:keys [middleware handler] :as data}]
|
([[path {:keys [middleware handler] :as data}]
|
||||||
{:keys [::transform] :or {transform identity} :as opts} scope]
|
{:keys [::transform] :or {transform identity} :as opts} scope]
|
||||||
(ensure-handler! path data scope)
|
(ensure-handler! path data scope)
|
||||||
(let [middleware (transform (expand middleware data opts))]
|
(let [middleware (expand (transform (expand middleware data opts)) data opts)]
|
||||||
(map->Endpoint
|
(map->Endpoint
|
||||||
{:handler (compile-handler middleware handler)
|
{:handler (compile-handler middleware handler)
|
||||||
:middleware middleware
|
:middleware middleware
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,9 @@
|
||||||
(defn mw [handler name]
|
(defn mw [handler name]
|
||||||
(fn
|
(fn
|
||||||
([request]
|
([request]
|
||||||
(-> request
|
(handler (update request ::mw (fnil conj []) name)))
|
||||||
(update ::mw (fnil conj []) name)
|
|
||||||
(handler)
|
|
||||||
(update :body (fnil conj []) name)))
|
|
||||||
([request respond raise]
|
([request respond raise]
|
||||||
(handler
|
(handler (update request ::mw (fnil conj []) name) respond raise))))
|
||||||
(update request ::mw (fnil conj []) name)
|
|
||||||
#(respond (update % :body (fnil conj []) name))
|
|
||||||
raise))))
|
|
||||||
|
|
||||||
(defn handler
|
(defn handler
|
||||||
([{:keys [::mw]}]
|
([{:keys [::mw]}]
|
||||||
|
|
@ -37,14 +31,14 @@
|
||||||
(testing "ring-handler"
|
(testing "ring-handler"
|
||||||
(let [api-mw #(mw % :api)
|
(let [api-mw #(mw % :api)
|
||||||
router (ring/router
|
router (ring/router
|
||||||
[["/api" {:middleware [api-mw]}
|
["/api" {:middleware [api-mw]}
|
||||||
["/all" handler]
|
["/all" handler]
|
||||||
["/get" {:get handler}]
|
["/get" {:get handler}]
|
||||||
["/users" {:middleware [[mw :users]]
|
["/users" {:middleware [[mw :users]]
|
||||||
:get handler
|
:get handler
|
||||||
:post {:handler handler
|
:post {:handler handler
|
||||||
:middleware [[mw :post]]}
|
:middleware [[mw :post]]}
|
||||||
:handler handler}]]])
|
:handler handler}]])
|
||||||
app (ring/ring-handler router)]
|
app (ring/ring-handler router)]
|
||||||
|
|
||||||
(testing "router can be extracted"
|
(testing "router can be extracted"
|
||||||
|
|
@ -54,31 +48,31 @@
|
||||||
(is (= nil (app {:uri "/favicon.ico"}))))
|
(is (= nil (app {:uri "/favicon.ico"}))))
|
||||||
|
|
||||||
(testing "catch all handler"
|
(testing "catch all handler"
|
||||||
(is (= {:status 200, :body [:api :ok :api]}
|
(is (= {:status 200, :body [:api :ok]}
|
||||||
(app {:uri "/api/all" :request-method :get}))))
|
(app {:uri "/api/all" :request-method :get}))))
|
||||||
|
|
||||||
(testing "just get handler"
|
(testing "just get handler"
|
||||||
(is (= {:status 200, :body [:api :ok :api]}
|
(is (= {:status 200, :body [:api :ok]}
|
||||||
(app {:uri "/api/get" :request-method :get})))
|
(app {:uri "/api/get" :request-method :get})))
|
||||||
(is (= nil (app {:uri "/api/get" :request-method :post}))))
|
(is (= nil (app {:uri "/api/get" :request-method :post}))))
|
||||||
|
|
||||||
(testing "expanded method handler"
|
(testing "expanded method handler"
|
||||||
(is (= {:status 200, :body [:api :users :ok :users :api]}
|
(is (= {:status 200, :body [:api :users :ok]}
|
||||||
(app {:uri "/api/users" :request-method :get}))))
|
(app {:uri "/api/users" :request-method :get}))))
|
||||||
|
|
||||||
(testing "method handler with middleware"
|
(testing "method handler with middleware"
|
||||||
(is (= {:status 200, :body [:api :users :post :ok :post :users :api]}
|
(is (= {:status 200, :body [:api :users :post :ok]}
|
||||||
(app {:uri "/api/users" :request-method :post}))))
|
(app {:uri "/api/users" :request-method :post}))))
|
||||||
|
|
||||||
(testing "fallback handler"
|
(testing "fallback handler"
|
||||||
(is (= {:status 200, :body [:api :users :ok :users :api]}
|
(is (= {:status 200, :body [:api :users :ok]}
|
||||||
(app {:uri "/api/users" :request-method :put}))))
|
(app {:uri "/api/users" :request-method :put}))))
|
||||||
|
|
||||||
(testing "3-arity"
|
(testing "3-arity"
|
||||||
(let [result (atom nil)
|
(let [result (atom nil)
|
||||||
respond (partial reset! result), raise ::not-called]
|
respond (partial reset! result), raise ::not-called]
|
||||||
(app {:uri "/api/users" :request-method :post} respond raise)
|
(app {:uri "/api/users" :request-method :post} respond raise)
|
||||||
(is (= {:status 200, :body [:api :users :post :ok :post :users :api]}
|
(is (= {:status 200, :body [:api :users :post :ok]}
|
||||||
@result))))))
|
@result))))))
|
||||||
|
|
||||||
(testing "named routes"
|
(testing "named routes"
|
||||||
|
|
@ -160,3 +154,28 @@
|
||||||
(is (= nil (respond)))
|
(is (= nil (respond)))
|
||||||
(is (= ::nil (raise)))))))
|
(is (= ::nil (raise)))))))
|
||||||
|
|
||||||
|
(deftest middleware-transform-test
|
||||||
|
(let [middleware (fn [name] {:name name, :wrap #(mw % name)})
|
||||||
|
request {:uri "/api/avaruus" :request-method :get}
|
||||||
|
create (fn [options]
|
||||||
|
(ring/ring-handler
|
||||||
|
(ring/router
|
||||||
|
["/api" {:middleware [(middleware :olipa)]}
|
||||||
|
["/avaruus" {:middleware [(middleware :kerran)]
|
||||||
|
:get {:handler handler
|
||||||
|
:middleware [(middleware :avaruus)]}}]]
|
||||||
|
options)))]
|
||||||
|
|
||||||
|
(testing "by default, all middleware are applied in order"
|
||||||
|
(let [app (create nil)]
|
||||||
|
(is (= {:status 200, :body [:olipa :kerran :avaruus :ok]}
|
||||||
|
(app request)))))
|
||||||
|
|
||||||
|
(testing "middleware can be re-ordered"
|
||||||
|
(let [app (create {::middleware/transform (partial sort-by :name)})]
|
||||||
|
(is (= {:status 200, :body [:avaruus :kerran :olipa :ok]}
|
||||||
|
(app request)))))
|
||||||
|
|
||||||
|
(testing "adding debug middleware between middleware"
|
||||||
|
(let [app (create {::middleware/transform #(interleave % (repeat (middleware "debug")))})]
|
||||||
|
(is (= {:status 200, :body [:olipa "debug" :kerran "debug" :avaruus "debug" :ok]} (app request)))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue