From 6a05b31320962f3112b4a5739b2ac6396bce3dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Abdelkader=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 22 Oct 2019 09:48:58 +0200 Subject: [PATCH] Implement configRouter Co-authored-by: Hector Hurtado --- internal/server/data/server.go | 23 ++++++++++++++++ internal/server/data/server_test.go | 42 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/internal/server/data/server.go b/internal/server/data/server.go index 0ad59c2..60ccf07 100644 --- a/internal/server/data/server.go +++ b/internal/server/data/server.go @@ -1 +1,24 @@ package data + +import ( + "net/http" + + "github.com/gorilla/mux" +) + +type routeSpec struct { + route string + method string + rh resourceHandler +} + +func configRouter(rs []routeSpec) (r *mux.Router) { + r = mux.NewRouter() + for _, s := range rs { + r.HandleFunc(s.route, checkHandler(s.rh)).Methods(s.method) + } + r.HandleFunc( + "/handlers/{handlerID}/{resource:.*}", + func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) }) + return r +} diff --git a/internal/server/data/server_test.go b/internal/server/data/server_test.go index 0ad59c2..c61a2ed 100644 --- a/internal/server/data/server_test.go +++ b/internal/server/data/server_test.go @@ -1 +1,43 @@ package data + +import ( + "net/http" + "net/http/httptest" + "testing" + + // "github.com/gorilla/mux" + + "github.com/BBVA/kapow/internal/server/model" +) + +func TestConfigRouterReturnsRouterWithDecoratedRoutes(t *testing.T) { + var handlerID string + list := []routeSpec{ + { + "/handlers/{handlerID}/dummy", + "GET", + func(w http.ResponseWriter, r *http.Request, h *model.Handler) { handlerID = h.ID }, + }, + } + Handlers = New() + Handlers.Add(&model.Handler{ID: "FOO"}) + m := configRouter(list) + + m.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "/handlers/FOO/dummy", nil)) + + if handlerID != "FOO" { + t.Errorf(`Handler ID mismatch. Expected "FOO". Got %q`, handlerID) + } +} + +func TestConfigRouterReturnsRouterThat400sOnUnconfiguredResources(t *testing.T) { + m := configRouter([]routeSpec{}) + w := httptest.NewRecorder() + + m.ServeHTTP(w, httptest.NewRequest("GET", "/handlers/FOO/dummy", nil)) + + res := w.Result() + if res.StatusCode != http.StatusBadRequest { + t.Errorf("Status code mismatch. Expected 400. Got %d", res.StatusCode) + } +}