Files
awesome-docker/internal/cache/cache_test.go
2026-02-28 01:31:37 +01:00

138 lines
3.2 KiB
Markdown

package cache
import (
"os"
"path/filepath"
"testing"
"time"
)
func TestLoadExcludeList(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "exclude.yaml")
content := `domains:
- https://example.com
- https://test.org
`
if err := os.WriteFile(path, []byte(content), 0o644); err != nil {
t.Fatal(err)
}
excl, err := LoadExcludeList(path)
if err != nil {
t.Fatal(err)
}
if len(excl.Domains) != 2 {
t.Errorf("domains count = %d, want 2", len(excl.Domains))
}
if !excl.IsExcluded("https://example.com/foo") {
t.Error("expected https://example.com/foo to be excluded")
}
if excl.IsExcluded("https://other.com") {
t.Error("expected https://other.com to NOT be excluded")
}
}
func TestHealthCacheRoundTrip(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "health.yaml")
original := &HealthCache{
Entries: []HealthEntry{
{
URL: "https://github.com/example/repo",
Name: "Example",
Status: "healthy",
Stars: 42,
LastPush: time.Date(2026, 1, 15, 0, 0, 0, 0, time.UTC),
HasLicense: true,
HasReadme: true,
CheckedAt: time.Date(2026, 2, 27, 9, 0, 0, 0, time.UTC),
},
},
}
if err := SaveHealthCache(path, original); err != nil {
t.Fatal(err)
}
loaded, err := LoadHealthCache(path)
if err != nil {
t.Fatal(err)
}
if len(loaded.Entries) != 1 {
t.Fatalf("entries = %d, want 1", len(loaded.Entries))
}
if loaded.Entries[0].Stars != 42 {
t.Errorf("stars = %d, want 42", loaded.Entries[0].Stars)
}
}
func TestLoadHealthCacheMissing(t *testing.T) {
hc, err := LoadHealthCache("/nonexistent/path.yaml")
if err != nil {
t.Fatal(err)
}
if len(hc.Entries) != 0 {
t.Errorf("entries = %d, want 0 for missing file", len(hc.Entries))
}
}
func TestLoadHealthCacheInvalidYAML(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "health.yaml")
if err := os.WriteFile(path, []byte("entries:\n - url: [not yaml"), 0o644); err != nil {
t.Fatal(err)
}
hc, err := LoadHealthCache(path)
if err == nil {
t.Fatal("expected error for invalid YAML")
}
if hc != nil {
t.Fatal("expected nil cache on invalid YAML")
}
}
func TestMerge(t *testing.T) {
hc := &HealthCache{
Entries: []HealthEntry{
{URL: "https://github.com/a/a", Name: "A", Stars: 10},
{URL: "https://github.com/b/b", Name: "B", Stars: 20},
},
}
hc.Merge([]HealthEntry{
{URL: "https://github.com/b/b", Name: "B", Stars: 25}, // update
{URL: "https://github.com/c/c", Name: "C", Stars: 30}, // new
})
if len(hc.Entries) != 3 {
t.Fatalf("entries = %d, want 3", len(hc.Entries))
}
// B should be updated
if hc.Entries[1].Stars != 25 {
t.Errorf("B stars = %d, want 25", hc.Entries[1].Stars)
}
// C should be appended
if hc.Entries[2].Name != "C" {
t.Errorf("last entry = %q, want C", hc.Entries[2].Name)
}
}
func TestMergeDeduplicatesIncomingBatch(t *testing.T) {
hc := &HealthCache{}
hc.Merge([]HealthEntry{
{URL: "https://github.com/c/c", Name: "C", Stars: 1},
{URL: "https://github.com/c/c", Name: "C", Stars: 2},
})
if len(hc.Entries) != 1 {
t.Fatalf("entries = %d, want 1", len(hc.Entries))
}
if hc.Entries[0].Stars != 2 {
t.Fatalf("stars = %d, want last value 2", hc.Entries[0].Stars)
}
}