mirror of
https://github.com/awalsh128/cache-apt-pkgs-action.git
synced 2025-09-09 04:37:38 +00:00
- Refactored README.md - Added workflows for version export and management. - Removed src directory, following Go best practices - Added COMMANDS.md documentation Saving the AI semi-slop for now with broken states to get a snapshot. Too lazy to setup another chained repo.
215 lines
5 KiB
Go
215 lines
5 KiB
Go
package pkgs
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestNewPackages(t *testing.T) {
|
|
p := NewPackages()
|
|
if p == nil {
|
|
t.Fatal("NewPackages() returned nil")
|
|
}
|
|
if p.Len() != 0 {
|
|
t.Errorf("NewPackages() returned non-empty Packages, got length %d", p.Len())
|
|
}
|
|
}
|
|
|
|
func TestNewPackagesFromStrings(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
pkgs []string
|
|
wantLen int
|
|
wantOrdered []string // expected order after sorting
|
|
}{
|
|
{
|
|
name: "Empty input",
|
|
pkgs: []string{},
|
|
wantLen: 0,
|
|
wantOrdered: []string{},
|
|
},
|
|
{
|
|
name: "Single package",
|
|
pkgs: []string{"xdot=1.3-1"},
|
|
wantLen: 1,
|
|
wantOrdered: []string{"xdot=1.3-1"},
|
|
},
|
|
{
|
|
name: "Multiple packages unsorted",
|
|
pkgs: []string{"zlib=1.2.3", "xdot=1.3-1", "apt=2.0.0"},
|
|
wantLen: 3,
|
|
wantOrdered: []string{"apt=2.0.0", "xdot=1.3-1", "zlib=1.2.3"},
|
|
},
|
|
{
|
|
name: "Duplicate packages",
|
|
pkgs: []string{"xdot=1.3-1", "xdot=1.3-1", "apt=2.0.0"},
|
|
wantLen: 2,
|
|
wantOrdered: []string{"apt=2.0.0", "xdot=1.3-1"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
p := NewPackagesFromStrings(tt.pkgs...)
|
|
|
|
// Test Len()
|
|
if got := p.Len(); got != tt.wantLen {
|
|
t.Errorf("Len() = %v, want %v", got, tt.wantLen)
|
|
}
|
|
|
|
// Test Get() and verify order
|
|
for i := 0; i < p.Len(); i++ {
|
|
if i >= len(tt.wantOrdered) {
|
|
t.Errorf(
|
|
"Too many packages in result, extra package at index %d: %s",
|
|
i,
|
|
p.Get(i),
|
|
)
|
|
continue
|
|
}
|
|
if got := p.Get(i); got != tt.wantOrdered[i] {
|
|
t.Errorf("Get(%d) = %v, want %v", i, got, tt.wantOrdered[i])
|
|
}
|
|
}
|
|
|
|
// Test String()
|
|
wantString := ""
|
|
if len(tt.wantOrdered) > 0 {
|
|
for i, pkg := range tt.wantOrdered {
|
|
if i > 0 {
|
|
wantString += ","
|
|
}
|
|
wantString += pkg
|
|
}
|
|
}
|
|
if got := p.String(); got != wantString {
|
|
t.Errorf("String() = %v, want %v", got, wantString)
|
|
}
|
|
|
|
// Test StringArray()
|
|
gotArray := p.StringArray()
|
|
if len(gotArray) != len(tt.wantOrdered) {
|
|
t.Errorf("StringArray() length = %v, want %v", len(gotArray), len(tt.wantOrdered))
|
|
} else {
|
|
for i, want := range tt.wantOrdered {
|
|
if gotArray[i] != want {
|
|
t.Errorf("StringArray()[%d] = %v, want %v", i, gotArray[i], want)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPackages_Add(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
initial []string
|
|
toAdd []string
|
|
wantOrdered []string
|
|
}{
|
|
{
|
|
name: "Add to empty",
|
|
initial: []string{},
|
|
toAdd: []string{"xdot=1.3-1"},
|
|
wantOrdered: []string{"xdot=1.3-1"},
|
|
},
|
|
{
|
|
name: "Add multiple maintaining order",
|
|
initial: []string{"apt=2.0.0"},
|
|
toAdd: []string{"zlib=1.2.3", "xdot=1.3-1"},
|
|
wantOrdered: []string{"apt=2.0.0", "xdot=1.3-1", "zlib=1.2.3"},
|
|
},
|
|
{
|
|
name: "Add duplicate",
|
|
initial: []string{"xdot=1.3-1"},
|
|
toAdd: []string{"xdot=1.3-1"},
|
|
wantOrdered: []string{"xdot=1.3-1"},
|
|
},
|
|
{
|
|
name: "Add same package different version",
|
|
initial: []string{"xdot=1.3-1"},
|
|
toAdd: []string{"xdot=1.3-2"},
|
|
wantOrdered: []string{"xdot=1.3-1", "xdot=1.3-2"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
p := NewPackagesFromStrings(tt.initial...)
|
|
|
|
// Add packages one by one to test Add method
|
|
for _, pkg := range tt.toAdd {
|
|
p.Add(pkg)
|
|
}
|
|
|
|
// Verify length
|
|
if got := p.Len(); got != len(tt.wantOrdered) {
|
|
t.Errorf("After Add(), Len() = %v, want %v", got, len(tt.wantOrdered))
|
|
}
|
|
|
|
// Verify order using Get
|
|
for i := 0; i < p.Len(); i++ {
|
|
if got := p.Get(i); got != tt.wantOrdered[i] {
|
|
t.Errorf("After Add(), Get(%d) = %v, want %v", i, got, tt.wantOrdered[i])
|
|
}
|
|
}
|
|
|
|
// Verify Contains for all added packages
|
|
for _, pkg := range tt.toAdd {
|
|
if !p.Contains(pkg) {
|
|
t.Errorf("After Add(), Contains(%v) = false, want true", pkg)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPackages_Contains(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
packages []string
|
|
check string
|
|
want bool
|
|
}{
|
|
{
|
|
name: "Empty packages",
|
|
packages: []string{},
|
|
check: "xdot=1.3-1",
|
|
want: false,
|
|
},
|
|
{
|
|
name: "Package exists",
|
|
packages: []string{"apt=2.0.0", "xdot=1.3-1"},
|
|
check: "xdot=1.3-1",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "Package exists (different order)",
|
|
packages: []string{"xdot=1.3-1", "apt=2.0.0"},
|
|
check: "apt=2.0.0",
|
|
want: true,
|
|
},
|
|
{
|
|
name: "Package doesn't exist",
|
|
packages: []string{"xdot=1.3-1", "apt=2.0.0"},
|
|
check: "nonexistent=1.0",
|
|
want: false,
|
|
},
|
|
{
|
|
name: "Similar package different version",
|
|
packages: []string{"xdot=1.3-1"},
|
|
check: "xdot=1.3-2",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
p := NewPackagesFromStrings(tt.packages...)
|
|
if got := p.Contains(tt.check); got != tt.want {
|
|
t.Errorf("Contains(%v) = %v, want %v", tt.check, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|