mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 00:11:11 +00:00
Add query-string to redirect-trailing-slash-handler
This commit is contained in:
parent
c2c267f4d8
commit
0870b20a05
2 changed files with 36 additions and 6 deletions
|
|
@ -133,10 +133,10 @@
|
|||
"
|
||||
([] (redirect-trailing-slash-handler {:method :both}))
|
||||
([{:keys [method]}]
|
||||
(letfn [(maybe-redirect [request path]
|
||||
(letfn [(maybe-redirect [{:keys [query-string] :as request} path]
|
||||
(if (and (seq path) (r/match-by-path (::r/router request) path))
|
||||
{:status (if (= (:request-method request) :get) 301 308)
|
||||
:headers {"Location" path}
|
||||
:headers {"Location" (if query-string (str path "?" query-string) path)}
|
||||
:body ""}))
|
||||
(redirect-handler [request]
|
||||
(let [uri (:uri request)]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
(ns reitit.ring-test
|
||||
(:require [clojure.set :as set]
|
||||
[clojure.test :refer [deftest is testing]]
|
||||
[clojure.test :refer [are deftest is testing]]
|
||||
[reitit.core :as r]
|
||||
[reitit.middleware :as middleware]
|
||||
[reitit.ring :as ring]
|
||||
|
|
@ -312,7 +312,15 @@
|
|||
|
||||
(testing "does not strip slashes"
|
||||
(is (= nil (app {:request-method :get, :uri "/slash-less/"})))
|
||||
(is (= nil (app {:request-method :post, :uri "/slash-less/"}))))))
|
||||
(is (= nil (app {:request-method :post, :uri "/slash-less/"}))))
|
||||
|
||||
(testing "retains query-string in location header"
|
||||
(are [method uri]
|
||||
(is (= "/with-slash/?kikka=kukka"
|
||||
(get-in (app {:request-method method :uri uri :query-string "kikka=kukka"})
|
||||
[:headers "Location"])))
|
||||
:get "/with-slash"
|
||||
:post "/with-slash"))))
|
||||
|
||||
(testing "using :method :strip"
|
||||
(let [app (ring/ring-handler
|
||||
|
|
@ -338,7 +346,17 @@
|
|||
|
||||
(testing "strips multiple slashes"
|
||||
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/////"}))))
|
||||
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))))
|
||||
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))
|
||||
|
||||
(testing "retains query-string in location header"
|
||||
(are [method uri]
|
||||
(is (= "/slash-less?kikka=kukka"
|
||||
(get-in (app {:request-method method :uri uri :query-string "kikka=kukka"})
|
||||
[:headers "Location"])))
|
||||
:get "/slash-less/"
|
||||
:get "/slash-less//"
|
||||
:post "/slash-less/"
|
||||
:post "/slash-less//"))))
|
||||
|
||||
(testing "without option (equivalent to using :method :both)"
|
||||
(let [app (ring/ring-handler
|
||||
|
|
@ -361,7 +379,19 @@
|
|||
|
||||
(testing "strips multiple slashes"
|
||||
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/////"}))))
|
||||
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))))))
|
||||
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))
|
||||
|
||||
(testing "retains query-string in location header"
|
||||
(are [method uri expected-location]
|
||||
(is (= expected-location
|
||||
(get-in (app {:request-method method :uri uri :query-string "kikka=kukka"})
|
||||
[:headers "Location"])))
|
||||
:get "/with-slash" "/with-slash/?kikka=kukka"
|
||||
:get "/slash-less/" "/slash-less?kikka=kukka"
|
||||
:get "/slash-less//" "/slash-less?kikka=kukka"
|
||||
:post "/with-slash" "/with-slash/?kikka=kukka"
|
||||
:post "/slash-less/" "/slash-less?kikka=kukka"
|
||||
:post "/slash-less//" "/slash-less?kikka=kukka"))))))
|
||||
|
||||
(deftest async-ring-test
|
||||
(let [promise #(let [value (atom ::nil)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue