blob: b26310ddf48dc15a303390fc1cb6b2c0f94174c6 [file] [edit]
// Copyright 2026 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 main
import (
"bytes"
"strings"
"testing"
"golang.org/x/pkgsite/cmd/internal/pkgsite-cli/client"
)
func TestFormatPackage(t *testing.T) {
var buf bytes.Buffer
formatPackage(&buf, packageResult{
Package: &client.Package{
PackageInfo: client.PackageInfo{
Path: "encoding/json",
Synopsis: "Package json implements encoding and decoding of JSON.",
},
ModulePath: "std",
Version: "go1.22.0",
IsStandardLibrary: true,
IsLatest: true,
},
})
out := buf.String()
for _, want := range []string{
"encoding/json (standard library)",
"Module: std",
"go1.22.0 (latest)",
"Package json",
} {
if !strings.Contains(out, want) {
t.Errorf("output missing %q:\n%s", want, out)
}
}
}
func TestFormatPackageWithExtras(t *testing.T) {
var buf bytes.Buffer
formatPackage(&buf, packageResult{
Package: &client.Package{
PackageInfo: client.PackageInfo{
Path: "github.com/foo/bar",
},
ModulePath: "github.com/foo/bar",
Version: "v1.0.0",
Imports: []string{"fmt", "strings"},
Licenses: []client.License{{Types: []string{"MIT"}, FilePath: "LICENSE"}},
},
Symbols: &client.PaginatedResponse[client.Symbol]{
Items: []client.Symbol{
{Name: "New", Kind: "func", Synopsis: "func New() *Bar"},
},
Total: 1,
},
ImportedBy: &client.PackageImportedBy{
ImportedBy: client.PaginatedResponse[string]{
Items: []string{"github.com/baz/qux"},
Total: 100,
},
},
})
out := buf.String()
for _, want := range []string{
"Imports:",
" fmt",
"Licenses:",
" MIT (LICENSE)",
"Symbols:",
" func New() *Bar",
"Imported by:",
" github.com/baz/qux",
"Showing 1 of 100",
} {
if !strings.Contains(out, want) {
t.Errorf("output missing %q:\n%s", want, out)
}
}
}
func TestFormatModule(t *testing.T) {
var buf bytes.Buffer
formatModule(&buf, moduleResult{
Module: &client.Module{
Path: "golang.org/x/text",
Version: "v0.14.0",
IsLatest: true,
HasGoMod: true,
IsRedistributable: true,
RepoURL: "https://github.com/golang/text",
},
})
out := buf.String()
for _, want := range []string{
"golang.org/x/text",
"v0.14.0 (latest)",
"https://github.com/golang/text",
"Has go.mod: yes",
"Redistributable: yes",
} {
if !strings.Contains(out, want) {
t.Errorf("output missing %q:\n%s", want, out)
}
}
}
func TestFormatModuleWithExtras(t *testing.T) {
var buf bytes.Buffer
formatModule(&buf, moduleResult{
Module: &client.Module{
Path: "golang.org/x/text",
Version: "v0.14.0",
Readme: &client.Readme{Filepath: "README.md", Contents: "# text"},
},
Versions: &client.PaginatedResponse[client.VersionResponse]{
Items: []client.VersionResponse{{Version: "v0.14.0"}, {Version: "v0.13.0"}},
Total: 2,
},
Vulns: &client.PaginatedResponse[client.Vulnerability]{
Items: []client.Vulnerability{{ID: "GO-2023-0001", Summary: "Bad thing", FixedVersion: "v0.14.0"}},
Total: 1,
},
Packages: &client.PaginatedResponse[client.ModulePackageResponse]{
Items: []client.ModulePackageResponse{{Path: "golang.org/x/text/language", Synopsis: "BCP 47 tags"}},
Total: 1,
},
})
out := buf.String()
for _, want := range []string{
"README (README.md):",
"# text",
"Versions:",
" v0.14.0",
"Vulnerabilities:",
" GO-2023-0001",
" Bad thing",
" Fixed in: v0.14.0",
"Packages:",
"golang.org/x/text/language",
} {
if !strings.Contains(out, want) {
t.Errorf("output missing %q:\n%s", want, out)
}
}
}
func TestFormatSearch(t *testing.T) {
var buf bytes.Buffer
formatSearch(&buf, &client.PaginatedResponse[client.SearchResult]{
Items: []client.SearchResult{{
PackagePath: "encoding/json",
ModulePath: "std",
Version: "go1.22.0",
Synopsis: "Package json.",
}},
Total: 1,
})
out := buf.String()
if !strings.Contains(out, "encoding/json") {
t.Errorf("output missing package path:\n%s", out)
}
if !strings.Contains(out, "std@go1.22.0") {
t.Errorf("output missing module@version:\n%s", out)
}
}
func TestFormatSearchEmpty(t *testing.T) {
var buf bytes.Buffer
formatSearch(&buf, &client.PaginatedResponse[client.SearchResult]{})
if !strings.Contains(buf.String(), "No results") {
t.Errorf("expected 'No results' message, got:\n%s", buf.String())
}
}