From bdb5b3ebd4e8d707bb180801f59ba258d07b6f1f Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 28 Feb 2019 12:49:50 +0100 Subject: [PATCH 1/3] Fix parameter names when using JSON names. --- protoc-gen-swagger/genswagger/template.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 771a005c99b..5e42d5bf2a9 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -132,7 +132,6 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st } param := swaggerParameterObject{ - Name: prefix + field.GetName(), Description: desc, In: "query", Default: schema.Default, @@ -142,6 +141,12 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st Required: required, } + if reg.GetUseJSONNamesForFields() { + param.Name = prefix + field.GetJsonName() + } else { + param.Name = prefix + field.GetName() + } + if isEnum { enum, err := reg.LookupEnum("", fieldType) if err != nil { From 413f6e236967789cfe6c196b2aa7965b6aa8525e Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 28 Feb 2019 13:43:20 +0100 Subject: [PATCH 2/3] Add test. Fix fallback when `json_name` is unset (query params). --- protoc-gen-swagger/genswagger/template.go | 4 +- .../genswagger/template_test.go | 85 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 5e42d5bf2a9..92e3695055a 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -143,7 +143,9 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st if reg.GetUseJSONNamesForFields() { param.Name = prefix + field.GetJsonName() - } else { + } + + if !reg.GetUseJSONNamesForFields() || param.Name == "" { param.Name = prefix + field.GetName() } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 4e20a3ccd25..86aa740c8a0 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -197,6 +197,91 @@ func TestMessageToQueryParameters(t *testing.T) { } } +func TestMessageToQueryParametersWithJsonName(t *testing.T) { + type test struct { + MsgDescs []*protodescriptor.DescriptorProto + Message string + Params []swaggerParameterObject + } + + tests := []test{ + { + MsgDescs: []*protodescriptor.DescriptorProto{ + &protodescriptor.DescriptorProto{ + Name: proto.String("ExampleMessage"), + Field: []*protodescriptor.FieldDescriptorProto{ + { + Name: proto.String("test_field_a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), + JsonName: proto.String("testFieldA"), + }, + { + Name: proto.String("test_field_b"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(2), + }, + }, + }, + }, + Message: "ExampleMessage", + Params: []swaggerParameterObject{ + swaggerParameterObject{ + Name: "testFieldA", + In: "query", + Required: false, + Type: "string", + }, + swaggerParameterObject{ + Name: "test_field_b", + In: "query", + Required: false, + Type: "string", + }, + }, + }, + } + + for _, test := range tests { + reg := descriptor.NewRegistry() + reg.SetUseJSONNamesForFields(true) + msgs := []*descriptor.Message{} + for _, msgdesc := range test.MsgDescs { + msgs = append(msgs, &descriptor.Message{DescriptorProto: msgdesc}) + } + file := descriptor.File{ + FileDescriptorProto: &protodescriptor.FileDescriptorProto{ + SourceCodeInfo: &protodescriptor.SourceCodeInfo{}, + Name: proto.String("example.proto"), + Package: proto.String("example"), + Dependency: []string{}, + MessageType: test.MsgDescs, + Service: []*protodescriptor.ServiceDescriptorProto{}, + }, + GoPkg: descriptor.GoPackage{ + Path: "example.com/path/to/example/example.pb", + Name: "example_pb", + }, + Messages: msgs, + } + reg.Load(&plugin.CodeGeneratorRequest{ + ProtoFile: []*protodescriptor.FileDescriptorProto{file.FileDescriptorProto}, + }) + + message, err := reg.LookupMsg("", ".example."+test.Message) + if err != nil { + t.Fatalf("failed to lookup message: %s", err) + } + params, err := messageToQueryParameters(message, reg, []descriptor.Parameter{}) + if err != nil { + t.Fatalf("failed to convert message to query parameters: %s", err) + } + if !reflect.DeepEqual(params, test.Params) { + t.Errorf("expected %v, got %v", test.Params, params) + } + } +} + func TestApplyTemplateSimple(t *testing.T) { msgdesc := &protodescriptor.DescriptorProto{ Name: proto.String("ExampleMessage"), From a437376c550e6132abf2757a7ebc6a524760c79f Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 28 Feb 2019 13:55:14 +0100 Subject: [PATCH 3/3] Remove fallback. See https://github.com/grpc-ecosystem/grpc-gateway/pull/879#issuecomment-468261505. --- protoc-gen-swagger/genswagger/template.go | 4 +--- protoc-gen-swagger/genswagger/template_test.go | 11 ----------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 92e3695055a..5e42d5bf2a9 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -143,9 +143,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st if reg.GetUseJSONNamesForFields() { param.Name = prefix + field.GetJsonName() - } - - if !reg.GetUseJSONNamesForFields() || param.Name == "" { + } else { param.Name = prefix + field.GetName() } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index 86aa740c8a0..76b1e830e0e 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -216,11 +216,6 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { Number: proto.Int32(1), JsonName: proto.String("testFieldA"), }, - { - Name: proto.String("test_field_b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Number: proto.Int32(2), - }, }, }, }, @@ -232,12 +227,6 @@ func TestMessageToQueryParametersWithJsonName(t *testing.T) { Required: false, Type: "string", }, - swaggerParameterObject{ - Name: "test_field_b", - In: "query", - Required: false, - Type: "string", - }, }, }, }