Skip to content

Commit

Permalink
added get and set attribute core fns; organized core fns
Browse files Browse the repository at this point in the history
  • Loading branch information
onionpancakes committed Jul 24, 2024
1 parent f095171 commit e0e8cdc
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 46 deletions.
54 changes: 37 additions & 17 deletions modules/serval-core/src/dev/onionpancakes/serval/core.clj
Original file line number Diff line number Diff line change
@@ -1,9 +1,37 @@
(ns dev.onionpancakes.serval.core
(:require [dev.onionpancakes.serval.response.body :as resp.body]
[dev.onionpancakes.serval.response.http :as resp.http])
(:import [jakarta.servlet FilterChain ServletRequest ServletResponse
ServletInputStream ServletOutputStream]
[jakarta.servlet.http HttpServletRequest HttpServletResponse]))
(:import [jakarta.servlet
ServletRequest
ServletResponse
ServletInputStream
ServletOutputStream
FilterChain]
[jakarta.servlet.http
HttpServletRequest
HttpServletResponse]))

;; Request

(defn get-input-stream
{:tag ServletInputStream}
[^ServletRequest request]
(.getInputStream request))

(defn get-reader
{:tag java.io.BufferedReader}
[^ServletRequest request]
(.getReader request))

(defn get-attribute
[^ServletRequest request name]
(.getAttribute request name))

(defn set-attribute
[^ServletRequest request name obj]
(.setAttribute request name obj))

;; Response

(defn set-http
{:tag HttpServletResponse}
Expand All @@ -29,20 +57,6 @@
([^HttpServletResponse response location]
(.sendRedirect response location)))

(defn do-filter
[^FilterChain chain request response]
(.doFilter chain request response))

(defn get-input-stream
{:tag ServletInputStream}
[^ServletRequest request]
(.getInputStream request))

(defn get-reader
{:tag java.io.BufferedReader}
[^ServletRequest request]
(.getReader request))

(defn get-output-stream
{:tag ServletOutputStream}
[^ServletResponse response]
Expand All @@ -58,3 +72,9 @@

(def writable-to-writer
resp.body/writable-to-writer)

;; Filter

(defn do-filter
[^FilterChain chain request response]
(.doFilter chain request response))
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,42 @@
[clojure.string])
(:import [jakarta.servlet.http HttpServletResponse]))

;; Request

(deftest test-get-input-stream
(with-handler (fn [_ request response]
(srv/set-http response {:content-type "text/plain"
:character-encoding "utf-8"})
(->> (srv/get-input-stream request)
(slurp)
(srv/write-body response)))
(let [resp (send {:method :POST
:body "foo"})]
(is (= (:status resp) 200))
(is (= (:body resp) "foo")))))

(deftest test-get-reader
(with-handler (fn [_ request response]
(srv/set-http response {:content-type "text/plain"
:character-encoding "utf-8"})
(->> (srv/get-reader request)
(slurp)
(srv/write-body response)))
(let [resp (send {:method :POST
:body "foo"})]
(is (= (:status resp) 200))
(is (= (:body resp) "foo")))))

(deftest test-get-set-attribute
(with-handler (fn [_ request response]
(srv/set-attribute request "foo" "bar")
(srv/write-body response (srv/get-attribute request "foo")))
(let [resp (send)]
(is (= (:status resp) 200))
(is (= (:body resp) "bar")))))

;; Response

(deftest test-set-http
(with-handler (fn [_ _ response]
(srv/set-http response
Expand Down Expand Up @@ -62,35 +98,6 @@
(srv/send-redirect response "/"))
(is (= (:status (send)) 302))))

(deftest test-do-filter
(with-handler {:routes [["/*" (fn [_ req resp chain]
(srv/do-filter chain req resp)) (constantly nil)]]}
(is (= (:status (send)) 200))))

(deftest test-get-input-stream
(with-handler (fn [_ request response]
(srv/set-http response {:content-type "text/plain"
:character-encoding "utf-8"})
(->> (srv/get-input-stream request)
(slurp)
(srv/write-body response)))
(let [resp (send {:method :POST
:body "foo"})]
(is (= (:status resp) 200))
(is (= (:body resp) "foo")))))

(deftest test-get-reader
(with-handler (fn [_ request response]
(srv/set-http response {:content-type "text/plain"
:character-encoding "utf-8"})
(->> (srv/get-reader request)
(slurp)
(srv/write-body response)))
(let [resp (send {:method :POST
:body "foo"})]
(is (= (:status resp) 200))
(is (= (:body resp) "foo")))))

(deftest test-get-output-stream
(with-handler (fn [_ request response]
(srv/set-http response {:content-type "text/plain"
Expand Down Expand Up @@ -132,3 +139,10 @@
(let [resp (send)]
(is (= (:status resp) 200))
(is (= (:body resp) "foo")))))

;; Filter

(deftest test-do-filter
(with-handler {:routes [["/*" (fn [_ req resp chain]
(srv/do-filter chain req resp)) (constantly nil)]]}
(is (= (:status (send)) 200))))

0 comments on commit e0e8cdc

Please sign in to comment.