Recognize local app states (T-202)
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user