124 lines
3.4 KiB
Go
124 lines
3.4 KiB
Go
package flightdata
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
missiondomain "wucher/internal/domain/mission"
|
|
)
|
|
|
|
func TestIsComplete(t *testing.T) {
|
|
if IsComplete(nil) {
|
|
t.Fatal("expected nil row to be incomplete")
|
|
}
|
|
if IsComplete(&FlightData{Status: StatusInProgress}) {
|
|
t.Fatal("expected on_progress status to be incomplete")
|
|
}
|
|
if !IsComplete(&FlightData{Status: StatusCompleted}) {
|
|
t.Fatal("expected complete status to be complete")
|
|
}
|
|
}
|
|
|
|
func TestDeriveStatus(t *testing.T) {
|
|
now := time.Now().UTC()
|
|
base := &FlightData{
|
|
MissionID: []byte("1234567890123456"),
|
|
FromICAOID: []byte("3456789012345678"),
|
|
ToHospitalID: []byte("4567890123456789"),
|
|
FlightTakeOff: now,
|
|
FlightLanding: now,
|
|
FlightDuration: time.Hour,
|
|
LandingCount: 1,
|
|
DeliveryNoteNumber: "DN-1",
|
|
CustomerName: "Customer",
|
|
}
|
|
|
|
t.Run("cat complete", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "CAT"}
|
|
if got := DeriveStatus(base, nil); got != StatusCompleted {
|
|
t.Fatalf("expected complete, got %q", got)
|
|
}
|
|
})
|
|
|
|
t.Run("nco complete without rotor brake cycle", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "NCO"}
|
|
if got := DeriveStatus(base, nil); got != StatusCompleted {
|
|
t.Fatalf("expected complete, got %q", got)
|
|
}
|
|
})
|
|
|
|
t.Run("hems requires rotor brake cycle", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "HEMS"}
|
|
if got := DeriveStatus(base, nil); got != StatusInProgress {
|
|
t.Fatalf("expected on_progress, got %q", got)
|
|
}
|
|
base.RotorBrakeCycle = 1
|
|
if got := DeriveStatus(base, nil); got != StatusCompleted {
|
|
t.Fatalf("expected complete after rotor brake cycle is set, got %q", got)
|
|
}
|
|
base.RotorBrakeCycle = 0
|
|
})
|
|
|
|
t.Run("spo complete without details", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "SPO"}
|
|
if got := DeriveStatus(base, nil); got != StatusCompleted {
|
|
t.Fatalf("expected complete, got %q", got)
|
|
}
|
|
})
|
|
|
|
t.Run("spo complete with details", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "SPO"}
|
|
details := &SPODetails{
|
|
HESLO: SPOHESLODetails{
|
|
Flights: []SPOHESLOFlight{{
|
|
ROT: 1,
|
|
FuelTruckID: []byte("5678901234567890"),
|
|
LoggingSlingID: []byte("6789012345678901"),
|
|
}},
|
|
Slings: []SPOHESLOSling{{
|
|
HESLOFlightID: []byte("5678901234567890"),
|
|
SlingID: []byte("7890123456789012"),
|
|
}},
|
|
},
|
|
Logging: SPOLoggingDetails{
|
|
Slings: []SPOLoggingSling{{
|
|
SlingID: []byte("8901234567890123"),
|
|
}},
|
|
},
|
|
HEC: SPOHECDetails{
|
|
Flights: []SPOHECFlight{{
|
|
ROT: 1,
|
|
HECCycle: 1,
|
|
EquipmentID: []byte("9012345678901234"),
|
|
}},
|
|
Slings: []SPOHECSling{{
|
|
SlingID: []byte("0123456789012345"),
|
|
}},
|
|
Loads: []SPOHECLoad{{
|
|
LoadCategory: "LT200",
|
|
Quantity: 1,
|
|
}},
|
|
},
|
|
}
|
|
if got := DeriveStatus(base, details); got != StatusCompleted {
|
|
t.Fatalf("expected complete, got %q", got)
|
|
}
|
|
})
|
|
|
|
t.Run("spo missing section still complete", func(t *testing.T) {
|
|
base.Mission = &missiondomain.Mission{Type: "SPO"}
|
|
details := &SPODetails{
|
|
HESLO: SPOHESLODetails{
|
|
Flights: []SPOHESLOFlight{{
|
|
ROT: 1,
|
|
FuelTruckID: []byte("5678901234567890"),
|
|
LoggingSlingID: []byte("6789012345678901"),
|
|
}},
|
|
},
|
|
}
|
|
if got := DeriveStatus(base, details); got != StatusCompleted {
|
|
t.Fatalf("expected complete, got %q", got)
|
|
}
|
|
})
|
|
}
|