82 lines
2.7 KiB
Go
82 lines
2.7 KiB
Go
package mcf
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func result(v string) *string { return &v }
|
|
|
|
func TestMaintenanceCheckFlightState(t *testing.T) {
|
|
now := time.Now()
|
|
cases := []struct {
|
|
name string
|
|
row *MaintenanceCheckFlight
|
|
wantComplete bool
|
|
wantCleared bool
|
|
wantPending bool
|
|
}{
|
|
{name: "nil", row: nil, wantComplete: false, wantCleared: false, wantPending: false},
|
|
{name: "draft (not flown)", row: &MaintenanceCheckFlight{}, wantComplete: false, wantCleared: false, wantPending: true},
|
|
// Once signed the MCF is done regardless of result — signing clears MCF status.
|
|
{name: "signed failed is done", row: &MaintenanceCheckFlight{CompletedAt: &now, Result: result(ResultFailed)}, wantComplete: true, wantCleared: true, wantPending: false},
|
|
{name: "signed passed is done", row: &MaintenanceCheckFlight{CompletedAt: &now, Result: result(ResultPassed)}, wantComplete: true, wantCleared: true, wantPending: false},
|
|
{name: "result set without completedAt still pending", row: &MaintenanceCheckFlight{Result: result(ResultFailed)}, wantComplete: false, wantCleared: false, wantPending: true},
|
|
// A draft edited with result=passed but NOT yet signed must NOT clear the aircraft.
|
|
{name: "passed result on unsigned draft is NOT cleared", row: &MaintenanceCheckFlight{Result: result(ResultPassed)}, wantComplete: false, wantCleared: false, wantPending: true},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := tc.row.IsComplete(); got != tc.wantComplete {
|
|
t.Errorf("IsComplete() = %v, want %v", got, tc.wantComplete)
|
|
}
|
|
if got := tc.row.IsCleared(); got != tc.wantCleared {
|
|
t.Errorf("IsCleared() = %v, want %v", got, tc.wantCleared)
|
|
}
|
|
if got := tc.row.IsPending(); got != tc.wantPending {
|
|
t.Errorf("IsPending() = %v, want %v", got, tc.wantPending)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsValidResult(t *testing.T) {
|
|
cases := []struct {
|
|
in string
|
|
want bool
|
|
}{
|
|
{ResultPassed, true},
|
|
{ResultFailed, true},
|
|
{"partial", false},
|
|
{"", false},
|
|
{"PASSED", false},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.in, func(t *testing.T) {
|
|
if got := IsValidResult(tc.in); got != tc.want {
|
|
t.Fatalf("IsValidResult(%q) = %v, want %v", tc.in, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMCFTableNameAndBeforeCreate(t *testing.T) {
|
|
if (MaintenanceCheckFlight{}).TableName() != "maintenance_check_flights" {
|
|
t.Fatalf("unexpected table name")
|
|
}
|
|
m := &MaintenanceCheckFlight{}
|
|
if err := m.BeforeCreate(nil); err != nil {
|
|
t.Fatalf("BeforeCreate err: %v", err)
|
|
}
|
|
if len(m.ID) == 0 {
|
|
t.Fatal("BeforeCreate should set ID")
|
|
}
|
|
prev := string(m.ID)
|
|
if err := m.BeforeCreate(nil); err != nil {
|
|
t.Fatalf("BeforeCreate err: %v", err)
|
|
}
|
|
if string(m.ID) != prev {
|
|
t.Fatal("BeforeCreate must not overwrite an existing ID")
|
|
}
|
|
}
|