summaryrefslogtreecommitdiff
path: root/compojure-3.2/test/compojure/http/middleware_test.clj
blob: a3ddc8a47bb7d6aa8b20937821ea3ec3e4443677 (plain)
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
(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")))