public async Task <IEnumerable <Person> > Handle(GetPassengersRequest request, CancellationToken cancellationToken) { _validator.ValidateAndThrow(request); var flight = await _mediator.Send(new GetFlightByNumberRequest(request.Number)); return(_bookingRepository.GetAll() .Where(b => b.Flight.Id == flight.Id) .SelectMany(b => b.Passengers)); }
public ActionResult <List <PassengerDto> > GetFlightPassengers(string flightNumber) { var getPassengersRequest = new GetPassengersRequest { FlightNumber = flightNumber }; var passengers = _passengerService.GetPassengers(getPassengersRequest); if (passengers == null || !passengers.Any()) { return(NotFound($"Passengers of {flightNumber} flight are not found.")); } return(Ok(passengers)); }
public void GetAll_WhenGenderIsSet_ShouldReturnPassengersByGender() { // Arrange var getPassengersRequest = new GetPassengersRequest { Gender = Gender.Male }; var passengersByGender = new List <Person> { new Person { Id = 1, Name = "Test1", DateBirth = DateTime.Now.Date, Gender = GenderType.Male, Address = "TestAddress", Email = "*****@*****.**" }, new Person { Id = 2, Name = "Test2", DateBirth = DateTime.Now.Date, Gender = GenderType.Female, Address = "TestAddress", Email = "*****@*****.**" }, new Person { Id = 3, Name = "Test3", DateBirth = DateTime.Now.Date, Gender = GenderType.Male, Address = "TestAddress", Email = "*****@*****.**" } }; Mapper.Reset(); Mapper.Initialize(cfg => cfg.CreateMap <Person, PassengerDto>()); var malePassengers = Mapper.Map <List <Person>, List <PassengerDto> >(passengersByGender.Where(pas => pas.Gender == GenderType.Male).ToList()); var mockPersonRepository = new Mock <IRepository <Person> >(); var mockBookingRepository = new Mock <IRepository <Booking> >(); var mockFlightRepository = new Mock <IRepository <Flight> >(); mockPersonRepository.Setup(x => x.GetAll()).Returns(passengersByGender); var passengerService = new PassengerService(Mapper.Instance, mockPersonRepository.Object, mockBookingRepository.Object, mockFlightRepository.Object); // Act var passengers = passengerService.GetPassengers(getPassengersRequest); // Assert Assert.AreEqual(malePassengers.Count, passengers.Count); Assert.AreEqual(malePassengers.Select(pas => pas.Id).ToList(), passengers.Select(pas => pas.Id).ToList()); }
public void GetAll_WhenNoPassengers_ShouldThrowAppropriateException() { // Arrange var getPassengersRequest = new GetPassengersRequest(); Mapper.Reset(); Mapper.Initialize(cfg => cfg.CreateMap <Person, PassengerDto>()); var mockPersonRepository = new Mock <IRepository <Person> >(); var mockBookingRepository = new Mock <IRepository <Booking> >(); var mockFlightRepository = new Mock <IRepository <Flight> >(); mockPersonRepository.Setup(x => x.GetAll()).Returns((IEnumerable <Person>)null); var passengerService = new PassengerService(Mapper.Instance, mockPersonRepository.Object, mockBookingRepository.Object, mockFlightRepository.Object); // Act & Assert var exception = Assert.Throws <WingsOnNotFoundException>(() => passengerService.GetPassengers(getPassengersRequest)); Assert.AreEqual(exception.Message, "Passengers are not found."); }
public List <PassengerDto> GetPassengers(GetPassengersRequest getPassengersRequest) { var passengers = _personRepository.GetAll()?.ToList(); if (passengers == null || !passengers.Any()) { throw new WingsOnNotFoundException("Passengers are not found."); } if (getPassengersRequest.Gender != null) { passengers = passengers?.Where(person => person.Gender == (GenderType)getPassengersRequest.Gender)?.ToList(); } if (getPassengersRequest.FlightNumber != null) { var flightPassengersIds = PrepareFlightPassengers(getPassengersRequest.FlightNumber) ?.Select(person => person.Id).ToList(); passengers = passengers?.Where(person => flightPassengersIds.Contains(person.Id))?.ToList(); } return(_mapper.Map <List <Person>, List <PassengerDto> >(passengers)); }
public ActionResult <List <PassengerDto> > Get([FromQuery] GetPassengersRequest getPassengersRequest) { return(Ok(_passengerService.GetPassengers(getPassengersRequest))); }