blob: f3c9301e1e1c30dfe02b6396ddb56b86fbb0cecc [file] [log] [blame]
// Copyright 2019 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 frontend
import (
"context"
"fmt"
"testing"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/postgres"
"golang.org/x/pkgsite/internal/source"
"golang.org/x/pkgsite/internal/testing/sample"
)
func TestLatestMinorVersion(t *testing.T) {
defer postgres.ResetTestDB(testDB, t)
var persistedModules = []testModule{
{
path: "github.com/mymodule/av1module",
redistributable: true,
versions: []string{"v1.0.0", "v1.0.1"},
packages: []testPackage{
{
suffix: "bar",
readmeContents: sample.ReadmeContents,
readmeFilePath: sample.ReadmeFilePath,
},
},
},
}
tt := []struct {
name string
fullPath string
modulePath string
wantMinorVersion string
wantErr error
}{
{
name: "package",
fullPath: "github.com/mymodule/av1module/bar",
modulePath: "github.com/mymodule/av1module",
wantMinorVersion: "v1.0.1",
},
{
name: "module",
fullPath: "github.com/mymodule/av1module",
modulePath: "github.com/mymodule/av1module",
wantMinorVersion: "v1.0.1",
},
{
name: "module does not exist",
fullPath: "github.com/mymodule/doesnotexist",
modulePath: internal.UnknownModulePath,
wantErr: fmt.Errorf("error while retriving minor version"),
},
}
ctx := context.Background()
insertTestModules(ctx, t, persistedModules)
svr := &Server{getDataSource: func(context.Context) internal.DataSource { return testDB }}
for _, tc := range tt {
t.Run(tc.name, func(t *testing.T) {
got := svr.GetLatestInfo(ctx, tc.fullPath, tc.modulePath, nil)
if got.MinorVersion != tc.wantMinorVersion {
t.Fatalf("got %q, want %q", tc.wantMinorVersion, got.MinorVersion)
}
})
}
}
func insertTestModules(ctx context.Context, t *testing.T, mods []testModule) {
for _, mod := range mods {
var (
suffixes []string
pkgs = make(map[string]testPackage)
)
for _, pkg := range mod.packages {
suffixes = append(suffixes, pkg.suffix)
pkgs[pkg.suffix] = pkg
}
for _, ver := range mod.versions {
m := sample.Module(mod.path, ver, suffixes...)
m.SourceInfo = source.NewGitHubInfo(sample.RepositoryURL, "", ver)
m.IsRedistributable = mod.redistributable
if !m.IsRedistributable {
m.Licenses = nil
}
for _, u := range m.Units {
if pkg, ok := pkgs[internal.Suffix(u.Path, m.ModulePath)]; ok {
if pkg.name != "" {
u.Name = pkg.name
}
if pkg.readmeContents != "" {
u.Readme = &internal.Readme{
Contents: pkg.readmeContents,
Filepath: pkg.readmeFilePath,
}
}
if pkg.docs != nil {
u.Documentation = pkg.docs
}
}
if !mod.redistributable {
u.IsRedistributable = false
u.Licenses = nil
u.Documentation = nil
u.Readme = nil
}
}
postgres.MustInsertModule(ctx, t, testDB, m)
}
}
}