From 07b65ca325a7e37a83dc5f7b1b87bf8fc4dbd180 Mon Sep 17 00:00:00 2001 From: Frederik Andersen Date: Wed, 8 Oct 2014 16:00:44 +0200 Subject: [PATCH 1/3] test cases for handler --- test/robotwar/handler_test.clj | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/robotwar/handler_test.clj diff --git a/test/robotwar/handler_test.clj b/test/robotwar/handler_test.clj new file mode 100644 index 0000000..3db0647 --- /dev/null +++ b/test/robotwar/handler_test.clj @@ -0,0 +1,33 @@ +(ns robotwar.handler-test + (:require [clojure.test :refer :all] + [robotwar.handler :refer :all] + [ring.mock.request :as mock])) + + +(deftest app-handler-test + (testing "program-names" + (let [response (app (mock/request :get "/program-names"))] + (is (= (:status response) 200)) + (is (.contains (:body response) "mover")))) + + (testing "not-found route" + (let [response (app (mock/request :get "/invalid"))] + (is (= (:status response) 404)))) + + (testing "files" + (let [response (app (mock/request :get "/index.html"))] + (is (= (:status response) 200)) + (is (.contains (slurp (:body response)) "Welcome to the future"))) + (let [response (app (mock/request :get "/js/main.js"))] + (is (= (:status response) 200)) + (is (.contains (slurp (:body response)) "function")))) + + (testing "worlds route" + (let [response (app (mock/request :get "/worlds/0/99"))] + (is (= (:status response) 200)) + (is (.contains (:body response) "[")))) + + (testing "init route" + (let [response (app (mock/request :get "/init?programs=mover"))] + (is (= (:status response) 200)) + (is (.contains (:body response) "game-info"))))) \ No newline at end of file From 595d5cde66c2867072811553c24b2f6cc4183361 Mon Sep 17 00:00:00 2001 From: Frederik Andersen Date: Wed, 8 Oct 2014 18:48:49 +0200 Subject: [PATCH 2/3] removed Compojure as a dependency, routing code changed --- project.clj | 2 +- src/robotwar/handler.clj | 54 ++++++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/project.clj b/project.clj index 50c29b8..12b7344 100644 --- a/project.clj +++ b/project.clj @@ -7,7 +7,7 @@ [org.clojure/core.match "0.2.0-rc5"] [clj-time "0.5.1"] [ring/ring-json "0.2.0"] - [compojure "1.1.5"]] + [ring/ring-core "1.3.1"]] :plugins [[lein-ring "0.8.5"]] :ring {:handler robotwar.handler/app} :profiles {:dev {:dependencies [[midje "1.5.1"] diff --git a/src/robotwar/handler.clj b/src/robotwar/handler.clj index ca7e7ab..2d9635d 100644 --- a/src/robotwar/handler.clj +++ b/src/robotwar/handler.clj @@ -1,11 +1,10 @@ (ns robotwar.handler - (:use [compojure.core] - [clojure.string :only [split]] + (:use [clojure.string :only [split]] [robotwar.constants]) - (:require [compojure.handler :as handler] - [ring.middleware.json :as middleware] - [ring.util.response :as response] - [compojure.route :as route] + (:require [ring.middleware.json :refer [wrap-json-response wrap-json-body]] + [ring.middleware.file :refer [wrap-file]] + [ring.middleware.params :refer [wrap-params]] + [ring.util.response :refer [response not-found]] [robotwar.source-programs :as source-programs] [robotwar.world :as world] [robotwar.browser :as browser])) @@ -54,21 +53,32 @@ (def games-store (atom {:next-id 0 :games {}})) -(defroutes app-routes - (GET "/program-names" [] (response/response - {:names (map name (keys source-programs/programs))})) - (GET "/init" [programs] (let [next-id (:next-id @games-store)] - (swap! games-store add-game programs) - (response/response {:id next-id - :game-info game-info}))) - (GET "/worlds/:id/:n" [id n] (response/response (take-drop-send - games-store - (Integer/parseInt id) - (Integer/parseInt n)))) - (route/files "/") - (route/not-found "Not Found")) + +(defn handler [request] + + (let [match (re-matches #"\/worlds\/(\d+)\/(\d+)" (request :uri))] + (if match + (let [[_ id n] match] + (response (take-drop-send + games-store + (Integer/parseInt id) + (Integer/parseInt n)))) + + (case (request :uri) + "/program-names" (response + {:names (map name (keys source-programs/programs))}) + + "/init" (let [programs ((request :query-params) "programs") + next-id (:next-id @games-store)] + (swap! games-store add-game programs) + (response {:id next-id + :game-info game-info})) + + (not-found "Not Found"))))) (def app - (-> (handler/site app-routes) - (middleware/wrap-json-response) - (middleware/wrap-json-body))) + (-> handler + (wrap-file "public") + (wrap-json-response) + (wrap-json-body) + (wrap-params))) \ No newline at end of file From 4632376fed9cb82c1556f8f92d4e5f2ead3e2d56 Mon Sep 17 00:00:00 2001 From: Frederik Andersen Date: Wed, 8 Oct 2014 18:51:08 +0200 Subject: [PATCH 3/3] update ring-json to latest version --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index 12b7344..e1790c1 100644 --- a/project.clj +++ b/project.clj @@ -6,7 +6,7 @@ :dependencies [[org.clojure/clojure "1.5.1"] [org.clojure/core.match "0.2.0-rc5"] [clj-time "0.5.1"] - [ring/ring-json "0.2.0"] + [ring/ring-json "0.3.1"] [ring/ring-core "1.3.1"]] :plugins [[lein-ring "0.8.5"]] :ring {:handler robotwar.handler/app}