|
|
@@ -10,6 +10,9 @@ import (
|
|
|
"net/http"
|
|
|
"testing"
|
|
|
|
|
|
+ "github.com/gin-gonic/gin/binding/example"
|
|
|
+ "github.com/golang/protobuf/proto"
|
|
|
+
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
)
|
|
|
|
|
|
@@ -37,6 +40,9 @@ func TestBindingDefault(t *testing.T) {
|
|
|
|
|
|
assert.Equal(t, Default("POST", MIMEMultipartPOSTForm), Form)
|
|
|
assert.Equal(t, Default("PUT", MIMEMultipartPOSTForm), Form)
|
|
|
+
|
|
|
+ assert.Equal(t, Default("POST", MIMEPROTOBUF), ProtoBuf)
|
|
|
+ assert.Equal(t, Default("PUT", MIMEPROTOBUF), ProtoBuf)
|
|
|
}
|
|
|
|
|
|
func TestBindingJSON(t *testing.T) {
|
|
|
@@ -103,6 +109,18 @@ func TestBindingFormMultipart(t *testing.T) {
|
|
|
assert.Equal(t, obj.Bar, "foo")
|
|
|
}
|
|
|
|
|
|
+func TestBindingProtoBuf(t *testing.T) {
|
|
|
+ test := &example.Test{
|
|
|
+ Label: proto.String("yes"),
|
|
|
+ }
|
|
|
+ data, _ := proto.Marshal(test)
|
|
|
+
|
|
|
+ testProtoBodyBinding(t,
|
|
|
+ ProtoBuf, "protobuf",
|
|
|
+ "/", "/",
|
|
|
+ string(data), string(data[1:]))
|
|
|
+}
|
|
|
+
|
|
|
func TestValidationFails(t *testing.T) {
|
|
|
var obj FooStruct
|
|
|
req := requestWithBody("POST", "/", `{"bar": "foo"}`)
|
|
|
@@ -156,6 +174,23 @@ func testBodyBinding(t *testing.T, b Binding, name, path, badPath, body, badBody
|
|
|
assert.Error(t, err)
|
|
|
}
|
|
|
|
|
|
+func testProtoBodyBinding(t *testing.T, b Binding, name, path, badPath, body, badBody string) {
|
|
|
+ assert.Equal(t, b.Name(), name)
|
|
|
+
|
|
|
+ obj := example.Test{}
|
|
|
+ req := requestWithBody("POST", path, body)
|
|
|
+ req.Header.Add("Content-Type", MIMEPROTOBUF)
|
|
|
+ err := b.Bind(req, &obj)
|
|
|
+ assert.NoError(t, err)
|
|
|
+ assert.Equal(t, *obj.Label, "yes")
|
|
|
+
|
|
|
+ obj = example.Test{}
|
|
|
+ req = requestWithBody("POST", badPath, badBody)
|
|
|
+ req.Header.Add("Content-Type", MIMEPROTOBUF)
|
|
|
+ err = ProtoBuf.Bind(req, &obj)
|
|
|
+ assert.Error(t, err)
|
|
|
+}
|
|
|
+
|
|
|
func requestWithBody(method, path, body string) (req *http.Request) {
|
|
|
req, _ = http.NewRequest(method, path, bytes.NewBufferString(body))
|
|
|
return
|