mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +00:00
Added API controllers tests
This commit is contained in:
parent
354c068f33
commit
bee2dc3de2
44
go/api/controllers/controllers_test.go
Normal file
44
go/api/controllers/controllers_test.go
Normal 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
|
||||||
|
}
|
||||||
@ -2,47 +2,14 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"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/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) {
|
func TestStatus(t *testing.T) {
|
||||||
runTestCase(t, func(
|
runTestCase(t, func(
|
||||||
handler lib.RequestHandler,
|
handler lib.RequestHandler,
|
||||||
@ -54,3 +21,28 @@ func TestStatus(t *testing.T) {
|
|||||||
assert.Equal(t, `{"status":"ok"}`, w.Body.String())
|
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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
21
go/api/controllers/swagger_controller_test.go
Normal file
21
go/api/controllers/swagger_controller_test.go
Normal 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)
|
||||||
|
})
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user