/ip-service/test/ip_service/test/handler.clj

https://github.com/killme2008/ip-service · Clojure · 42 lines · 38 code · 4 blank · 0 comment · 11 complexity · d1de8756ea633deaf30617c3f1700d9a MD5 · raw file

  1. (ns ip-service.test.handler
  2. (:require [clojure.test :refer :all]
  3. [ip-service.handler :refer :all]
  4. [clojure.data.json :as json]
  5. [ring.mock.request :as mock]))
  6. (defn json-request
  7. "Mock json request."
  8. [method uri & params]
  9. (-> (apply mock/request method uri params)
  10. (update-in [:headers]
  11. #(merge % {"Content-Type" "application/json"}))
  12. (assoc :content-type "application/json")))
  13. (deftest test-app
  14. (testing "main route"
  15. (let [response (app (mock/request :get "/"))]
  16. (is (= (:status response) 200))
  17. (is (re-find #"<h2>IP Service</h2>" (:body response))))
  18. (let [response (app (mock/request :get "/?ip=127.0.0.1"))]
  19. (is (= (:status response) 200))
  20. (is (re-find #"127.0.0.1 &nbsp;&nbsp;&nbsp; 本机地址 本机地址" (:body response))))
  21. (let [response (app (mock/request :get "/?ip=180.117.51.245"))]
  22. (is (= (:status response) 200))
  23. (is (re-find #"180.117.51.245 &nbsp;&nbsp;&nbsp; 中国 江苏 苏州 " (:body response))))
  24. (let [response (app (mock/request :get "/?ip=localhost"))]
  25. (is (= (:status response) 400))
  26. (is (re-find #"Illegal address,only supports IPv4." (:body response)))))
  27. (testing "REST API"
  28. (let [response (app (json-request :get "/1/ip?ip=180.117.51.245"))]
  29. (is (= (:status response) 200))
  30. (is (= "application/json;charset=utf-8" (get-in response [:headers "Content-Type"])))
  31. (is (= {:ip "180.117.51.245" :result "中国\t江苏\t苏州\t"} (json/read-str (:body response) :key-fn keyword))))
  32. (let [response (app (json-request :get "/1/ip?ip=0:0:0:0:0:0"))]
  33. (is (= (:status response) 400))
  34. (is (= "application/json;charset=utf-8" (get-in response [:headers "Content-Type"])))
  35. (is (= {:error "Illegal address,only supports IPv4."} (json/read-str (:body response) :key-fn keyword)))))
  36. (testing "not-found route"
  37. (let [response (app (mock/request :get "/invalid"))]
  38. (is (= (:status response) 404)))))