Added API controllers tests

This commit is contained in:
Daniel F 2023-07-11 22:52:14 +01:00
parent 354c068f33
commit bee2dc3de2
3 changed files with 91 additions and 34 deletions

View File

@ -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
}

View File

@ -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)
})
}

View File

@ -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)
})
}