Files
ARTEX-chixuweihu/selfupdate/github_test.go

59 lines
2.2 KiB
Go

package selfupdate
import (
"context"
"io"
"net/http"
"strings"
"testing"
)
type releaseTransport func(*http.Request) (*http.Response, error)
func (f releaseTransport) RoundTrip(r *http.Request) (*http.Response, error) { return f(r) }
func TestFetchLatestUsesForkRelease(t *testing.T) {
client := &http.Client{Transport: releaseTransport(func(r *http.Request) (*http.Response, error) {
if got := r.URL.String(); got != "https://api.github.com/repos/RuoJi6/ARTEX/releases/latest" {
t.Fatalf("unexpected update source: %s", got)
}
if r.Method != http.MethodGet || r.Header.Get("Accept") != "application/vnd.github+json" {
t.Fatalf("invalid GitHub request: %s %v", r.Method, r.Header)
}
return &http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(strings.NewReader(`{
"tag_name":"v0.3.16",
"assets":[
{"name":"artex-0.3.16-linux-arm64.zip","browser_download_url":"https://github.com/RuoJi6/ARTEX/releases/download/v0.3.16/artex-0.3.16-linux-arm64.zip"},
{"name":"SHA256SUMS","browser_download_url":"https://github.com/RuoJi6/ARTEX/releases/download/v0.3.16/SHA256SUMS"}
]
}`))}, nil
})}
rel, err := FetchLatest(context.Background(), client)
if err != nil {
t.Fatal(err)
}
for _, name := range []string{AssetName(rel.TagName, "linux", "arm64"), sumsAsset} {
asset, ok := rel.FindAsset(name)
if !ok {
t.Fatalf("missing release asset %s", name)
}
body, err := get(context.Background(), &http.Client{Transport: releaseTransport(func(r *http.Request) (*http.Response, error) {
return &http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(strings.NewReader("asset"))}, nil
})}, asset.URL)
if err != nil {
t.Fatalf("fork asset URL rejected: %v", err)
}
body.Close()
}
}
func TestFetchLatestMissingRelease(t *testing.T) {
client := &http.Client{Transport: releaseTransport(func(*http.Request) (*http.Response, error) {
return &http.Response{StatusCode: http.StatusNotFound, Body: io.NopCloser(strings.NewReader("{}"))}, nil
})}
_, err := FetchLatest(context.Background(), client)
if err == nil || !strings.Contains(err.Error(), "RuoJi6/ARTEX") || !strings.Contains(err.Error(), "不可访问或尚未发布") {
t.Fatalf("unexpected missing-release error: %v", err)
}
}