/test/clj/reitit/pedestal_test.clj

https://github.com/metosin/reitit · Clojure · 43 lines · 40 code · 3 blank · 0 comment · 5 complexity · 5cc14fa9d1bbecf9e5be2c26bc8e4853 MD5 · raw file

  1. (ns reitit.pedestal-test
  2. (:require [clojure.test :refer [deftest testing is]]
  3. [io.pedestal.test]
  4. [io.pedestal.http]
  5. [reitit.http :as http]
  6. [reitit.pedestal :as pedestal]
  7. [reitit.http.interceptors.exception :as exception]))
  8. (deftest arities-test
  9. (is (= #{0} (#'pedestal/arities (fn []))))
  10. (is (= #{1} (#'pedestal/arities (fn [_]))))
  11. (is (= #{0 1 2} (#'pedestal/arities (fn ([]) ([_]) ([_ _]))))))
  12. (deftest interceptor-test
  13. (testing "without :enter, :leave or :error are stripped"
  14. (is (nil? (pedestal/->interceptor {:name ::kikka}))))
  15. (testing ":error arities are wrapped"
  16. (let [has-2-arity-error? (fn [interceptor]
  17. (-> interceptor
  18. (pedestal/->interceptor)
  19. (:error)
  20. (#'pedestal/arities)
  21. (contains? 2)))]
  22. (is (has-2-arity-error? {:error (fn [_])}))
  23. (is (has-2-arity-error? {:error (fn [_ _])}))
  24. (is (has-2-arity-error? {:error (fn [_ _ _])}))
  25. (is (has-2-arity-error? {:error (fn ([_]) ([_ _]))})))))
  26. (deftest pedestal-e2e-test
  27. (let [router (pedestal/routing-interceptor
  28. (http/router
  29. [""
  30. {:interceptors [{:name :nop} (exception/exception-interceptor)]}
  31. ["/ok" (fn [_] {:status 200, :body "ok"})]
  32. ["/fail" (fn [_] (throw (ex-info "kosh" {})))]]))
  33. service (-> {:io.pedestal.http/request-logger nil
  34. :io.pedestal.http/routes []}
  35. (io.pedestal.http/default-interceptors)
  36. (pedestal/replace-last-interceptor router)
  37. (io.pedestal.http/create-servlet)
  38. (:io.pedestal.http/service-fn))]
  39. (is (= "ok" (:body (io.pedestal.test/response-for service :get "/ok"))))
  40. (is (= 500 (:status (io.pedestal.test/response-for service :get "/fail"))))))