@@ -151,15 +151,15 @@ end
151151 Parameter : ptr ("handler_module_prefix=MyApp.Handlers" ),
152152 }
153153
154- rsp := testGenerate (t , req )
155- assert .Nil (t , rsp .Error )
156- assert .Equal (t , 1 , len (rsp .File ))
154+ rsp := testGenerate (t , req )
155+ assert .Nil (t , rsp .Error )
156+ assert .Equal (t , 1 , len (rsp .File ))
157157
158- file := rsp .File [0 ]
159- assert .Equal (t , "auth/v1/auth.server.pb.ex" , file .GetName ())
158+ file := rsp .File [0 ]
159+ assert .Equal (t , "auth/v1/auth.server.pb.ex" , file .GetName ())
160160
161- content := file .GetContent ()
162- expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
161+ content := file .GetContent ()
162+ expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
163163#
164164# Source: auth/v1/auth.proto
165165
@@ -169,7 +169,58 @@ defmodule Auth.V1.AuthService.Server do
169169 defdelegate login(request, stream), to: MyApp.Handlers.Auth.V1.AuthService.Server.LoginHandler, as: :handle_message
170170end
171171`
172- assert .Equal (t , expected , content )
172+ assert .Equal (t , expected , content )
173+ })
174+
175+ t .Run ("with http_transcode option" , func (t * testing.T ) {
176+ fileDesc := & descriptorpb.FileDescriptorProto {
177+ Name : ptr ("api/v1/api.proto" ),
178+ Package : ptr ("api.v1" ),
179+ MessageType : []* descriptorpb.DescriptorProto {
180+ {Name : ptr ("GetRequest" )},
181+ {Name : ptr ("GetResponse" )},
182+ },
183+ Service : []* descriptorpb.ServiceDescriptorProto {
184+ {
185+ Name : ptr ("ApiService" ),
186+ Method : []* descriptorpb.MethodDescriptorProto {
187+ {
188+ Name : ptr ("Get" ),
189+ InputType : ptr (".api.v1.GetRequest" ),
190+ OutputType : ptr (".api.v1.GetResponse" ),
191+ },
192+ },
193+ },
194+ },
195+ }
196+
197+ req := & pluginpb.CodeGeneratorRequest {
198+ FileToGenerate : []string {"api/v1/api.proto" },
199+ ProtoFile : []* descriptorpb.FileDescriptorProto {fileDesc },
200+ SourceFileDescriptors : []* descriptorpb.FileDescriptorProto {fileDesc },
201+ CompilerVersion : compilerVersion ,
202+ Parameter : ptr ("http_transcode=true" ),
203+ }
204+
205+ rsp := testGenerate (t , req )
206+ assert .Nil (t , rsp .Error )
207+ assert .Equal (t , 1 , len (rsp .File ))
208+
209+ file := rsp .File [0 ]
210+ assert .Equal (t , "api/v1/api.server.pb.ex" , file .GetName ())
211+
212+ content := file .GetContent ()
213+ expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
214+ #
215+ # Source: api/v1/api.proto
216+
217+ defmodule Api.V1.ApiService.Server do
218+ use GRPC.Server, service: Api.V1.ApiService.Service, http_transcode: true
219+
220+ defdelegate get(request, stream), to: Api.V1.ApiService.Server.GetHandler, as: :handle_message
221+ end
222+ `
223+ assert .Equal (t , expected , content )
173224 })
174225
175226 t .Run ("with package prefix" , func (t * testing.T ) {
@@ -202,15 +253,15 @@ end
202253 Parameter : ptr ("package_prefix=lib/proto" ),
203254 }
204255
205- rsp := testGenerate (t , req )
206- assert .Nil (t , rsp .Error )
207- assert .Equal (t , 1 , len (rsp .File ))
256+ rsp := testGenerate (t , req )
257+ assert .Nil (t , rsp .Error )
258+ assert .Equal (t , 1 , len (rsp .File ))
208259
209- file := rsp .File [0 ]
210- assert .Equal (t , "lib/proto/user/v1/user.server.pb.ex" , file .GetName ())
260+ file := rsp .File [0 ]
261+ assert .Equal (t , "lib/proto/user/v1/user.server.pb.ex" , file .GetName ())
211262
212- content := file .GetContent ()
213- expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
263+ content := file .GetContent ()
264+ expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
214265#
215266# Source: user.proto
216267
@@ -220,8 +271,8 @@ defmodule User.V1.UserService.Server do
220271 defdelegate get_user(request, stream), to: User.V1.UserService.Server.GetUserHandler, as: :handle_message
221272end
222273`
223- assert .Equal (t , expected , content )
224- })
274+ assert .Equal (t , expected , content )
275+ })
225276
226277 t .Run ("with multiple parameters" , func (t * testing.T ) {
227278 fileDesc := & descriptorpb.FileDescriptorProto {
@@ -270,6 +321,57 @@ defmodule Billing.V1.BillingService.Server do
270321
271322 defdelegate create_invoice(request, stream), to: MyApp.BusinessLogic.Billing.V1.BillingService.Server.CreateInvoiceHandler, as: :handle_message
272323end
324+ `
325+ assert .Equal (t , expected , content )
326+ })
327+
328+ t .Run ("with http_transcode and handler_module_prefix" , func (t * testing.T ) {
329+ fileDesc := & descriptorpb.FileDescriptorProto {
330+ Name : ptr ("payment/v1/payment.proto" ),
331+ Package : ptr ("payment.v1" ),
332+ MessageType : []* descriptorpb.DescriptorProto {
333+ {Name : ptr ("ProcessRequest" )},
334+ {Name : ptr ("ProcessResponse" )},
335+ },
336+ Service : []* descriptorpb.ServiceDescriptorProto {
337+ {
338+ Name : ptr ("PaymentService" ),
339+ Method : []* descriptorpb.MethodDescriptorProto {
340+ {
341+ Name : ptr ("ProcessPayment" ),
342+ InputType : ptr (".payment.v1.ProcessRequest" ),
343+ OutputType : ptr (".payment.v1.ProcessResponse" ),
344+ },
345+ },
346+ },
347+ },
348+ }
349+
350+ req := & pluginpb.CodeGeneratorRequest {
351+ FileToGenerate : []string {"payment/v1/payment.proto" },
352+ ProtoFile : []* descriptorpb.FileDescriptorProto {fileDesc },
353+ SourceFileDescriptors : []* descriptorpb.FileDescriptorProto {fileDesc },
354+ CompilerVersion : compilerVersion ,
355+ Parameter : ptr ("http_transcode=true,handler_module_prefix=MyApp.Core" ),
356+ }
357+
358+ rsp := testGenerate (t , req )
359+ assert .Nil (t , rsp .Error )
360+ assert .Equal (t , 1 , len (rsp .File ))
361+
362+ file := rsp .File [0 ]
363+ assert .Equal (t , "payment/v1/payment.server.pb.ex" , file .GetName ())
364+
365+ content := file .GetContent ()
366+ expected := `# Code generated by protoc-gen-elixir-grpc. DO NOT EDIT.
367+ #
368+ # Source: payment/v1/payment.proto
369+
370+ defmodule Payment.V1.PaymentService.Server do
371+ use GRPC.Server, service: Payment.V1.PaymentService.Service, http_transcode: true
372+
373+ defdelegate process_payment(request, stream), to: MyApp.Core.Payment.V1.PaymentService.Server.ProcessPaymentHandler, as: :handle_message
374+ end
273375`
274376 assert .Equal (t , expected , content )
275377 })
0 commit comments