package airport_test import ( "testing" "time" "gitty.informatik.hs-mannheim.de/steger/pr3-code/go/06-airport/airport" ) func TestSecurityCheck(t *testing.T) { sut := airport.NewSecurityCheck(1 * time.Millisecond) go sut.Start() testCases := []struct { name string passenger airport.Passenger expectErr bool }{ { name: "Valid passenger", passenger: airport.Passenger{ "Max Mustermann", airport.Ticket{"Max Mustermann", "FRA", "LH123"}, &airport.BoardingPass{airport.Ticket{"Max Mustermann", "FRA", "LH123"}, airport.GateNumber(1)}, []airport.Baggage{}, []string{"Laptop", "Hat"}, }, expectErr: false, }, { name: "Passenger without boarding pass", passenger: airport.Passenger{ "Max Mustermann", airport.Ticket{"Max Mustermann", "FRA", "LH123"}, nil, []airport.Baggage{}, []string{"Laptop", "Hat"}, }, expectErr: true, }, { name: "Passenger with wrong boarding pass", passenger: airport.Passenger{ "Max Mustermann", airport.Ticket{"Max Mustermann", "FRA", "LH123"}, &airport.BoardingPass{airport.Ticket{"Someone else", "FRA", "LH123"}, airport.GateNumber(1)}, []airport.Baggage{}, []string{"Laptop", "Hat"}, }, expectErr: true, }, { name: "Passenger with prohibited item", passenger: airport.Passenger{ "Max Mustermann", airport.Ticket{"Max Mustermann", "FRA", "LH123"}, &airport.BoardingPass{airport.Ticket{"Max Mustermann", "FRA", "LH123"}, airport.GateNumber(1)}, []airport.Baggage{}, []string{"Laptop", "Hat", "Knife"}, }, expectErr: true, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { 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) } }) } }