cache-apt-pkgs-action/internal/pkgs/packages_test.go
2025-10-04 22:17:11 -07:00

119 lines
2.9 KiB
Go

package pkgs
import (
"testing"
)
// Test constants - meaningful names without "test" prefix
const (
package1 = "zlib=1.2.3"
package2 = "rolldice=1.16-1build3"
package3 = "apt=2.0.0"
)
func TestPackagesNewPackages_referenceNil_executesFail(t *testing.T) {
if NewPackages() == nil {
t.Fatal("NewPackages() returned nil")
}
}
func TestPackagesNewPackages_containsPackages_executesFail(t *testing.T) {
if NewPackages().Len() != 0 {
t.Errorf("NewPackages() returned non-empty Packages, actual length %d", NewPackages().Len())
}
}
func TestPackagesNewPackagesFromStrings(t *testing.T) {
tests := []struct {
name string
pkgs []string
expectedLen int
expectedOrder []string // expected order after sorting
}{
{
name: "Empty input",
pkgs: []string{},
expectedLen: 0,
expectedOrder: []string{},
},
{
name: "Single package",
pkgs: []string{package1},
expectedLen: 1,
expectedOrder: []string{package1},
},
{
name: "Multiple packages unsorted",
pkgs: []string{package2, package1, package3}, // rolldice, zlib, apt
expectedLen: 3,
expectedOrder: []string{
package3,
package2,
package1,
}, // apt, rolldice, zlib (sorted by name)
},
{
name: "Duplicate packages",
pkgs: []string{package1, package1, package3},
expectedLen: 2,
expectedOrder: []string{package3, package1},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := NewPackagesFromStrings(tt.pkgs...)
// TestPackages Len()
if actual := p.Len(); actual != tt.expectedLen {
t.Errorf("Len() = %v, expected %v", actual, tt.expectedLen)
}
// TestPackages Get() and verify order
for i := 0; i < p.Len(); i++ {
if i >= len(tt.expectedOrder) {
t.Errorf(
"Too many packages in result, extra package at index %d: %s",
i,
p.Get(i),
)
continue
}
if actual := p.Get(i); actual.String() != tt.expectedOrder[i] {
t.Errorf("Get(%d) = %v, expected %v", i, actual, tt.expectedOrder[i])
}
}
// TestPackages String()
expectedString := ""
if len(tt.expectedOrder) > 0 {
for i, pkg := range tt.expectedOrder {
if i > 0 {
expectedString += " " // Use space separator to match implementation
}
expectedString += pkg
}
}
if actual := p.String(); actual != expectedString {
t.Errorf("String() = %v, expected %v", actual, expectedString)
}
// TestPackages StringArray()
actualArray := p.StringArray()
if len(actualArray) != len(tt.expectedOrder) {
t.Errorf(
"StringArray() length = %v, expected %v",
len(actualArray),
len(tt.expectedOrder),
)
} else {
for i, expected := range tt.expectedOrder {
if actualArray[i] != expected {
t.Errorf("StringArray()[%d] = %v, expected %v", i, actualArray[i], expected)
}
}
}
})
}
}