(Chore): Added unit tests for cli.go

This commit is contained in:
2025-11-22 08:32:58 +00:00
parent 77587fb6b3
commit 0590ac9aa1

90
internal/cli/cli_test.go Normal file
View File

@@ -0,0 +1,90 @@
package cli
import (
"testing"
"zipprine/internal/models"
)
func TestParseArchiveType(t *testing.T) {
tests := []struct {
name string
input string
expected models.ArchiveType
}{
{"ZIP lowercase", "zip", models.ZIP},
{"ZIP uppercase", "ZIP", models.ZIP},
{"TAR", "tar", models.TAR},
{"TAR.GZ", "tar.gz", models.TARGZ},
{"TARGZ", "targz", models.TARGZ},
{"TGZ", "tgz", models.TARGZ},
{"GZIP", "gzip", models.GZIP},
{"GZ", "gz", models.GZIP},
{"RAR", "rar", models.RAR},
{"RAR uppercase", "RAR", models.RAR},
{"AUTO", "auto", models.AUTO},
{"Unknown defaults to ZIP", "unknown", models.ZIP},
{"Empty defaults to ZIP", "", models.ZIP},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := parseArchiveType(tt.input)
if result != tt.expected {
t.Errorf("parseArchiveType(%q) = %v; want %v", tt.input, result, tt.expected)
}
})
}
}
func TestParseArchiveTypeCaseInsensitive(t *testing.T) {
// Test that parsing is case-insensitive
inputs := []string{"zip", "ZIP", "Zip", "ZiP"}
for _, input := range inputs {
result := parseArchiveType(input)
if result != models.ZIP {
t.Errorf("parseArchiveType(%q) = %v; want %v", input, result, models.ZIP)
}
}
}
func TestParseArchiveTypeAllFormats(t *testing.T) {
// Ensure all supported formats are handled
formats := map[string]models.ArchiveType{
"zip": models.ZIP,
"tar": models.TAR,
"tar.gz": models.TARGZ,
"gzip": models.GZIP,
"rar": models.RAR,
"auto": models.AUTO,
}
for input, expected := range formats {
result := parseArchiveType(input)
if result != expected {
t.Errorf("parseArchiveType(%q) = %v; want %v", input, result, expected)
}
}
}
func TestParseArchiveTypeTarGzVariants(t *testing.T) {
// Test all variants of TAR.GZ
variants := []string{"tar.gz", "targz", "tgz"}
for _, variant := range variants {
result := parseArchiveType(variant)
if result != models.TARGZ {
t.Errorf("parseArchiveType(%q) = %v; want %v", variant, result, models.TARGZ)
}
}
}
func TestParseArchiveTypeGzipVariants(t *testing.T) {
// Test all variants of GZIP
variants := []string{"gzip", "gz"}
for _, variant := range variants {
result := parseArchiveType(variant)
if result != models.GZIP {
t.Errorf("parseArchiveType(%q) = %v; want %v", variant, result, models.GZIP)
}
}
}