Files
soft_quay/core/domain/status_resolver_test.go
T

91 lines
2.6 KiB
Go

package domain
import (
"errors"
"testing"
)
func TestResolveAppStatusCoversAllStates(t *testing.T) {
tests := []struct {
name string
facts AppStatusFacts
want AppStatus
}{
{name: "not installed", want: StatusNotInstalled},
{name: "queued", facts: AppStatusFacts{Operation: StatusQueued}, want: StatusQueued},
{name: "downloading", facts: AppStatusFacts{Operation: StatusDownloading}, want: StatusDownloading},
{name: "verifying", facts: AppStatusFacts{Operation: StatusVerifying}, want: StatusVerifying},
{name: "extracting", facts: AppStatusFacts{Operation: StatusExtracting}, want: StatusExtracting},
{name: "installing", facts: AppStatusFacts{Operation: StatusInstalling}, want: StatusInstalling},
{
name: "installed",
facts: AppStatusFacts{
InstalledVersion: "1.2.0",
CatalogVersion: "1.2.0",
},
want: StatusInstalled,
},
{
name: "update available",
facts: AppStatusFacts{
InstalledVersion: "1.2.0",
CatalogVersion: "1.3.0",
},
want: StatusUpdateAvailable,
},
{name: "running", facts: AppStatusFacts{Running: true}, want: StatusRunning},
{name: "failed", facts: AppStatusFacts{Operation: StatusFailed}, want: StatusFailed},
{
name: "rollback pending",
facts: AppStatusFacts{RecoveryPending: true},
want: StatusRollbackPending,
},
{
name: "incompatible",
facts: AppStatusFacts{Incompatible: true},
want: StatusIncompatible,
},
}
seen := make(map[AppStatus]bool)
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
status, err := ResolveAppStatus(test.facts)
if err != nil {
t.Fatalf("ResolveAppStatus() error = %v", err)
}
if status != test.want {
t.Fatalf("status = %q, want %q", status, test.want)
}
seen[status] = true
})
}
if len(seen) != 12 {
t.Fatalf("covered %d states, want 12", len(seen))
}
}
func TestResolveAppStatusPriorityAndValidation(t *testing.T) {
status, err := ResolveAppStatus(AppStatusFacts{
Operation: StatusDownloading,
Running: true,
RecoveryPending: true,
Incompatible: true,
})
if err != nil {
t.Fatalf("ResolveAppStatus() error = %v", err)
}
if status != StatusRollbackPending {
t.Fatalf("status = %q, want %q", status, StatusRollbackPending)
}
_, err = ResolveAppStatus(AppStatusFacts{Operation: StatusInstalled})
if !errors.Is(err, ErrInvalidStatusFacts) {
t.Fatalf("operation error = %v, want %v", err, ErrInvalidStatusFacts)
}
_, err = ResolveAppStatus(AppStatusFacts{InstalledVersion: "not-semver"})
if !errors.Is(err, ErrInvalidStatusFacts) {
t.Fatalf("version error = %v, want %v", err, ErrInvalidStatusFacts)
}
}