cli/internal/skills/source/source_test.go
sammorrowdrums 63262dce8b feat(skills): support GHEC with data residency hosts
Widen ValidateSupportedHost to accept tenancy hosts (*.ghe.com) alongside
github.com. GHEC with data residency uses these domains, and all skill
subcommands (search, install, preview, publish, update) now allow them.

GitHub Enterprise Server remains unsupported and is explicitly rejected
with a clear error message.

Also fix the lockfile writer to use the actual host when constructing
SourceURL instead of hardcoding github.com.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-22 23:27:38 +02:00

78 lines
2 KiB
Go

package source
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestBuildRepoURL(t *testing.T) {
assert.Equal(t, "https://github.com/monalisa/octocat-skills", BuildRepoURL("github.com", "monalisa", "octocat-skills"))
}
func TestParseMetadataRepo(t *testing.T) {
tests := []struct {
name string
meta map[string]interface{}
wantOwner string
wantRepo string
wantHost string
wantFound bool
wantErr string
}{
{
name: "parses repo url metadata",
meta: map[string]interface{}{
"github-repo": "https://github.com/monalisa/octocat-skills",
},
wantOwner: "monalisa",
wantRepo: "octocat-skills",
wantHost: SupportedHost,
wantFound: true,
},
{
name: "invalid repo url",
meta: map[string]interface{}{
"github-repo": "not a url",
},
wantFound: true,
wantErr: "invalid repository URL",
},
{
name: "missing repo metadata",
meta: map[string]interface{}{},
wantFound: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
repo, found, err := ParseMetadataRepo(tt.meta)
assert.Equal(t, tt.wantFound, found)
if !tt.wantFound {
require.NoError(t, err)
assert.Nil(t, repo)
return
}
if tt.wantErr != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tt.wantErr)
return
}
require.NoError(t, err)
require.NotNil(t, repo)
assert.Equal(t, tt.wantOwner, repo.RepoOwner())
assert.Equal(t, tt.wantRepo, repo.RepoName())
assert.Equal(t, tt.wantHost, repo.RepoHost())
})
}
}
func TestValidateSupportedHost(t *testing.T) {
require.NoError(t, ValidateSupportedHost("github.com"))
require.NoError(t, ValidateSupportedHost("mycompany.ghe.com"), "GHEC data residency tenancy hosts should be accepted")
require.ErrorContains(t, ValidateSupportedHost("acme.ghes.com"), "does not currently support GitHub Enterprise Server")
require.ErrorContains(t, ValidateSupportedHost("github.localhost"), "unsupported host")
}