blob: 8752de91c7dbf385da4189a5953616e26bfe4aa8 (
about) (
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
|
(ns reverse-routing.core-test
(:use clojure.test
reverse-routing.core
[compojure.core :only [GET]]))
(defn make-request [handler uri]
;; Technically most of this map is required by the ring spec
;; I'm fairly sure we could get away with not having most of it
(-> {:request-method :get
:scheme :http
:uri uri
:remote-addr "127.0.0.1"
:server-port 8080
:server-name "something"}
handler
:body))
(deftest test-basic-route
(let [handler (-> (routes
(register-route :user
(GET "/user/:id" [id] (str "user " id)))
(GET "/succeed" [] (url-for :user 10))
(GET "/fail1" [] (url-for :user))
(GET "/fail2" [] (url-for :user 10 20)))
wrap-reverse-routing)]
(is (= (make-request handler "/succeed") "/user/10"))
(is (thrown? java.lang.AssertionError (make-request handler "/fail1")))
(is (thrown? java.lang.AssertionError (make-request handler "/fail2")))))
(deftest test-context-routes
(let [handler (-> (routes
(register-route :user
(GET "/user/" [id] (str "user list")))
(context "/user/:id" []
(register-route :user
(GET "/" [id] (str "user " id)))
(register-route :edit-user
(GET "/edit" [id] (str "edit user " id))))
(GET "/succeed1" [] (url-for :user))
(GET "/succeed2" [] (url-for :user 10))
(GET "/succeed3" [] (url-for :edit-user 10))
(GET "/fail1" [] (url-for :user 10 20))
(GET "/fail2" [] (url-for :edit-user))
(GET "/fail3" [] (url-for :edit-user 10 20)))
wrap-reverse-routing)]
(is (= (make-request handler "/succeed1") "/user/"))
(is (= (make-request handler "/succeed2") "/user/10/"))
(is (= (make-request handler "/succeed3") "/user/10/edit"))
(is (thrown? java.lang.AssertionError (make-request handler "/fail1")))
(is (thrown? java.lang.AssertionError (make-request handler "/fail2")))
(is (thrown? java.lang.AssertionError (make-request handler "/fail3")))))
(deftest test-context-in-context-routes
(let [handler (-> (routes
(context "/user" []
(register-route :user
(GET "/" [id] (str "user list")))
(context "/:id" [id]
(register-route :user
(GET "/" [] (str "user " id)))
(register-route :edit-user
(GET "/edit" [] (str "edit user " id)))))
(GET "/succeed1" [] (url-for :user))
(GET "/succeed2" [] (url-for :user 10))
(GET "/succeed3" [] (url-for :edit-user 10))
(GET "/fail1" [] (url-for :user 10 20))
(GET "/fail2" [] (url-for :edit-user))
(GET "/fail3" [] (url-for :edit-user 10 20)))
wrap-reverse-routing)]
(is (= (make-request handler "/succeed1") "/user/"))
(is (= (make-request handler "/succeed2") "/user/10/"))
(is (= (make-request handler "/succeed3") "/user/10/edit"))
(is (thrown? java.lang.AssertionError (make-request handler "/fail1")))
(is (thrown? java.lang.AssertionError (make-request handler "/fail2")))
(is (thrown? java.lang.AssertionError (make-request handler "/fail3")))))
(def ^:dynamic *subroutes* (register-route :user
(GET "/user" [] (str "user"))))
(deftest test-with-rebinding-vars
(let [handler (-> (routes
#'*subroutes*
(GET "/succeed" [] (url-for :user))
(GET "/fail" [] (url-for :user 10)))
wrap-reverse-routing)]
(is (= (make-request handler "/succeed") "/user"))
(is (thrown? java.lang.AssertionError (make-request handler "/fail")))
(binding [*subroutes* (register-route :user
(GET "/not-user" [] (str "user")))]
(is (= (make-request handler "/succeed") "/not-user"))
(is (thrown? java.lang.AssertionError (make-request handler "/fail"))))))
|