diff --git a/modules/reitit-http/src/reitit/http.cljc b/modules/reitit-http/src/reitit/http.cljc index d2d4384a..373df4db 100644 --- a/modules/reitit-http/src/reitit/http.cljc +++ b/modules/reitit-http/src/reitit/http.cljc @@ -96,17 +96,24 @@ (interceptor/execute executor default-queue request))) (interceptor/execute executor default-queue request))) ([request respond raise] - (if-let [match (r/match-by-path router (:uri request))] - (let [method (:request-method request) - path-params (:path-params match) - endpoint (-> match :result method) - interceptors (or (:queue endpoint) (:interceptors endpoint)) - request (-> request - (impl/fast-assoc :path-params path-params) - (impl/fast-assoc ::r/match match) - (impl/fast-assoc ::r/router router))] - (interceptor/execute executor interceptors request respond raise)) - (interceptor/execute executor default-queue request respond raise)) + (let [default #(interceptor/execute executor default-queue % respond raise)] + (if-let [match (r/match-by-path router (:uri request))] + (let [method (:request-method request) + path-params (:path-params match) + endpoint (-> match :result method) + interceptors (or (:queue endpoint) (:interceptors endpoint)) + request (-> request + (impl/fast-assoc :path-params path-params) + (impl/fast-assoc ::r/match match) + (impl/fast-assoc ::r/router router)) + respond' (fn [response] + (if response + (respond response) + (default request)))] + (if interceptors + (interceptor/execute executor interceptors request respond' raise) + (default request))) + (default request))) nil)) {::r/router router}))) diff --git a/test/cljc/reitit/http_test.cljc b/test/cljc/reitit/http_test.cljc index 48a90730..f59fdf72 100644 --- a/test/cljc/reitit/http_test.cljc +++ b/test/cljc/reitit/http_test.cljc @@ -170,69 +170,68 @@ (testing "handler rejects" (is (= -406 (:status (app {:request-method :get, :uri "/pong"})))))))))) -#_(deftest async-http-test - (let [promise #(let [value (atom ::nil)] - (fn - ([] @value) - ([x] (reset! value x)))) - response {:status 200, :body "ok"} - router (http/router - [["/ping" {:get (fn [_ respond _] - (respond response))}] - ["/pong" (fn [_ respond _] - (respond nil))]]) - app (http/ring-handler router)] +(deftest async-http-test + (let [promise #(let [value (atom ::nil)] + (fn + ([] @value) + ([x] + (reset! value x)))) + response {:status 200, :body "ok"} + router (http/router + [["/ping" {:get (fn [_] response)}] + ["/pong" (fn [_] nil)]]) + app (http/ring-handler router nil {:executor sieppari/executor})] - (testing "match" - (let [respond (promise) - raise (promise)] - (app {:request-method :get, :uri "/ping"} respond raise) - (is (= response (respond))) - (is (= ::nil (raise))))) + (testing "match" + (let [respond (promise) + raise (promise)] + (app {:request-method :get, :uri "/ping"} respond raise) + (is (= response (respond))) + (is (= ::nil (raise))))) - (testing "no match" + (testing "no match" - (testing "with defaults" + (testing "with defaults" + (testing "route doesn't match" + (let [respond (promise) + raise (promise)] + (app {:request-method :get, :uri "/"} respond raise) + (is (= nil (respond))) + (is (= ::nil (raise))))) + (testing "method doesn't match" + (let [respond (promise) + raise (promise)] + (app {:request-method :post, :uri "/ping"} respond raise) + (is (= nil (respond))) + (is (= ::nil (raise))))) + (testing "handler rejects" + (let [respond (promise) + raise (promise)] + (app {:request-method :get, :uri "/pong"} respond raise) + (is (= nil (respond))) + (is (= ::nil (raise)))))) + + (testing "with default http responses" + + (let [app (http/ring-handler router (ring/create-default-handler) {:executor sieppari/executor})] (testing "route doesn't match" (let [respond (promise) raise (promise)] (app {:request-method :get, :uri "/"} respond raise) - (is (= nil (respond))) + (is (= 404 (:status (respond)))) (is (= ::nil (raise))))) (testing "method doesn't match" (let [respond (promise) raise (promise)] (app {:request-method :post, :uri "/ping"} respond raise) - (is (= nil (respond))) + (is (= 405 (:status (respond)))) (is (= ::nil (raise))))) - (testing "handler rejects" + (testing "if handler rejects" (let [respond (promise) raise (promise)] (app {:request-method :get, :uri "/pong"} respond raise) - (is (= nil (respond))) - (is (= ::nil (raise)))))) - - (testing "with default http responses" - - (let [app (http/ring-handler router (ring/create-default-handler))] - (testing "route doesn't match" - (let [respond (promise) - raise (promise)] - (app {:request-method :get, :uri "/"} respond raise) - (is (= 404 (:status (respond)))) - (is (= ::nil (raise))))) - (testing "method doesn't match" - (let [respond (promise) - raise (promise)] - (app {:request-method :post, :uri "/ping"} respond raise) - (is (= 405 (:status (respond)))) - (is (= ::nil (raise))))) - (testing "if handler rejects" - (let [respond (promise) - raise (promise)] - (app {:request-method :get, :uri "/pong"} respond raise) - (is (= 406 (:status (respond)))) - (is (= ::nil (raise)))))))))) + (is (= 406 (:status (respond)))) + (is (= ::nil (raise)))))))))) (deftest interceptor-transform-test (let [interceptor (fn [name] {:name name