GildedRose-Refactoring-Kata/go/api/controllers/item_controller_test.go
2023-07-11 20:36:37 +01:00

58 lines
1.4 KiB
Go

package controllers
import (
"net/http"
"net/http/httptest"
//"strings"
"testing"
"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,
) {
req, _ := http.NewRequest("GET", "/status", nil)
w := executeRequest(handler, req)
assert.Equal(t, 200, w.Code)
assert.Equal(t, `{"status":"ok"}`, w.Body.String())
})
}