68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package mock
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/micro/go-micro/errors"
|
|
)
|
|
|
|
func TestClient(t *testing.T) {
|
|
type TestResponse struct {
|
|
Param string
|
|
}
|
|
|
|
response := []MockResponse{
|
|
{Endpoint: "Foo.Bar", Response: map[string]interface{}{"foo": "bar"}},
|
|
{Endpoint: "Foo.Struct", Response: &TestResponse{Param: "aparam"}},
|
|
{Endpoint: "Foo.Fail", Error: errors.InternalServerError("go.mock", "failed")},
|
|
{Endpoint: "Foo.Func", Response: func() string { return "string" }},
|
|
{Endpoint: "Foo.FuncStruct", Response: func() *TestResponse { return &TestResponse{Param: "aparam"} }},
|
|
{Endpoint: "Foo.FuncWithReqBody", Response: func(req interface{}) string {
|
|
if req.(map[string]string)["foo"] == "bar" {
|
|
return "string"
|
|
}
|
|
return "wrong"
|
|
}},
|
|
{Endpoint: "Foo.FuncWithRequestContextAndResponse", Response: func(ctx context.Context, req interface{}) string {
|
|
return "something"
|
|
}},
|
|
{Endpoint: "Foo.FuncWithRequestContextAndResponseError", Response: func(ctx context.Context, req interface{}) (string, error) {
|
|
return "something", fmt.Errorf("mock error")
|
|
}},
|
|
}
|
|
|
|
c := NewClient(Response("go.mock", response))
|
|
|
|
for _, r := range response {
|
|
req := c.NewRequest("go.mock", r.Endpoint, map[string]string{"foo": "bar"})
|
|
var rsp interface{}
|
|
|
|
err := c.Call(context.TODO(), req, &rsp)
|
|
|
|
if err != r.Error {
|
|
if r.Endpoint != "Foo.FuncWithRequestContextAndResponseError" {
|
|
t.Fatalf("Expecter error %v got %v", r.Error, err)
|
|
}
|
|
}
|
|
|
|
t.Log(rsp)
|
|
if r.Endpoint == "Foo.FuncWithReqBody" {
|
|
req := c.NewRequest("go.mock", r.Endpoint, map[string]string{"foo": "wrong"})
|
|
var rsp interface{}
|
|
|
|
err := c.Call(context.TODO(), req, &rsp)
|
|
|
|
if err != r.Error {
|
|
t.Fatalf("Expecter error %v got %v", r.Error, err)
|
|
}
|
|
if rsp.(string) != "wrong" {
|
|
t.Fatalf("Expecter response 'wrong' got %v", rsp)
|
|
}
|
|
t.Log(rsp)
|
|
}
|
|
}
|
|
|
|
}
|