fix: fix bug where http ring handler would cause :path to be applied twice

This commit is contained in:
Dekel Pilli 2024-09-02 15:40:00 +10:00
parent f466271e15
commit f1ec7bbe8e
No known key found for this signature in database
2 changed files with 19 additions and 2 deletions

View file

@ -133,7 +133,7 @@
(interceptor/queue executor))
router-opts (-> (r/options router)
(assoc ::interceptor/queue (partial interceptor/queue executor))
(dissoc :data) ; data is already merged into routes
(dissoc :data :path) ; data and path already take effect in routes
(cond-> (seq interceptors)
(update-in [:data :interceptors] (partial into (vec interceptors)))))
router (reitit.http/router (r/routes router) router-opts) ;; will re-compile the interceptors

View file

@ -88,7 +88,24 @@
(testing "all named routes can be matched"
(doseq [name (r/route-names router)]
(is (= name (-> (r/match-by-name router name) :data :name))))))))
(is (= name (-> (r/match-by-name router name) :data :name)))))))
(testing "path prefixed routes"
(let [router (http/router
[["/all" {:handler handler}]
["/get" {:get {:handler handler}}]
["/users" {:get handler}]]
{:path "/api"})
app (http/ring-handler router nil {:executor sieppari/executor})]
(testing "router can be extracted"
(is (= (r/routes router)
(r/routes (http/get-router app)))))
(testing "handler resolved original router routes"
(doseq [router-path (mapv first (r/routes router))]
(is (= 200
(:status (app {:uri router-path :request-method :get})))))))))
(def enforce-roles-interceptor
{:enter (fn [{{::keys [roles] :as request} :request :as ctx}]