Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

64 lines
2.5 KiB
Go

package main
import "testing"
// TestUpgradeInstallMethodDetection proves the path-math that maps a binary's
// location to its install method — so `gortex upgrade` updates the way the user
// installed (Homebrew / Scoop / go install / installer script) instead of
// clobbering a package-manager-owned binary — including the Windows Scoop path
// classified on a non-Windows host.
func TestUpgradeInstallMethodDetection(t *testing.T) {
const goBin = "/Users/x/go/bin"
const home = "/Users/x"
cases := []struct {
name string
path string
want InstallMethod
wantCmd string
}{
{"brew_cellar", "/opt/homebrew/Cellar/gortex/0.48.0/bin/gortex", InstallBrew, "brew upgrade gortex"},
{"brew_intel", "/usr/local/Cellar/gortex/0.48.0/bin/gortex", InstallBrew, "brew upgrade gortex"},
{"scoop_windows", `C:\Users\x\scoop\apps\gortex\current\gortex.exe`, InstallScoop, "scoop update gortex"},
{"go_install", "/Users/x/go/bin/gortex", InstallGoInstall, "go install github.com/zzet/gortex/cmd/gortex@latest"},
{"installer_script", "/Users/x/.local/bin/gortex", InstallScript, "curl -fsSL https://get.gortex.dev | sh"},
{"unknown_system", "/usr/bin/gortex", InstallUnknown, ""},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
got := detectInstallMethod(c.path, goBin, home)
if got != c.want {
t.Errorf("detectInstallMethod(%q) = %q, want %q", c.path, got, c.want)
}
cmd, manual := upgradeInstructions(got, "")
if cmd != c.wantCmd {
t.Errorf("upgradeInstructions(%q) cmd = %q, want %q", got, cmd, c.wantCmd)
}
if (cmd == "") != manual {
t.Errorf("manual flag inconsistent with command for %q", got)
}
})
}
// A version pin flows into the go-install target.
if cmd, _ := upgradeInstructions(InstallGoInstall, "v0.49.0"); cmd != "go install github.com/zzet/gortex/cmd/gortex@v0.49.0" {
t.Errorf("pinned go install cmd = %q", cmd)
}
}
// TestUpgradeReleaseTagParse covers the /releases/latest redirect tag parse.
func TestUpgradeReleaseTagParse(t *testing.T) {
cases := map[string]string{
"https://github.com/zzet/gortex/releases/tag/v0.49.0": "v0.49.0",
"https://github.com/zzet/gortex/releases/tag/v1.0.0-rc1": "v1.0.0-rc1",
"https://github.com/zzet/gortex/releases/tag/v0.49.0?x=1": "v0.49.0",
"https://github.com/zzet/gortex/releases": "",
"": "",
}
for loc, want := range cases {
if got := tagFromReleaseLocation(loc); got != want {
t.Errorf("tagFromReleaseLocation(%q) = %q, want %q", loc, got, want)
}
}
}