From 970a16ec624cf0255680596492f8ef288366c45a Mon Sep 17 00:00:00 2001 From: Pedro Nasser Date: Sat, 30 Jul 2016 18:17:10 -0300 Subject: [PATCH] added route testes --- api/server/router/routes_test.go | 178 ++++++++++++++++++++++++++++++- 1 file changed, 177 insertions(+), 1 deletion(-) diff --git a/api/server/router/routes_test.go b/api/server/router/routes_test.go index 461fcf442..7d5e6d091 100644 --- a/api/server/router/routes_test.go +++ b/api/server/router/routes_test.go @@ -1 +1,177 @@ -package router \ No newline at end of file +package router + +import ( + "bytes" + "net/http" + "strings" + "testing" + + "github.com/iron-io/functions/api/models" +) + +func TestRouteCreate(t *testing.T) { + router := testRouter() + + for i, test := range []struct { + path string + body string + expectedCode int + expectedError error + }{ + // errors + {"/v1/apps/a/routes", ``, http.StatusBadRequest, models.ErrInvalidJSON}, + {"/v1/apps/a/routes", `{ }`, http.StatusBadRequest, models.ErrRoutesMissingNew}, + {"/v1/apps/a/routes", `{ "name": "Test" }`, http.StatusBadRequest, models.ErrRoutesMissingNew}, + {"/v1/apps/a/routes", `{ "route": { "name": "" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingName}, + {"/v1/apps/a/routes", `{ "route": { "name": "myroute" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingImage}, + {"/v1/apps/a/routes", `{ "route": { "name": "myroute", "image": "iron/hello" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingPath}, + {"/v1/apps/a/routes", `{ "route": { "name": "myroute", "image": "iron/hello", "path": "myroute" } }`, http.StatusInternalServerError, models.ErrRoutesValidationInvalidPath}, + {"/v1/apps/$/routes", `{ "route": { "name": "myroute", "image": "iron/hello", "path": "/myroute" } }`, http.StatusInternalServerError, models.ErrAppsValidationInvalidName}, + + // success + {"/v1/apps/a/routes", `{ "route": { "name": "myroute", "image": "iron/hello", "path": "/myroute" } }`, http.StatusOK, nil}, + } { + body := bytes.NewBuffer([]byte(test.body)) + _, rec := routerRequest(t, router, "POST", test.path, body) + + if rec.Code != test.expectedCode { + t.Errorf("Test %d: Expected status code to be %d but was %d", + i, test.expectedCode, rec.Code) + } + + if test.expectedError != nil { + resp := getErrorResponse(t, rec) + + if !strings.Contains(resp.Error.Message, test.expectedError.Error()) { + t.Errorf("Test %d: Expected error message to have `%s`", + i, test.expectedError.Error()) + } + } + } +} + +func TestRouteDelete(t *testing.T) { + router := testRouter() + + for i, test := range []struct { + path string + body string + expectedCode int + expectedError error + }{ + {"/v1/apps/a/routes", "", http.StatusNotFound, nil}, + {"/v1/apps/a/routes/myroute", "", http.StatusOK, nil}, + } { + _, rec := routerRequest(t, router, "DELETE", test.path, nil) + + if rec.Code != test.expectedCode { + t.Errorf("Test %d: Expected status code to be %d but was %d", + i, test.expectedCode, rec.Code) + } + + if test.expectedError != nil { + resp := getErrorResponse(t, rec) + + if !strings.Contains(resp.Error.Message, test.expectedError.Error()) { + t.Errorf("Test %d: Expected error message to have `%s`", + i, test.expectedError.Error()) + } + } + } +} + +func TestRouteList(t *testing.T) { + router := testRouter() + + for i, test := range []struct { + path string + body string + expectedCode int + expectedError error + }{ + {"/v1/apps/a/routes", "", http.StatusOK, nil}, + } { + _, rec := routerRequest(t, router, "GET", test.path, nil) + + if rec.Code != test.expectedCode { + t.Errorf("Test %d: Expected status code to be %d but was %d", + i, test.expectedCode, rec.Code) + } + + if test.expectedError != nil { + resp := getErrorResponse(t, rec) + + if !strings.Contains(resp.Error.Message, test.expectedError.Error()) { + t.Errorf("Test %d: Expected error message to have `%s`", + i, test.expectedError.Error()) + } + } + } +} + +func TestRouteGet(t *testing.T) { + router := testRouter() + + for i, test := range []struct { + path string + body string + expectedCode int + expectedError error + }{ + {"/v1/apps/a/routes/myroute", "", http.StatusNotFound, nil}, + } { + _, rec := routerRequest(t, router, "GET", test.path, nil) + + if rec.Code != test.expectedCode { + t.Errorf("Test %d: Expected status code to be %d but was %d", + i, test.expectedCode, rec.Code) + } + + if test.expectedError != nil { + resp := getErrorResponse(t, rec) + + if !strings.Contains(resp.Error.Message, test.expectedError.Error()) { + t.Errorf("Test %d: Expected error message to have `%s`", + i, test.expectedError.Error()) + } + } + } +} + +func TestRouteUpdate(t *testing.T) { + router := testRouter() + + for i, test := range []struct { + path string + body string + expectedCode int + expectedError error + }{ + // errors + {"/v1/apps/a/routes/myroute", ``, http.StatusBadRequest, models.ErrInvalidJSON}, + {"/v1/apps/a/routes/myroute", `{}`, http.StatusBadRequest, models.ErrRoutesMissingNew}, + {"/v1/apps/a/routes/myroute", `{ "route": {} }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingImage}, + {"/v1/apps/a/routes/myroute", `{ "route": { "image": "iron/hello" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingPath}, + {"/v1/apps/a/routes/myroute", `{ "route": { "image": "iron/hello", "path": "myroute" } }`, http.StatusInternalServerError, models.ErrRoutesValidationInvalidPath}, + + // success + {"/v1/apps/a/routes/myroute", `{ "route": { "image": "iron/hello", "path": "/myroute" } }`, http.StatusOK, nil}, + } { + body := bytes.NewBuffer([]byte(test.body)) + _, rec := routerRequest(t, router, "PUT", test.path, body) + + if rec.Code != test.expectedCode { + t.Errorf("Test %d: Expected status code to be %d but was %d", + i, test.expectedCode, rec.Code) + } + + if test.expectedError != nil { + resp := getErrorResponse(t, rec) + + if !strings.Contains(resp.Error.Message, test.expectedError.Error()) { + t.Errorf("Test %d: Expected error message to have `%s`", + i, test.expectedError.Error()) + } + } + } +}