Exemplo n.º 1
0
        public async Task <ReservationOffer> GetReservationOffer(ReservationOfferRequest request)
        {
            Show show = await _ctx.Shows.Include(s => s.Reservations).FirstOrDefaultAsync(s => s.Id == request.ShowId);

            if (IsAnyPlaceReservedAlready(request, show))
            {
                throw new Exception($"One or more of requested places are already reserved.");
            }

            Dictionary <Ticket, int> requestedTickets = request.Places.GroupBy(x => x.Ticket).ToDictionary(x => x.Key, x => x.Count());
            decimal price = show.EvaluateReservationPrice(requestedTickets);

            return(new ReservationOffer()
            {
                OfferRequest = request,
                Price = price
            });
        }
        public async Task ThenTheCostOfReservationIsPLN(decimal price)
        {
            ReservationOfferRequest request = new ReservationOfferRequest
            {
                ShowId = _selectedShowId,
                Places = _selectedPlaces
            };
            var query = $"/api/reservations/offer?Showid={_selectedShowId}";

            for (int i = 0; i < _selectedPlaces.Count; i++)
            {
                query += $"&Places[{i}].Ticket={_selectedPlaces[i].Ticket}";
                query += $"&Places[{i}].Row={_selectedPlaces[i].Row}";
                query += $"&Places[{i}].Seat={_selectedPlaces[i].Seat}";
            }

            HttpResponseMessage response = await Client.GetAsync(query);

            string responseContent = await response.Content.ReadAsStringAsync();

            _generatedOffer = JsonConvert.DeserializeObject <ReservationOffer>(responseContent);
            _generatedOffer.OfferRequest.Should().BeEquivalentTo(request);
            _generatedOffer.Price.Should().Be(price);
        }
Exemplo n.º 3
0
        public async Task <ActionResult <ReservationOffer> > GetOffer([FromQuery] ReservationOfferRequest model)
        {
            ReservationOffer offer = await _reservationQuerier.GetReservationOffer(model);

            return(Ok(offer));
        }
Exemplo n.º 4
0
 private static bool IsAnyPlaceReservedAlready(ReservationOfferRequest request, Show show)
 {
     return(request.Places.Any(p => show.IsPlaceReserved(p.Row, p.Seat)));
 }