diff options
| author | sostler <sbostler@gmail.com> | 2010-02-10 01:08:44 -0500 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-02-10 01:08:44 -0500 |
| commit | d3fcf8d56122514c3dcbac004fcf105a4e899352 (patch) | |
| tree | 484ded214ddba3a6cc44e40d129fe1fc403e91fc /compojure-3.2/test/compojure/http | |
| parent | 079e2e9c1d3d5fb0f19515bfb566864565c43213 (diff) | |
Added custom compojure tree
Diffstat (limited to 'compojure-3.2/test/compojure/http')
| -rwxr-xr-x | compojure-3.2/test/compojure/http/helpers_test.clj | 21 | ||||
| -rwxr-xr-x | compojure-3.2/test/compojure/http/middleware_test.clj | 114 | ||||
| -rwxr-xr-x | compojure-3.2/test/compojure/http/request_test.clj | 51 | ||||
| -rwxr-xr-x | compojure-3.2/test/compojure/http/response_test.clj | 46 | ||||
| -rwxr-xr-x | compojure-3.2/test/compojure/http/routes_test.clj | 168 | ||||
| -rwxr-xr-x | compojure-3.2/test/compojure/http/session_test.clj | 73 |
6 files changed, 473 insertions, 0 deletions
diff --git a/compojure-3.2/test/compojure/http/helpers_test.clj b/compojure-3.2/test/compojure/http/helpers_test.clj new file mode 100755 index 0000000..fdd9a68 --- /dev/null +++ b/compojure-3.2/test/compojure/http/helpers_test.clj @@ -0,0 +1,21 @@ +(ns compojure.http.helpers-test + (:use compojure.http.helpers + compojure.http.routes + compojure.control + clojure.contrib.test-is)) + +(deftest test-set-cookie + (is (= (set-cookie :foo "bar") + {:headers {"Set-Cookie" "foo=bar"}}))) + +(deftest test-set-cookie-path + (is (= (set-cookie :a "b", :path "/") + {:headers {"Set-Cookie" "a=b; path=/"}}))) + +(deftest test-content-type + (is (= (content-type "text/html") + {:headers {"Content-Type" "text/html"}}))) + +(deftest test-safe-path + (is (not (safe-path? "/basedir/compojure" "../private/secret.txt"))) + (is (safe-path? "/basedir/compojure" "public/index.html"))) diff --git a/compojure-3.2/test/compojure/http/middleware_test.clj b/compojure-3.2/test/compojure/http/middleware_test.clj new file mode 100755 index 0000000..a3ddc8a --- /dev/null +++ b/compojure-3.2/test/compojure/http/middleware_test.clj @@ -0,0 +1,114 @@ +(ns compojure.http.middleware-test + (:use compojure.http.middleware + compojure.http.routes + clojure.contrib.test-is)) + +(deftest test-header-option + (is (= (header-option [:name "value"]) + "name=value"))) + +(deftest test-header-option-true + (is (= (header-option [:name true]) + "name"))) + +(deftest test-header-option-false + (is (nil? (header-option [:name false])))) + +(deftest test-header-options-multi + (let [m {:name "value", + :false false, + :true true}] + (is (= (header-options m ", ") + "name=value, true")))) + +(deftest test-header-options-single + (let [m {:name "value"}] + (is (= (header-options m ", ") + "name=value")))) + +(defn mock-middleware-response [f & args] + (let [routes (routes (GET "/foo" [{:headers {"k1" "v1" "k2" "v2"}} "body"])) + request {:request-method :get, + :uri "/foo"}] + ((apply f (conj args routes)) request))) + +(deftest test-with-headers + (let [headers {"name1" "value1", "name2" "value2"} + response (mock-middleware-response with-headers headers)] + (is (= "value1" (get (:headers response) "name1"))) + (is (= "value2" (get (:headers response) "name2"))) + (is (= "v1" (get (:headers response) "k1"))))) + +(deftest test-with-headers-overwrites + (let [headers {"k1" "vnew"} + response (mock-middleware-response with-headers headers)] + (is (= "vnew" (get (:headers response) "k1"))) + (is (= "v2" (get (:headers response) "k2"))))) + +(deftest test-with-cache-control + (let [m {:max-age 3600 :public false :must-revalidate true}] + (let [response (mock-middleware-response with-cache-control m)] + (is (= "max-age=3600, must-revalidate" + (get (:headers response) "Cache-Control")))))) + +(defn run-ignore-trailing-slash-paths + [route-path uri] + (let [routes (routes (GET route-path "foo")) + request {:request-method :get + :uri uri} + response ((ignore-trailing-slash routes) request)] + (= (:body response) "foo"))) + +(deftest test-ignore-trailing-slash-paths + (are (run-ignore-trailing-slash-paths _1 _2) + "/" "/" + "/foo" "/foo" + "/foo" "/foo/" + "/foo/bar" "/foo/bar/")) + +(defn run-with-context + [route-path uri context] + (let [routes (routes (GET route-path "foo")) + request {:request-method :get + :uri uri} + response ((with-context routes context) request)] + (= (:body response) "foo"))) + +(deftest test-with-context + (are (run-with-context _1 _2 "/context") + "/" "/context" + "/home" "/context/home" + "/asset/1" "/context/asset/1")) + +(deftest test-without-context + (are (not (run-with-context _1 _2 "/context")) + "/" "/" + "/home" "/home" + "/asset/1" "/asset/1")) + +(defn run-mimetypes + [uri type options] + (let [routes (routes (GET uri "foo")) + request {:request-method :get + :uri uri} + response ((with-mimetypes routes options) request) + result (get (:headers response) "Content-Type")] + (= type result))) + +(deftest test-with-default-mimetypes + (are (run-mimetypes _1 _2 {}) + "/" "text/html" + "/foobar" "text/html" + "/file.pdf" "application/pdf" + "/files/bar.css" "text/css")) + +(deftest test-with-custom-mimetypes + (let [options {:mimetypes {"foo" "test/foo" + "bar" "test/bar"} + :default "test/default"}] + (are (run-mimetypes _1 _2 options) + "/" "test/default" + "/foobar" "test/default" + "/file.pdf" "test/default" + "/file.foo" "test/foo" + "/files/file.bar" "test/bar")))
\ No newline at end of file diff --git a/compojure-3.2/test/compojure/http/request_test.clj b/compojure-3.2/test/compojure/http/request_test.clj new file mode 100755 index 0000000..5b19dc3 --- /dev/null +++ b/compojure-3.2/test/compojure/http/request_test.clj @@ -0,0 +1,51 @@ +(ns compojure.http.request-test + (:use compojure.http.request + clojure.contrib.test-is + test.helpers)) + +(deftest query-params + (are (= (parse-query-params {:query-string _1}) _2) + "a=1" {:a "1"} + "a=1&b=2" {:a "1", :b "2"})) + +(deftest query-params-plus + (is (= (parse-query-params {:query-string "a=1+2"}) + {:a "1 2"}))) + +(deftest query-params-space + (is (= (parse-query-params {:query-string "a=1%202"}) + {:a "1 2"}))) + +(deftest query-params-invalid + (are (= (parse-query-params {:query-string _1}) _2) + "" {} + "=" {} + "=1" {} + "a=1&=" {:a "1"})) + +(deftest urlencoded-charset + (is (urlencoded-form? + {:content-type "application/x-www-form-urlencoded; charset=UTF8"}))) + +(deftest form-params + (are (= (parse-form-params (form-request _1)) _2) + "a=1" {:a "1"} + "a=1&b=2" {:a "1", :b "2"})) + +(deftest assoc-params-empty + (is (= (assoc-params {}) + {:form-params {}, :query-params {}, :params {}}))) + +(deftest assoc-params-merge + (let [request {:form-params {:a "1"}, :query-params {:b "2"}}] + (is (= (assoc-params request) + (assoc request :params {:a "1", :b "2"}))))) + +(deftest assoc-params-twice + (let [request (form-request "a=1")] + (is (= (:form-params (-> request assoc-params assoc-params)) + {:a "1"})))) + +(deftest request-cookies + (is (= (parse-cookies {:headers {"cookie" "a=1;b=2"}}) + {:a "1", :b "2"}))) diff --git a/compojure-3.2/test/compojure/http/response_test.clj b/compojure-3.2/test/compojure/http/response_test.clj new file mode 100755 index 0000000..45a0d01 --- /dev/null +++ b/compojure-3.2/test/compojure/http/response_test.clj @@ -0,0 +1,46 @@ +(ns compojure.http.response-test + (:use compojure.http.response + clojure.contrib.test-is)) + +(deftest nil-response + (is (= (create-response {} nil) + {:status 200, :headers {}}))) + +(deftest int-response + (is (= (:status (create-response {} 404)) + 404))) + +(deftest next-response + (is (nil? (create-response {} :next)))) + +(deftest string-response + (is (= (:body (create-response {} "Lorem Ipsum")) + "Lorem Ipsum"))) + +(deftest seq-response + (is (= (:body (create-response {} (list "a" "b" "c"))) + (list "a" "b" "c")))) + +(deftest map-response + (let [response {:status 200 + :headers {"Content-Type" "text/plain"} + :body "Lorem Ipsum"}] + (is (= (create-response {} response) response)))) + +(deftest vector-string-response + (is (= (:body (create-response {} ["Foo" "Bar" "Baz"])) + "FooBarBaz"))) + +(deftest vector-int-response + (is (= (:status (create-response {} [200 500 403])) + 403))) + +(deftest default-content-type + (let [response {:headers {"Foo" "Bar"}}] + (is (= (:headers (update-response {} response "Foo")) + {"Foo" "Bar" "Content-Type" "text/html"})))) + +(deftest supplied-content-type + (let [response {:headers {"Content-Type" "text/plain" "Foo" "Bar"}}] + (is (= (:headers (update-response {} response "Foo")) + {"Content-Type" "text/plain" "Foo" "Bar"})))) diff --git a/compojure-3.2/test/compojure/http/routes_test.clj b/compojure-3.2/test/compojure/http/routes_test.clj new file mode 100755 index 0000000..7d9b936 --- /dev/null +++ b/compojure-3.2/test/compojure/http/routes_test.clj @@ -0,0 +1,168 @@ +(ns compojure.http.routes-test + (:use compojure.http.routes + clojure.contrib.test-is + test.helpers)) + +(deftest fixed-path + (are (match-uri (compile-uri-matcher _1) _1) + "/" + "/foo" + "/foo/bar" + "/foo/bar.html")) + +(deftest nil-paths + (is (match-uri (compile-uri-matcher "/") nil))) + +(deftest keyword-paths + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/:x" "/foo" {:x "foo"} + "/foo/:x" "/foo/bar" {:x "bar"} + "/a/b/:c" "/a/b/c" {:c "c"} + "/:a/b/:c" "/a/b/c" {:a "a", :c "c"})) + +(deftest keywords-match-extensions + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/foo.:ext" "/foo.txt" {:ext "txt"} + "/:x.:y" "/foo.txt" {:x "foo", :y "txt"})) + +(deftest hyphen-keywords + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/:foo-bar" "/baz" {:foo-bar "baz"} + "/:foo-" "/baz" {:foo- "baz"})) + +(deftest urlencoded-keywords + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/:x" "/foo%20bar" {:x "foo bar"} + "/:x" "/foo+bar" {:x "foo bar"})) + +(deftest same-keyword-many-times + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/:x/:x/:x" "/a/b/c" {:x ["a" "b" "c"]} + "/:x/b/:x" "/a/b/c" {:x ["a" "c"]})) + +(deftest wildcard-paths + (are (= (match-uri (compile-uri-matcher _1) _2) _3) + "/*" "/foo" {:* "foo"} + "/*" "/foo.txt" {:* "foo.txt"} + "/*" "/foo/bar" {:* "foo/bar"} + "/foo/*" "/foo/bar/baz" {:* "bar/baz"} + "/a/*/d" "/a/b/c/d" {:* "b/c"})) + +(deftest url-paths + (is (match-uri (compile-uri-matcher "http://localhost") + "http://localhost"))) + +(deftest url-port-paths + (let [matcher (compile-uri-matcher "localhost:8080")] + (is (match-uri matcher "localhost:8080")) + (is (not (match-uri matcher "localhost:7070"))))) + +(deftest unmatched-paths + (is (nil? (match-uri (compile-uri-matcher "/foo") "/bar")))) + +(deftest regex-paths + (is (match-uri #"/[A-Z][a-z]" "/Ab")) + (is (not (match-uri #"/[A-Z][a-z]" "/ab")))) + +(deftest regex-path-params + (are (= (match-uri _1 _2) _3) + #"/foo/(\w+)" "/foo/bar" ["bar"] + #"/(\w+)/(\d+)" "/foo/10" ["foo" "10"])) + +(deftest assoc-route-map + (is (= (assoc-route-params {:params {}} {"foo" "bar"}) + {:route-params {"foo" "bar"}, :params {"foo" "bar"}}))) + +(deftest assoc-route-vector + (is (= (assoc-route-params {:params {}} ["foo" "bar"]) + {:route-params ["foo" "bar"], :params {}}))) + +(deftest route-response + (let [route (GET "/" "Lorem Ipsum") + request {:request-method :get, :uri "/"} + response (route request)] + (is (= response {:status 200, + :headers {"Content-Type" "text/html"}, + :body "Lorem Ipsum"})))) + +(defn- route-body + [route method uri] + (:body (route {:request-method method, :uri uri}))) + +(deftest route-methods + (are (= (route-body _1 _2 "/") _3) + (GET "/" "a") :get "a" + (POST "/" "b") :post "b" + (PUT "/" "c") :put "c" + (HEAD "/" "d") :head "d" + (DELETE "/" "e") :delete "e")) + +(deftest route-any + (are (= (route-body (ANY "/" _2) _1 "/") _2) + :get "a" + :post "b" + :put "c" + :delete "d")) + +(deftest route-var-paths + (let [path "/foo/bar"] + (is (= (route-body (GET path "pass") :get path) + "pass")))) + +(deftest route-not-match + (let [route (GET "/" "Lorem Ipsum") + request {:request-method :get, :uri "/foo"}] + (is (nil? (route request))))) + +(deftest route-match-form-method + (let [routes (routes (DELETE "/foo" "body")) + request {:request-method :post + :uri "/foo" + :content-type "application/x-www-form-urlencoded" + :body (input-stream "_method=DELETE&a=1")}] + (is (= (:status (routes request)) + 200)))) + +(deftest route-not-match-form-method + (let [routes (routes (DELETE "/foo" "body")) + request {:request-method :post + :uri "/foo" + :content-type "application/x-www-form-urlencoded" + :body (input-stream "a=1")}] + (is (nil? (routes request))))) + +(deftest route-match-form-method-not-post + (let [routes (routes (POST "/foo" "post") (DELETE "/foo" "delete")) + request {:request-method :post + :uri "/foo" + :content-type "application/x-www-form-urlencoded", + :body (input-stream "_method=DELETE&a=1")}] + (is (= (:body (routes request)) + "delete")))) + +(deftest route-keywords + (let [route (GET "/:foo" + (is (= (:route-params request) {:foo "bar"})) + "")] + (route {:request-method :get, :uri "/bar"}))) + +(deftest combine-routes + (let [r1 (fn [req] (if (= (:uri req) "/") {:body "x"})) + r2 (fn [req] {:body "y"}) + rs (routes r1 r2)] + (is (rs {:uri "/"}) "x") + (is (rs {:uri "/foo"}) "y"))) + +(deftest route-params + (let [site (routes + (GET "/:route" + (is (= (params :route) "yes")) + (is (= (params :query) "yes")) + (is (= (params :form) "yes")) + (is (request :params) params) + :next))] + (site (merge + {:request-method :get + :uri "/yes" + :query-string "query=yes"} + (form-request "form=yes"))))) diff --git a/compojure-3.2/test/compojure/http/session_test.clj b/compojure-3.2/test/compojure/http/session_test.clj new file mode 100755 index 0000000..0e30793 --- /dev/null +++ b/compojure-3.2/test/compojure/http/session_test.clj @@ -0,0 +1,73 @@ +(ns compojure.http.session-test + (:use compojure.crypto + compojure.encodings + compojure.http.session + clojure.contrib.test-is) + (:import javax.crypto.spec.IvParameterSpec + javax.crypto.spec.SecretKeySpec)) + +;; Memory sessions + +(deftest create-memory-session + (is (= (keys (create-session {:type :memory})) + [:id]))) + +(deftest memory-session-cookie + (let [repo {:type :memory} + session (create-session repo)] + (is (= (session-cookie repo true session) (session :id))) + (is (nil? (session-cookie repo false session))))) + +(deftest read-memory-session + (binding [memory-sessions (ref {::mock-id ::mock-session})] + (is (= (read-session {:type :memory} ::mock-id) + ::mock-session)))) + +(deftest write-memory-session + (binding [memory-sessions (ref {})] + (let [session (create-session {:type :memory})] + (write-session {:type :memory} session) + (is (= (memory-sessions (session :id)) + session))))) + +(deftest destroy-memory-sessions + (let [mock-session {:id ::mock-id}] + (binding [memory-sessions (ref {::mock-id mock-session})] + (destroy-session {:type :memory} mock-session) + (is (not (contains? @memory-sessions ::mock-id)))))) + +;; Cookie sessions + +(deftest create-cookie-session + (is (= (create-session {:type :cookie}) {}))) + +;; Associating session with request + +(defmethod create-session ::mock [repository] + {:id :new}) + +(defmethod read-session ::mock [repository id] + {:id :current}) + +(deftest assoc-nil-session + (let [request (assoc-session {} {:type ::mock})] + (is (:new-session? request)) + (is (= (:session request) {:id :new})))) + +(deftest assoc-expired-session + (let [session {:expires-at (timestamp-after 0)} + request (assoc-session {:session session} {:type ::mock})] + (is (:new-session? request)) + (is (= (:session request) {:id :new})))) + +(deftest assoc-existing-session + (let [cookies {:compojure-session "current"} + request (assoc-session {:cookies cookies} {:type ::mock})] + (is (not (:new-session? request))) + (is (= (:session request) {:id :current})))) + +(deftest assoc-flash-data + (let [session {:flash {:message "test"}} + request (assoc-flash {:session session})] + (is (not (contains? (request :session) :flash))) + (is (= (request :flash) {:message "test"})))) |
