mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-10-27 17:03:49 +08:00
59 lines
2.2 KiB
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)
|
|
}
|
|
}
|