blob: e6c967c2f234346afada117621f517f0a68dcdc0 [file] [log] [blame]
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package postgres
import (
"context"
"strconv"
"strings"
"testing"
"golang.org/x/pkgsite/internal/testing/sample"
)
func TestGetLatestMajorPathForV1Path(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), testTimeout*2)
defer cancel()
checkLatest := func(t *testing.T, versions []string, v1path string, version, suffix string) {
t.Helper()
gotPath, gotVer, err := testDB.GetLatestMajorPathForV1Path(ctx, v1path)
if err != nil {
t.Fatal(err)
}
want := sample.ModulePath
if suffix != "" {
want = want + "/" + suffix
}
var wantVer int
if version == "" {
wantVer = 1
} else {
wantVer, err = strconv.Atoi(strings.TrimPrefix(version, "v"))
if err != nil {
t.Fatal(err)
}
}
if gotPath != want || gotVer != wantVer {
t.Errorf("GetLatestMajorPathForV1Path(%q) = %q, %d, want %q, %d", v1path, gotPath, gotVer, want, wantVer)
}
}
for _, test := range []struct {
name, want string
versions []string
}{
{
"want highest major version",
"v11",
[]string{"", "v2", "v11"},
},
{
"only v1 version",
"",
[]string{""},
},
{
"no v1 version",
"v4",
[]string{"v4"},
},
} {
t.Run(test.name, func(t *testing.T) {
ResetTestDB(testDB, t)
suffix := "a/b/c"
for _, v := range test.versions {
modpath := sample.ModulePath
if v != "" {
modpath = modpath + "/" + v
}
if v == "" {
v = sample.VersionString
} else {
v = v + ".0.0"
}
m := sample.Module(modpath, v, suffix)
if err := testDB.InsertModule(ctx, m); err != nil {
t.Fatal(err)
}
}
t.Run("module", func(t *testing.T) {
v1path := sample.ModulePath
checkLatest(t, test.versions, v1path, test.want, test.want)
})
t.Run("package", func(t *testing.T) {
want := test.want
if test.want != "" {
want += "/"
}
v1path := sample.ModulePath + "/" + suffix
checkLatest(t, test.versions, v1path, test.want, want+suffix)
})
})
}
}