package helicopter import "testing" func TestHelicopterEnforceAOGInactive(t *testing.T) { cases := []struct { name string airOnGround bool initActive bool want bool }{ {name: "aog forces inactive", airOnGround: true, initActive: true, want: false}, {name: "aog stays inactive", airOnGround: true, initActive: false, want: false}, {name: "not aog keeps manual active", airOnGround: false, initActive: true, want: true}, {name: "not aog keeps manual inactive", airOnGround: false, initActive: false, want: false}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { h := Helicopter{AirOnGround: tc.airOnGround, IsActive: tc.initActive} h.EnforceAOGInactive() if h.IsActive != tc.want { t.Fatalf("IsActive = %v, want %v", h.IsActive, tc.want) } }) } } func TestHelicopterDeriveStatus(t *testing.T) { cases := []struct { name string airOnGround bool mcf bool isInUse bool want string }{ {name: "available when idle", airOnGround: false, mcf: false, isInUse: false, want: StatusAvailable}, {name: "booked when in use", airOnGround: false, mcf: false, isInUse: true, want: StatusBooked}, {name: "mcf when mcf flagged", airOnGround: false, mcf: true, isInUse: false, want: StatusMCF}, {name: "mcf outranks booked", airOnGround: false, mcf: true, isInUse: true, want: StatusMCF}, {name: "aog when on ground", airOnGround: true, mcf: false, isInUse: false, want: StatusAOG}, {name: "aog outranks booked", airOnGround: true, mcf: false, isInUse: true, want: StatusAOG}, {name: "mcf outranks aog", airOnGround: true, mcf: true, isInUse: false, want: StatusMCF}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { h := Helicopter{AirOnGround: tc.airOnGround} if got := h.DeriveStatus(StatusInput{IsBook: tc.isInUse, IsMCF: tc.mcf}); got != tc.want { t.Fatalf("DeriveStatus() = %q, want %q", got, tc.want) } }) } }