242 lines
5.9 KiB
Go
242 lines
5.9 KiB
Go
package readme
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestParseSourceURL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
sourceURL string
|
|
wantPlatform Platform
|
|
wantUser string
|
|
wantRepo string
|
|
wantOK bool
|
|
}{
|
|
// GitHub
|
|
{
|
|
name: "github standard",
|
|
sourceURL: "https://github.com/bigmoves/quickslice",
|
|
wantPlatform: PlatformGitHub,
|
|
wantUser: "bigmoves",
|
|
wantRepo: "quickslice",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "github with .git suffix",
|
|
sourceURL: "https://github.com/user/repo.git",
|
|
wantPlatform: PlatformGitHub,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "github with trailing slash",
|
|
sourceURL: "https://github.com/user/repo/",
|
|
wantPlatform: PlatformGitHub,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "github with subpath (ignored)",
|
|
sourceURL: "https://github.com/user/repo/tree/main",
|
|
wantPlatform: PlatformGitHub,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "github user only",
|
|
sourceURL: "https://github.com/user",
|
|
wantOK: false,
|
|
},
|
|
|
|
// GitLab
|
|
{
|
|
name: "gitlab standard",
|
|
sourceURL: "https://gitlab.com/user/repo",
|
|
wantPlatform: PlatformGitLab,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "gitlab nested groups",
|
|
sourceURL: "https://gitlab.com/group/subgroup/repo",
|
|
wantPlatform: PlatformGitLab,
|
|
wantUser: "group/subgroup",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "gitlab deep nested groups",
|
|
sourceURL: "https://gitlab.com/a/b/c/d/repo",
|
|
wantPlatform: PlatformGitLab,
|
|
wantUser: "a/b/c/d",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "gitlab with .git suffix",
|
|
sourceURL: "https://gitlab.com/user/repo.git",
|
|
wantPlatform: PlatformGitLab,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
|
|
// Tangled
|
|
{
|
|
name: "tangled standard",
|
|
sourceURL: "https://tangled.org/evan.jarrett.net/at-container-registry",
|
|
wantPlatform: PlatformTangled,
|
|
wantUser: "evan.jarrett.net",
|
|
wantRepo: "at-container-registry",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "tangled with legacy @ prefix",
|
|
sourceURL: "https://tangled.org/@evan.jarrett.net/at-container-registry",
|
|
wantPlatform: PlatformTangled,
|
|
wantUser: "evan.jarrett.net",
|
|
wantRepo: "at-container-registry",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "tangled.sh domain",
|
|
sourceURL: "https://tangled.sh/user/repo",
|
|
wantPlatform: PlatformTangled,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "tangled with trailing slash",
|
|
sourceURL: "https://tangled.org/user/repo/",
|
|
wantPlatform: PlatformTangled,
|
|
wantUser: "user",
|
|
wantRepo: "repo",
|
|
wantOK: true,
|
|
},
|
|
|
|
// Unsupported / Invalid
|
|
{
|
|
name: "unsupported platform",
|
|
sourceURL: "https://bitbucket.org/user/repo",
|
|
wantOK: false,
|
|
},
|
|
{
|
|
name: "empty url",
|
|
sourceURL: "",
|
|
wantOK: false,
|
|
},
|
|
{
|
|
name: "invalid url",
|
|
sourceURL: "not-a-url",
|
|
wantOK: false,
|
|
},
|
|
{
|
|
name: "just host",
|
|
sourceURL: "https://github.com",
|
|
wantOK: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
platform, user, repo, ok := ParseSourceURL(tt.sourceURL)
|
|
if ok != tt.wantOK {
|
|
t.Errorf("ParseSourceURL(%q) ok = %v, want %v", tt.sourceURL, ok, tt.wantOK)
|
|
return
|
|
}
|
|
if !tt.wantOK {
|
|
return
|
|
}
|
|
if platform != tt.wantPlatform {
|
|
t.Errorf("ParseSourceURL(%q) platform = %v, want %v", tt.sourceURL, platform, tt.wantPlatform)
|
|
}
|
|
if user != tt.wantUser {
|
|
t.Errorf("ParseSourceURL(%q) user = %q, want %q", tt.sourceURL, user, tt.wantUser)
|
|
}
|
|
if repo != tt.wantRepo {
|
|
t.Errorf("ParseSourceURL(%q) repo = %q, want %q", tt.sourceURL, repo, tt.wantRepo)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDeriveReadmeURL(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
sourceURL string
|
|
branch string
|
|
want string
|
|
}{
|
|
// GitHub
|
|
{
|
|
name: "github main",
|
|
sourceURL: "https://github.com/bigmoves/quickslice",
|
|
branch: "main",
|
|
want: "https://raw.githubusercontent.com/bigmoves/quickslice/refs/heads/main/README.md",
|
|
},
|
|
{
|
|
name: "github master",
|
|
sourceURL: "https://github.com/user/repo",
|
|
branch: "master",
|
|
want: "https://raw.githubusercontent.com/user/repo/refs/heads/master/README.md",
|
|
},
|
|
|
|
// GitLab
|
|
{
|
|
name: "gitlab main",
|
|
sourceURL: "https://gitlab.com/user/repo",
|
|
branch: "main",
|
|
want: "https://gitlab.com/user/repo/-/raw/main/README.md",
|
|
},
|
|
{
|
|
name: "gitlab nested groups",
|
|
sourceURL: "https://gitlab.com/group/subgroup/repo",
|
|
branch: "main",
|
|
want: "https://gitlab.com/group/subgroup/repo/-/raw/main/README.md",
|
|
},
|
|
|
|
// Tangled
|
|
{
|
|
name: "tangled main",
|
|
sourceURL: "https://tangled.org/evan.jarrett.net/at-container-registry",
|
|
branch: "main",
|
|
want: "https://tangled.org/evan.jarrett.net/at-container-registry/raw/main/README.md",
|
|
},
|
|
{
|
|
name: "tangled legacy @ prefix",
|
|
sourceURL: "https://tangled.org/@user/repo",
|
|
branch: "main",
|
|
want: "https://tangled.org/user/repo/raw/main/README.md",
|
|
},
|
|
|
|
// Unsupported
|
|
{
|
|
name: "unsupported platform",
|
|
sourceURL: "https://bitbucket.org/user/repo",
|
|
branch: "main",
|
|
want: "",
|
|
},
|
|
{
|
|
name: "empty url",
|
|
sourceURL: "",
|
|
branch: "main",
|
|
want: "",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := DeriveReadmeURL(tt.sourceURL, tt.branch)
|
|
if got != tt.want {
|
|
t.Errorf("DeriveReadmeURL(%q, %q) = %q, want %q", tt.sourceURL, tt.branch, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|