summaryrefslogtreecommitdiff
path: root/test/reverse_routing/core_test.clj
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"))))))