Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions renderer/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,10 @@ func (f *Functions) LinkForType(t *types.Type) (link string, local bool) {
return f.LinkForKubeType(t), false
}

if kt, ok := f.IsKnownType(t); ok {
return f.LinkForKnownType(kt), false
}

if t.IsBasic() || t.Imported {
if kt, ok := f.IsKnownType(t); ok {
return f.LinkForKnownType(kt), false
}
return "", false
}

Expand Down
51 changes: 51 additions & 0 deletions renderer/functions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,57 @@ import (
"github.com/stretchr/testify/require"
)

func TestLinkForType(t *testing.T) {
conf := config.Config{
Render: config.RenderConfig{
KubernetesVersion: "1.29",
KnownTypes: []*config.KnownType{
// Register our own package to verify it is ignored for local types.
{Name: "Foo", Package: "example.com/pkg", Link: "https://example.com/docs#foo"},
// Also register a kube type to verify IsKubeType takes precedence over knownTypes.
{Name: "ObjectMeta", Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Link: "https://example.com/docs#objectmeta"},
},
},
}

f, err := NewFunctions(&conf)
require.NoError(t, err)

cases := []struct {
name string
typ *types.Type
wantLink string
wantLocal bool
}{
{
name: "imported type gets external link from knownTypes",
typ: &types.Type{Name: "Foo", Package: "example.com/pkg", Imported: true},
wantLink: "https://example.com/docs#foo",
wantLocal: false,
},
{
name: "local type ignores knownTypes and gets local link",
typ: &types.Type{Name: "Foo", Package: "example.com/pkg", Imported: false},
wantLink: "example-com-pkg-foo",
wantLocal: true,
},
{
name: "kube type gets kubernetes.io link even when also in knownTypes",
typ: &types.Type{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ObjectMeta"},
wantLink: "https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#objectmeta-v1-meta",
wantLocal: false,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
link, local := f.LinkForType(tc.typ)
require.Equal(t, tc.wantLink, link)
require.Equal(t, tc.wantLocal, local)
})
}
}

func TestKubernetesHelper(t *testing.T) {
conf := config.Config{
Render: config.RenderConfig{
Expand Down