From bee2dc3de2b91a5517ea966d2c431731e3ba3709 Mon Sep 17 00:00:00 2001 From: Daniel F Date: Tue, 11 Jul 2023 22:52:14 +0100 Subject: [PATCH] Added API controllers tests --- go/api/controllers/controllers_test.go | 44 ++++++++++++++ go/api/controllers/item_controller_test.go | 60 ++++++++----------- go/api/controllers/swagger_controller_test.go | 21 +++++++ 3 files changed, 91 insertions(+), 34 deletions(-) create mode 100644 go/api/controllers/controllers_test.go create mode 100644 go/api/controllers/swagger_controller_test.go diff --git a/go/api/controllers/controllers_test.go b/go/api/controllers/controllers_test.go new file mode 100644 index 00000000..7b92dd08 --- /dev/null +++ b/go/api/controllers/controllers_test.go @@ -0,0 +1,44 @@ +package controllers + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "go.uber.org/fx" + "go.uber.org/fx/fxtest" + + "github.com/emilybache/gildedrose-refactoring-kata/lib" + "github.com/emilybache/gildedrose-refactoring-kata/services" + "github.com/emilybache/gildedrose-refactoring-kata/api/middlewares" +) + +var TestCommonModules = fx.Options( + Module, + lib.Module, + services.Module, + middlewares.Module, +) + +type TestCaseRunner interface{} + +func setupTestCase(handler lib.RequestHandler, logger lib.Logger, itemController ItemController, swaggerController SwaggerController) { + logger.Info("Setup test case") + swaggerController.Setup(handler.Gin) + itemController.Setup(handler.Gin) +} + +func runTestCase(t *testing.T, runner TestCaseRunner) { + app := fxtest.New(t, TestCommonModules, fx.Invoke(setupTestCase), fx.Invoke(runner)) + + defer app.RequireStart().RequireStop() + require.NoError(t, app.Err()) +} + +func executeRequest(handler lib.RequestHandler, req *http.Request) *httptest.ResponseRecorder { + result := httptest.NewRecorder() + handler.Gin.ServeHTTP(result, req) + return result +} diff --git a/go/api/controllers/item_controller_test.go b/go/api/controllers/item_controller_test.go index 358b797d..2bf6e902 100644 --- a/go/api/controllers/item_controller_test.go +++ b/go/api/controllers/item_controller_test.go @@ -2,47 +2,14 @@ package controllers import ( "net/http" - "net/http/httptest" "testing" + "strings" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "go.uber.org/fx" - "go.uber.org/fx/fxtest" "github.com/emilybache/gildedrose-refactoring-kata/lib" - "github.com/emilybache/gildedrose-refactoring-kata/services" - "github.com/emilybache/gildedrose-refactoring-kata/api/middlewares" ) -var TestCommonModules = fx.Options( - Module, - lib.Module, - services.Module, - middlewares.Module, -) - -type TestCaseRunner interface{} - -func setupTestCase(handler lib.RequestHandler, logger lib.Logger, itemController ItemController) { - logger.Info("Setup test case") - itemController.Setup(handler.Gin) -} - -func runTestCase(t *testing.T, runner TestCaseRunner) { - app := fxtest.New(t, TestCommonModules, fx.Invoke(setupTestCase), fx.Invoke(runner)) - - defer app.RequireStart().RequireStop() - require.NoError(t, app.Err()) -} - -func executeRequest(handler lib.RequestHandler, req *http.Request) *httptest.ResponseRecorder { - result := httptest.NewRecorder() - handler.Gin.ServeHTTP(result, req) - return result -} - func TestStatus(t *testing.T) { runTestCase(t, func( handler lib.RequestHandler, @@ -54,3 +21,28 @@ func TestStatus(t *testing.T) { assert.Equal(t, `{"status":"ok"}`, w.Body.String()) }) } + +func TestNotFound(t *testing.T) { + runTestCase(t, func( + handler lib.RequestHandler, + ) { + req, _ := http.NewRequest("GET", "/notfoundurl", nil) + + w := executeRequest(handler, req) + assert.Equal(t, 404, w.Code) + }) +} + +func TestInvalidItem(t *testing.T) { + runTestCase(t, func( + handler lib.RequestHandler, + ) { + req, _ := http.NewRequest("POST", "/update_quality", strings.NewReader(` + { "id": 1, "people": invalid + `)) + req.Header = map[string][]string{"Content-Type": {"application/json"}} + + w := executeRequest(handler, req) + assert.Equal(t, 400, w.Code) + }) +} diff --git a/go/api/controllers/swagger_controller_test.go b/go/api/controllers/swagger_controller_test.go new file mode 100644 index 00000000..455ff876 --- /dev/null +++ b/go/api/controllers/swagger_controller_test.go @@ -0,0 +1,21 @@ +package controllers + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/emilybache/gildedrose-refactoring-kata/lib" +) + +func TestSwagger(t *testing.T) { + runTestCase(t, func( + handler lib.RequestHandler, + ) { + req, _ := http.NewRequest("GET", "/swagger/index.html", nil) + + w := executeRequest(handler, req) + assert.Equal(t, 404, w.Code) + }) +}