mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
148 lines
3.5 KiB
Go
148 lines
3.5 KiB
Go
package generator
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/emicklei/proto"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/zeromicro/go-zero/tools/goctl/rpc/parser"
|
|
)
|
|
|
|
func TestServiceNameDetermination(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
protoName string
|
|
packageName string
|
|
hasPackage bool
|
|
nameFromFilename bool
|
|
expectedName string
|
|
}{
|
|
{
|
|
name: "default uses package name when available",
|
|
protoName: "user.proto",
|
|
packageName: "userservice",
|
|
hasPackage: true,
|
|
nameFromFilename: false,
|
|
expectedName: "userservice",
|
|
},
|
|
{
|
|
name: "flag enabled uses filename instead of package",
|
|
protoName: "user.proto",
|
|
packageName: "userservice",
|
|
hasPackage: true,
|
|
nameFromFilename: true,
|
|
expectedName: "user",
|
|
},
|
|
{
|
|
name: "fallback to filename when package is empty",
|
|
protoName: "order.proto",
|
|
packageName: "",
|
|
hasPackage: true,
|
|
nameFromFilename: false,
|
|
expectedName: "order",
|
|
},
|
|
{
|
|
name: "fallback to filename when package is nil",
|
|
protoName: "product.proto",
|
|
packageName: "",
|
|
hasPackage: false,
|
|
nameFromFilename: false,
|
|
expectedName: "product",
|
|
},
|
|
{
|
|
name: "flag enabled with nil package uses filename",
|
|
protoName: "catalog.proto",
|
|
packageName: "",
|
|
hasPackage: false,
|
|
nameFromFilename: true,
|
|
expectedName: "catalog",
|
|
},
|
|
{
|
|
name: "handles proto file with complex name",
|
|
protoName: "user-service.proto",
|
|
packageName: "user",
|
|
hasPackage: true,
|
|
nameFromFilename: false,
|
|
expectedName: "user",
|
|
},
|
|
{
|
|
name: "handles proto file with complex name and flag",
|
|
protoName: "user-service.proto",
|
|
packageName: "user",
|
|
hasPackage: true,
|
|
nameFromFilename: true,
|
|
expectedName: "user-service",
|
|
},
|
|
{
|
|
name: "nil context uses package name",
|
|
protoName: "account.proto",
|
|
packageName: "accountpb",
|
|
hasPackage: true,
|
|
nameFromFilename: false,
|
|
expectedName: "accountpb",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Build the proto struct
|
|
p := parser.Proto{
|
|
Name: tt.protoName,
|
|
}
|
|
if tt.hasPackage {
|
|
p.Package = parser.Package{
|
|
Package: &proto.Package{
|
|
Name: tt.packageName,
|
|
},
|
|
}
|
|
}
|
|
|
|
// Build the context
|
|
var ctx *ZRpcContext
|
|
if tt.name != "nil context uses package name" {
|
|
ctx = &ZRpcContext{
|
|
NameFromFilename: tt.nameFromFilename,
|
|
}
|
|
}
|
|
|
|
// Call the helper function to determine service name
|
|
serviceName := determineServiceName(p, ctx)
|
|
assert.Equal(t, tt.expectedName, serviceName)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestServiceNameWithNilContext(t *testing.T) {
|
|
p := parser.Proto{
|
|
Name: "test.proto",
|
|
Package: parser.Package{
|
|
Package: &proto.Package{
|
|
Name: "testpkg",
|
|
},
|
|
},
|
|
}
|
|
|
|
// nil context should use package name
|
|
serviceName := determineServiceName(p, nil)
|
|
assert.Equal(t, "testpkg", serviceName)
|
|
}
|
|
|
|
func TestServiceNameFallbackWithEmptyPackage(t *testing.T) {
|
|
p := parser.Proto{
|
|
Name: "myservice.proto",
|
|
Package: parser.Package{
|
|
Package: &proto.Package{
|
|
Name: "", // empty package name
|
|
},
|
|
},
|
|
}
|
|
|
|
ctx := &ZRpcContext{
|
|
NameFromFilename: false,
|
|
}
|
|
|
|
// Should fall back to filename when package name is empty
|
|
serviceName := determineServiceName(p, ctx)
|
|
assert.Equal(t, "myservice", serviceName)
|
|
}
|