62 lines
2.6 KiB
Go
62 lines
2.6 KiB
Go
package tentacle
|
|
|
|
import "testing"
|
|
|
|
func TestVersionPrecedence(t *testing.T) {
|
|
ordered := []string{"1.0.0-alpha", "1.0.0-alpha.1", "1.0.0-alpha.beta", "1.0.0-beta", "1.0.0-beta.2", "1.0.0-beta.11", "1.0.0-rc.1", "1.0.0", "1.1", "2.0"}
|
|
for firstIndex, first := range ordered {
|
|
for secondIndex, second := range ordered {
|
|
newer, err := IsNewerVersion(first, second)
|
|
if err != nil || newer != (firstIndex > secondIndex) {
|
|
t.Fatalf("%s > %s: %v, %v", first, second, newer, err)
|
|
}
|
|
}
|
|
}
|
|
for _, pair := range [][2]string{{"v0.1", "0.1.0"}, {"1.0.0+build.2", "1.0.0+build.1"}, {"2026.11.01", "2026.11.1"}} {
|
|
for _, versions := range [][2]string{pair, {pair[1], pair[0]}} {
|
|
if newer, err := IsNewerVersion(versions[0], versions[1]); err != nil || newer {
|
|
t.Fatalf("equal precedence: %v: %v %v", versions, newer, err)
|
|
}
|
|
}
|
|
}
|
|
if newer, err := IsNewerVersion("999999999999999999999999999", "2"); err != nil || !newer {
|
|
t.Fatalf("large numeric component: %v %v", newer, err)
|
|
}
|
|
for _, invalid := range []string{"", "nightly", "1..0", "1.-2", "1.0-", "1.0-01", "1.0+", "1.0+foo+bar", "1.0-a_1"} {
|
|
if _, err := IsNewerVersion(invalid, "1.0"); err == nil {
|
|
t.Errorf("accepted invalid version %q", invalid)
|
|
}
|
|
if _, err := IsNewerVersion("2.0", invalid); err == nil {
|
|
t.Errorf("accepted invalid installed version %q", invalid)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAvailableUpdatesRequiresExactSource(t *testing.T) {
|
|
repository := Repository{URL: "https://example.org/tentacles", ID: "example.source", Tentacles: []Manifest{{ID: "echo", Name: "Echo", Version: "1.0"}}}
|
|
entry := Entry{Repository: repository.URL, RepositoryID: repository.ID, LocalID: "echo", Version: "1.0-rc.1"}
|
|
entry.ID = PackageID(repository, entry.LocalID)
|
|
snapshot := Snapshot{Entries: []EntryStatus{{Entry: entry}}, Repositories: []Repository{repository}}
|
|
updates := AvailableUpdates(snapshot)
|
|
if len(updates) != 1 || updates[0].ID != entry.ID || updates[0].AvailableVersion != "1.0" {
|
|
t.Fatalf("missing release update: %+v", updates)
|
|
}
|
|
for _, changed := range []string{"url", "repository-id", "local-id", "version"} {
|
|
candidate := snapshot
|
|
candidate.Repositories = CloneRepositories(snapshot.Repositories)
|
|
switch changed {
|
|
case "url":
|
|
candidate.Repositories[0].URL = "https://other.example.org/tentacles"
|
|
case "repository-id":
|
|
candidate.Repositories[0].ID = "example.replacement"
|
|
case "local-id":
|
|
candidate.Repositories[0].Tentacles[0].ID = "different"
|
|
case "version":
|
|
candidate.Repositories[0].Tentacles[0].Version = entry.Version
|
|
}
|
|
if updates := AvailableUpdates(candidate); len(updates) != 0 {
|
|
t.Errorf("%s offered unrelated or equal release: %+v", changed, updates)
|
|
}
|
|
}
|
|
}
|