mukan-ignite/ignite/pkg/clidoc/struct_test.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

221 lines
4.3 KiB
Go

package clidoc
import (
"strings"
"testing"
"github.com/stretchr/testify/require"
)
type (
build struct {
Main string `yaml:"main,omitempty" doc:"doc of main"`
Binary string `yaml:"binary,omitempty" doc:""`
LDFlags []string `yaml:"ldflags,omitempty"`
Proto proto `yaml:"proto" doc:"doc of proto"`
PtrProto *proto `yaml:"ptr_proto" doc:"doc of pointer proto"`
Protos []proto `yaml:"protos" doc:"doc of protos"`
}
proto struct {
Path string `yaml:"path" doc:"path of proto file"`
ThirdPartyPaths []string `yaml:"third_party_paths" doc:"doc of third party paths"`
}
)
func TestGenDoc(t *testing.T) {
tests := []struct {
name string
v interface{}
want Docs
err error
}{
{
name: "build struct",
v: build{},
want: Docs{
{
Key: "main",
Comment: "doc of main",
Type: "string",
},
{
Key: "binary",
Type: "string",
},
{
Key: "ldflags",
Type: listName("string"),
},
{
Key: "proto",
Value: Docs{
{
Key: "path",
Comment: "path of proto file",
Type: "string",
},
{
Key: "third_party_paths",
Comment: "doc of third party paths",
Type: listName("string"),
},
},
Comment: "doc of proto",
},
{
Key: "ptr_proto",
Value: Docs{
{
Key: "path",
Comment: "path of proto file",
Type: "string",
},
{
Key: "third_party_paths",
Comment: "doc of third party paths",
Type: listName("string"),
},
},
Comment: "doc of pointer proto",
},
{
Key: "protos",
Type: "list",
Value: Docs{
{
Key: "path",
Comment: "path of proto file",
Type: "string",
},
{
Key: "third_party_paths",
Comment: "doc of third party paths",
Type: listName("string"),
},
},
Comment: "doc of protos",
},
},
},
{
name: "proto struct",
v: proto{},
want: Docs{
{
Key: "path",
Comment: "path of proto file",
Type: "string",
},
{
Key: "third_party_paths",
Comment: "doc of third party paths",
Type: listName("string"),
},
},
},
{
name: "Invalid struct",
v: []map[string]interface{}{},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := GenDoc(tt.v)
if tt.err != nil {
require.Error(t, err)
require.Equal(t, tt.err.Error(), err.Error())
return
}
require.NoError(t, err)
require.Equal(t, tt.want, got)
})
}
}
func TestDocs_String(t *testing.T) {
tests := []struct {
name string
d Docs
want string
}{
{
name: "many entries",
d: Docs{
{
Key: "main",
Comment: "doc of main",
},
{
Key: "binary",
},
{
Key: "ldflags [array]",
},
{
Key: "proto",
Value: Docs{
{
Key: "path",
Comment: "path of proto file",
},
{
Key: "third_party_paths [array]",
Comment: "doc of third party paths",
},
},
Comment: "doc of proto",
},
{
Key: "protos [array]",
Value: Docs{
{
Key: "path",
Comment: "path of proto file",
},
{
Key: "third_party_paths [array]",
Comment: "doc of third party paths",
},
},
Comment: "doc of protos",
},
},
want: `
main: # doc of main
binary: #
ldflags [array]: #
proto: # doc of proto
path: # path of proto file
third_party_paths [array]: # doc of third party paths
protos [array]: # doc of protos
path: # path of proto file
third_party_paths [array]: # doc of third party paths`,
},
{
name: "no entries",
d: Docs{},
},
{
name: "two entries",
d: Docs{
{
Key: "path",
Comment: "path of proto file",
},
{
Key: "third_party_paths [array]",
Comment: "doc of third party paths",
},
},
want: `
path: # path of proto file
third_party_paths [array]: # doc of third party paths`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := tt.d.String()
require.Equal(t, strings.TrimSpace(tt.want), strings.TrimSpace(got))
})
}
}