/
middleware_test.clj
115 lines (98 loc) · 3.61 KB
/
middleware_test.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
(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"
"/files/js/jquery.fancybox-1.3.0.js" "text/javascript"))
(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")))