Enrich request for pedestal/routing-interceptor default-queue

This ensures requests handled by the default queue also have
access to the router per the injected :reitit.core/router key
on the request.
This commit is contained in:
Dieter Komendera 2021-06-24 14:07:23 +02:00
parent de5bdeba19
commit 056c70d269
2 changed files with 27 additions and 2 deletions

View file

@ -89,7 +89,8 @@
default-interceptors (->> interceptors
(map #(interceptor/into-interceptor % nil (r/options router))))
default-queue (interceptor/queue executor default-interceptors)
enrich-request (ring/create-enrich-request inject-match? inject-router?)]
enrich-request (ring/create-enrich-request inject-match? inject-router?)
enrich-default-request (ring/create-enrich-default-request inject-router?)]
{:name ::router
:enter (fn [{:keys [request] :as context}]
(if-let [match (r/match-by-path router (:uri request))]
@ -101,7 +102,9 @@
context (assoc context :request request)
queue (interceptor/queue executor (concat default-interceptors interceptors))]
(interceptor/enqueue executor context queue))
(interceptor/enqueue executor context default-queue)))
(let [request (enrich-default-request request router)
context (assoc context :request request)]
(interceptor/enqueue executor context default-queue))))
:leave (fn [context]
(if-not (:response context)
(assoc context :response (default-handler (:request context)))

View file

@ -41,3 +41,25 @@
(:io.pedestal.http/service-fn))]
(is (= "ok" (:body (io.pedestal.test/response-for service :get "/ok"))))
(is (= 500 (:status (io.pedestal.test/response-for service :get "/fail"))))))
(deftest pedestal-inject-router-test
(let [check-router (fn [r] (when-not (:reitit.core/router r)
(throw (ex-info "Missing :reitit.core/router!" {}))))
interceptor {:name ::needs-router
:enter (fn [{:as context :keys [request]}]
(check-router request)
context)}
router (pedestal/routing-interceptor
(http/router
[""
["/ok" (fn [r] (check-router r) {:status 200, :body "ok"})]])
nil
{:interceptors [interceptor]})
service (-> {:io.pedestal.http/request-logger nil
:io.pedestal.http/routes []}
(io.pedestal.http/default-interceptors)
(pedestal/replace-last-interceptor router)
(io.pedestal.http/create-servlet)
(:io.pedestal.http/service-fn))]
(is (= "ok" (:body (io.pedestal.test/response-for service :get "/ok"))))
(is (= "Not Found" (:body (io.pedestal.test/response-for service :get "/not-existing"))))))