forked from steger/pr3-ws202526
117 lines
3.3 KiB
Go
117 lines
3.3 KiB
Go
package airport_test
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
"time"
|
|
|
|
"gitty.informatik.hs-mannheim.de/steger/pr3-code/go/06-airport/airport"
|
|
)
|
|
|
|
type FlightProviderStub struct {
|
|
}
|
|
|
|
func (fps FlightProviderStub) GetFlight(fn airport.FlightNumber) (airport.Flight, error) {
|
|
if fn == "LH123" {
|
|
return airport.Flight{"LH123", "FRA", airport.GateNumber(1), time.Now(), time.Now()}, nil
|
|
}
|
|
return airport.Flight{}, fmt.Errorf("unknown flight %v", fn)
|
|
}
|
|
|
|
var _ airport.FlightProvider = FlightProviderStub{}
|
|
|
|
func TestCheckin(t *testing.T) {
|
|
|
|
fp := FlightProviderStub{}
|
|
bps := BaggageProcessorSpy{}
|
|
sut := airport.NewCheckin(1*time.Millisecond, &fp, &bps)
|
|
go sut.Start()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
passenger airport.Passenger
|
|
expectErr bool
|
|
expectBaggage []airport.Baggage
|
|
expectBoardingpass *airport.BoardingPass
|
|
expectBPSBaggage []airport.Baggage
|
|
}{
|
|
{
|
|
name: "Valid passenger with valid flight",
|
|
passenger: airport.Passenger{
|
|
"Max Mustermann",
|
|
airport.Ticket{"Max Mustermann", "FRA", "LH123"},
|
|
nil,
|
|
[]airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
[]string{},
|
|
},
|
|
expectErr: false,
|
|
expectBaggage: []airport.Baggage{},
|
|
expectBoardingpass: &airport.BoardingPass{airport.Ticket{"Max Mustermann", "FRA", "LH123"}, airport.GateNumber(1)},
|
|
expectBPSBaggage: []airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
},
|
|
{
|
|
name: "Passenger with unknown flight",
|
|
passenger: airport.Passenger{
|
|
"John Doe",
|
|
airport.Ticket{"John Doe", "MUC", "LH999"},
|
|
nil,
|
|
[]airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
[]string{},
|
|
},
|
|
expectErr: true,
|
|
expectBaggage: []airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
expectBoardingpass: nil,
|
|
expectBPSBaggage: []airport.Baggage{},
|
|
},
|
|
{
|
|
name: "Passenger with wrong ticket",
|
|
passenger: airport.Passenger{
|
|
"Max Mustermann",
|
|
airport.Ticket{"Someone else", "FRA", "LH123"},
|
|
nil,
|
|
[]airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
[]string{},
|
|
},
|
|
expectErr: true,
|
|
expectBaggage: []airport.Baggage{{[]string{"Socks", "Shirts"}}},
|
|
expectBoardingpass: nil,
|
|
expectBPSBaggage: []airport.Baggage{},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
bps.Baggage = []BaggageSpyData{}
|
|
|
|
start := time.Now()
|
|
err := sut.Process(&tc.passenger)
|
|
|
|
if elapsed := time.Since(start); elapsed < 1*time.Millisecond {
|
|
t.Errorf("processing time too short: got %v, want at least 1ms", elapsed)
|
|
}
|
|
|
|
if (err != nil) != tc.expectErr {
|
|
t.Errorf("expected error: %v, got: %v", tc.expectErr, err != nil)
|
|
}
|
|
|
|
if !reflect.DeepEqual(tc.passenger.BoardingPass, tc.expectBoardingpass) {
|
|
t.Errorf("expected boarding pass: %v, got: %v", tc.expectBoardingpass, tc.passenger.BoardingPass)
|
|
}
|
|
|
|
if !reflect.DeepEqual(tc.passenger.Bags, tc.expectBaggage) {
|
|
t.Errorf("expected baggage: %v, got: %v", tc.expectBaggage, tc.passenger.Bags)
|
|
}
|
|
|
|
gotBPSBaggage := []airport.Baggage{}
|
|
for _, b := range bps.Baggage {
|
|
gotBPSBaggage = append(gotBPSBaggage, b.b)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotBPSBaggage, tc.expectBPSBaggage) {
|
|
t.Errorf("expected baggage processor baggage: %v, got: %v", tc.expectBPSBaggage, gotBPSBaggage)
|
|
}
|
|
})
|
|
}
|
|
}
|