feat: bootstrap reusable GoOmni framework
This commit is contained in:
57
transport/nethttp/router_test.go
Normal file
57
transport/nethttp/router_test.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package nethttp_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
omni "git.yuntuo.hk/k2safe/go-omni"
|
||||
netrouter "git.yuntuo.hk/k2safe/go-omni/transport/nethttp"
|
||||
)
|
||||
|
||||
func TestRouterWorksWithoutGin(t *testing.T) {
|
||||
router := netrouter.New()
|
||||
app := omni.NewWithRouter(router)
|
||||
app.GET("/users/:id", func(ctx *omni.Context) error {
|
||||
return ctx.OK(map[string]string{"id": ctx.Param("id")})
|
||||
})
|
||||
|
||||
recorder := httptest.NewRecorder()
|
||||
request := httptest.NewRequest(http.MethodGet, "/users/42", nil)
|
||||
app.ServeHTTP(recorder, request)
|
||||
if recorder.Code != http.StatusOK {
|
||||
t.Fatalf("expected 200, got %d: %s", recorder.Code, recorder.Body.String())
|
||||
}
|
||||
var body struct {
|
||||
Data map[string]string `json:"data"`
|
||||
}
|
||||
if err := json.Unmarshal(recorder.Body.Bytes(), &body); err != nil {
|
||||
t.Fatalf("decode response: %v", err)
|
||||
}
|
||||
if body.Data["id"] != "42" {
|
||||
t.Fatalf("unexpected route parameter: %#v", body.Data)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRouterPrefersStaticRoutesAndReturnsMethodNotAllowed(t *testing.T) {
|
||||
router := netrouter.New()
|
||||
router.Handle(http.MethodGet, "/users/:id", http.HandlerFunc(func(writer http.ResponseWriter, _ *http.Request) {
|
||||
writer.WriteHeader(http.StatusAccepted)
|
||||
}))
|
||||
router.Handle(http.MethodGet, "/users/me", http.HandlerFunc(func(writer http.ResponseWriter, _ *http.Request) {
|
||||
writer.WriteHeader(http.StatusCreated)
|
||||
}))
|
||||
|
||||
static := httptest.NewRecorder()
|
||||
router.ServeHTTP(static, httptest.NewRequest(http.MethodGet, "/users/me", nil))
|
||||
if static.Code != http.StatusCreated {
|
||||
t.Fatalf("static route did not win, got %d", static.Code)
|
||||
}
|
||||
|
||||
method := httptest.NewRecorder()
|
||||
router.ServeHTTP(method, httptest.NewRequest(http.MethodPost, "/users/me", nil))
|
||||
if method.Code != http.StatusMethodNotAllowed || method.Header().Get("Allow") != http.MethodGet {
|
||||
t.Fatalf("unexpected method response: status=%d allow=%q", method.Code, method.Header().Get("Allow"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user