This commit is contained in:
2026-06-22 08:55:57 +08:00
parent dbb87823e8
commit 6ade6e8fa9
325 changed files with 41131 additions and 855 deletions
+60
View File
@@ -0,0 +1,60 @@
package vcs
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestParseRepoRef_HTTPS(t *testing.T) {
cases := []struct{ url, owner, name string }{
{"https://git.jerryyan.net/owner/repo.git", "owner", "repo"},
{"https://git.jerryyan.net/owner/repo", "owner", "repo"},
{"http://git.jerryyan.net/acme/widgets.git", "acme", "widgets"},
{"https://git.jerryyan.net:3000/owner/repo.git", "owner", "repo"},
}
for _, c := range cases {
ref, err := ParseRepoRef(c.url, "git.jerryyan.net")
require.NoError(t, err, c.url)
assert.Equal(t, c.owner, ref.Owner, c.url)
assert.Equal(t, c.name, ref.Name, c.url)
}
}
func TestParseRepoRef_SSHAndScp(t *testing.T) {
cases := []struct{ url, owner, name string }{
{"git@git.jerryyan.net:owner/repo.git", "owner", "repo"},
{"git@git.jerryyan.net:owner/repo", "owner", "repo"},
{"ssh://git@git.jerryyan.net/owner/repo.git", "owner", "repo"},
}
for _, c := range cases {
ref, err := ParseRepoRef(c.url, "git.jerryyan.net")
require.NoError(t, err, c.url)
assert.Equal(t, c.owner, ref.Owner, c.url)
assert.Equal(t, c.name, ref.Name, c.url)
}
}
func TestParseRepoRef_UnsupportedHost(t *testing.T) {
_, err := ParseRepoRef("https://github.com/owner/repo.git", "git.jerryyan.net")
require.ErrorIs(t, err, ErrUnsupportedHost)
_, err = ParseRepoRef("git@github.com:owner/repo.git", "git.jerryyan.net")
require.ErrorIs(t, err, ErrUnsupportedHost)
}
func TestParseRepoRef_Invalid(t *testing.T) {
for _, bad := range []string{"", "not-a-url", "https://git.jerryyan.net/only-owner"} {
_, err := ParseRepoRef(bad, "git.jerryyan.net")
require.Error(t, err, bad)
}
}
func TestParseRepoRef_HostAgnostic(t *testing.T) {
// wantHost empty => skip host check
ref, err := ParseRepoRef("https://github.com/owner/repo.git", "")
require.NoError(t, err)
assert.Equal(t, "owner", ref.Owner)
assert.Equal(t, "repo", ref.Name)
}