go-github-selfupdate/selfupdate/detect_test.go
rhysd a8d7262d70 add tests for GitHub Enterprise more
These tests require GHE environment.
Please set following environment variables:

- $GITHUB_ENTERPRISE_TOKEN
- $GITHUB_ENTERPRISE_BASE_URL
- $GITHUB_ENTERPRISE_REPO
2018-01-19 19:49:45 +09:00

214 lines
5.2 KiB
Go

package selfupdate
import (
"fmt"
"github.com/blang/semver"
"os"
"strings"
"testing"
)
func TestDetectReleaseWithVersionPrefix(t *testing.T) {
r, ok, err := DetectLatest("rhysd/github-clone-all")
if err != nil {
t.Fatal("Fetch failed:", err)
}
if !ok {
t.Fatal("Failed to detect latest")
}
if r == nil {
t.Fatal("Release detected but nil returned for it")
}
if r.Version.LE(semver.MustParse("2.0.0")) {
t.Error("Incorrect version:", r.Version)
}
if !strings.HasSuffix(r.AssetURL, ".zip") && !strings.HasSuffix(r.AssetURL, ".tar.gz") {
t.Error("Incorrect URL for asset:", r.AssetURL)
}
if r.URL == "" {
t.Error("Document URL should not be empty")
}
if r.ReleaseNotes == "" {
t.Error("Description should not be empty for this repo")
}
if r.Name == "" {
t.Error("Release name is unexpectedly empty")
}
if r.AssetByteSize == 0 {
t.Error("Asset's size is unexpectedly zero")
}
if r.AssetID == 0 {
t.Error("Asset's ID is unexpectedly zero")
}
if r.PublishedAt.IsZero() {
t.Error("Release time is unexpectedly zero")
}
if r.RepoOwner != "rhysd" {
t.Error("Repo owner is not correct:", r.RepoOwner)
}
if r.RepoName != "github-clone-all" {
t.Error("Repo name was not properly detectd:", r.RepoName)
}
}
func TestDetectReleasesForVariousArchives(t *testing.T) {
for _, tc := range []struct {
slug string
prefix string
}{
{"rhysd-test/test-release-zip", "v"},
{"rhysd-test/test-release-tar", "v"},
{"rhysd-test/test-release-gzip", "v"},
{"rhysd-test/test-release-xz", "release-v"},
{"rhysd-test/test-release-tar-xz", "release-"},
} {
t.Run(tc.slug, func(t *testing.T) {
r, ok, err := DetectLatest(tc.slug)
if err != nil {
t.Fatal("Fetch failed:", err)
}
if !ok {
t.Fatal(tc.slug, "not found")
}
if r == nil {
t.Fatal("Release not detected")
}
if !r.Version.Equals(semver.MustParse("1.2.3")) {
t.Error("")
}
url := fmt.Sprintf("https://github.com/%s/releases/tag/%s1.2.3", tc.slug, tc.prefix)
if r.URL != url {
t.Error("URL is not correct. Want", url, "but got", r.URL)
}
if r.ReleaseNotes == "" {
t.Error("Release note is unexpectedly empty")
}
if !strings.HasPrefix(r.AssetURL, fmt.Sprintf("https://github.com/%s/releases/download/%s1.2.3/", tc.slug, tc.prefix)) {
t.Error("Unexpected asset URL:", r.AssetURL)
}
if r.Name == "" {
t.Error("Release name is unexpectedly empty")
}
if r.AssetByteSize == 0 {
t.Error("Asset's size is unexpectedly zero")
}
if r.AssetID == 0 {
t.Error("Asset's ID is unexpectedly zero")
}
if r.PublishedAt.IsZero() {
t.Error("Release time is unexpectedly zero")
}
if r.RepoOwner != "rhysd-test" {
t.Error("Repo owner should be rhysd-test:", r.RepoOwner)
}
if !strings.HasPrefix(r.RepoName, "test-release-") {
t.Error("Repo name was not properly detectd:", r.RepoName)
}
})
}
}
func TestDetectReleaseButNoAsset(t *testing.T) {
_, ok, err := DetectLatest("rhysd/clever-f.vim")
if err != nil {
t.Fatal("Fetch failed:", err)
}
if ok {
t.Fatal("When no asset found, result should be marked as 'not found'")
}
}
func TestDetectNoRelease(t *testing.T) {
_, ok, err := DetectLatest("rhysd/clever-f.vim")
if err != nil {
t.Fatal("Fetch failed:", err)
}
if ok {
t.Fatal("When no release found, result should be marked as 'not found'")
}
}
func TestInvalidSlug(t *testing.T) {
up := DefaultUpdater()
for _, slug := range []string{
"foo",
"/",
"foo/",
"/bar",
"foo/bar/piyo",
} {
_, _, err := up.DetectLatest(slug)
if err == nil {
t.Error(slug, "should be invalid slug")
}
if !strings.Contains(err.Error(), "Invalid slug format") {
t.Error("Unexpected error for", slug, ":", err)
}
}
}
func TestNonExistingRepo(t *testing.T) {
v, ok, err := DetectLatest("rhysd/non-existing-repo")
if err != nil {
t.Fatal("Non-existing repo should not cause an error:", v)
}
if ok {
t.Fatal("Release for non-existing repo should not be found")
}
}
func TestNoReleaseFound(t *testing.T) {
_, ok, err := DetectLatest("rhysd/misc")
if err != nil {
t.Fatal("Repo having no release should not cause an error:", err)
}
if ok {
t.Fatal("Repo having no release should not be found")
}
}
func TestDetectFromBrokenGitHubEnterpriseURL(t *testing.T) {
up, err := NewUpdater(Config{APIToken: "hogehoge", EnterpriseBaseURL: "https://example.com"})
if err != nil {
t.Fatal(err)
}
_, ok, _ := up.DetectLatest("foo/bar")
if ok {
t.Fatal("Invalid GitHub Enterprise base URL should raise an error")
}
}
func TestDetectFromGitHubEnterpriseRepo(t *testing.T) {
token := os.Getenv("GITHUB_ENTERPRISE_TOKEN")
base := os.Getenv("GITHUB_ENTERPRISE_BASE_URL")
repo := os.Getenv("GITHUB_ENTERPRISE_REPO")
if token == "" {
t.Skip("because token for GHE is not found")
}
if base == "" {
t.Skip("because base URL for GHE is not found")
}
if repo == "" {
t.Skip("because repo slug for GHE is not found")
}
up, err := NewUpdater(Config{APIToken: token, EnterpriseBaseURL: base})
if err != nil {
t.Fatal(err)
}
r, ok, err := up.DetectLatest(repo)
if err != nil {
t.Fatal("Fetch failed:", err)
}
if !ok {
t.Fatal(repo, "not found")
}
if r == nil {
t.Fatal("Release not detected")
}
if !r.Version.Equals(semver.MustParse("1.2.3")) {
t.Error("")
}
}