public async Task Reserve_seats_on_2_coaches_When_resereved_seats_exeed_coach_capacity()
        {
            var seatRequested          = new SeatsRequested(2);
            var trainId                = new TrainId("express_2000");
            var bookingReferenceNumber = "10";

            var bookingReferenceAdapter = Substitute.For <IBookingReference>();

            bookingReferenceAdapter.GetBookingReference().Returns(Task.FromResult(bookingReferenceNumber));

            var trainDataServiceAdapter = Substitute.For <ITrainDataService>();

            trainDataServiceAdapter.GetTrain(trainId).Returns(Task.FromResult(new Train(trainId, TrainDataAdapter.AdaptTrainTopology("{\"seats\": {" + TrainHelper.BuildCoachJson("A", 10, numberOfReservedSeat: 6) + "," + TrainHelper.BuildCoachJson("B", 10, numberOfReservedSeat: 6) + "}}"))));
            var manager = new TicketOfficeService(trainDataServiceAdapter, bookingReferenceAdapter);

            IProvideReservation hexagon = new TicketOfficeService(trainDataServiceAdapter, bookingReferenceAdapter);

            var seatReservationAdapter = new SeatReservationAdapter(hexagon);
            var reservationRequestDto  = new ReservationRequestDto {
                train_id = trainId.ToString(), number_of_seats = seatRequested.Value
            };

            var jsonResult = await seatReservationAdapter.PostSeatsRequest(reservationRequestDto);

            Check.That(jsonResult).IsEqualTo($"{{\"train_id\": \"{trainId}\", \"booking_reference\": \"10\", \"seats\": [\"7A\", \"7B\"]}}");
        }
예제 #2
0
        public void Should_Insert_ANewItem()
        {
            ReservationRequestDto dto = new ReservationRequestDto()
            {
                NUMERO = "12190"
            };
            IReservationRequest reservationRequest = new ReservationRequest(dto);

            bool        isRegistered       = false;
            DataPayLoad currentDataPayLoad = null;
            var         requestService     = new Mock <IReservationRequestDataService>();

            requestService.Setup(x => x.GetNewDo(It.IsAny <string>())).Returns(reservationRequest);

            _eventManager.Setup(x => x.NotifyToolBar(It.IsAny <DataPayLoad>())).Callback <DataPayLoad>(x =>
            {
                isRegistered       = x.PayloadType == DataPayLoad.Type.RegistrationPayload;
                currentDataPayLoad = x;
            });
            _dataServices.Setup(x => x.GetReservationRequestDataService()).Returns(requestService.Object);
            var reservationRequestsView = new ReservationRequestsViewModel(_dataServices.Object, _interacionController.Object, _dialogService.Object, _eventManager.Object, _navigator.Object, null, null);

            // now i should arrange a new id and send to the reservation request view model.
            DataPayLoad payload = new DataPayLoad();

            payload.PayloadType   = DataPayLoad.Type.Insert;
            payload.DataObject    = reservationRequest;
            payload.HasDataObject = true;
            reservationRequestsView.IncomingPayload(payload);
            Assert.AreEqual(reservationRequestsView.DataObject.NUMERO, dto.NUMERO);
        }
예제 #3
0
 public ReservationRequest(ReservationRequestDto dto)
 {
     this._dto            = dto;
     this._group          = new List <VehicleGroupDto>();
     this._client         = new List <ClientSummaryExtended>();
     this._reseller       = new List <ResellerDto>();
     this._fare           = new List <FareDto>();
     this._vehicleSummary = new List <VehicleSummaryDto>();
 }
예제 #4
0
        public async Task <string> PostSeatsRequest(ReservationRequestDto reservationRequestDto)
        {
            // Infra => Domain
            var trainId        = new TrainId(reservationRequestDto.train_id);
            var seatsRequested = new SeatsRequested(reservationRequestDto.number_of_seats);

            var reservation = await _hexagon.ReserveAsync(trainId, seatsRequested);

            // Domain => Infra
            return(AdaptReservation(reservation));
        }
예제 #5
0
        public IReservationRequest GetNewDo(string value)
        {
            var newDto = new ReservationRequestDto();

            newDto.Code   = value;
            newDto.IsNew  = true;
            newDto.NUMERO = value;
            var reservationRequest = new ReservationRequest(newDto);

            return(reservationRequest);
        }
예제 #6
0
        public async Task Should_Show_AnItem()
        {
            var dto = new ReservationRequestDto();

            // i prepare data with real data from the database.

            using (var conn = _sqlExecutor.OpenNewDbConnection())
            {
                var entity = await conn.GetRandomEntityAsync <PETICION>().ConfigureAwait(false);

                dto.NUMERO    = entity.NUMERO;
                dto.MOPETI    = entity.MOPETI;
                dto.OBS1      = entity.OBS1;
                dto.NOMCLI    = entity.NOMCLI;
                dto.OFICINA   = entity.OFICINA;
                dto.ORIGEN    = 10; // internet
                dto.OTRO_VEHI = entity.OTRO_VEHI;
                dto.CATEGO    = entity.CATEGO;
            }
            var clientService  = _services.GetClientDataServices();
            var helperService  = _services.GetHelperDataServices();
            var vehicleService = _services.GetVehicleDataServices();

            var clientDto = await clientService.GetPagedSummaryDoAsync(1, 1);

            var grupos = await helperService.GetSingleMappedAsyncHelper <VehicleGroupDto, GRUPOS>(dto.CATEGO);

            var origen = await helperService.GetSingleMappedAsyncHelper <OrigenDto, ORIGEN>(dto.ORIGEN.Value.ToString());

            var reservation = new ReservationRequest(dto);

            reservation.ClientDto = reservation.ClientDto.Union(new List <ClientSummaryExtended>()
            {
                clientDto.FirstOrDefault()
            });
            reservation.GroupDto = reservation.GroupDto.Union(new List <VehicleGroupDto>()
            {
                grupos
            });
            DataPayLoad payload = new DataPayLoad();

            payload.PayloadType = DataPayLoad.Type.Show;
            payload.DataObject  = reservation;
            var reservationRequestsView = new ReservationRequestsViewModel(_dataServices.Object, _interacionController.Object, _dialogService.Object, _eventManager.Object, _navigator.Object, null, null);

            reservationRequestsView.IncomingPayload(payload);
            Assert.GreaterOrEqual(1, reservationRequestsView.ClientDto.Count());
            Assert.GreaterOrEqual(1, reservationRequestsView.GroupDto.Count());
            Assert.AreEqual(dto.NUMERO, reservationRequestsView.DataObject.NUMERO);
            Assert.AreEqual(dto.MOPETI, reservationRequestsView.DataObject.MOPETI);
        }
예제 #7
0
        public async Task <IEnumerable <MeetingRoom> > GetAvailableMeetingRooms(ReservationRequestDto request)
        {
            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();
                return(await connection.QueryAsync <MeetingRoom>(@"SELECT mr.Id MeetingRoomId, OfficeId, Capacity, NumberOfChairs
                FROM reservation.meetingRooms mr
                WHERE  NOT EXISTS ( SELECT * FROM reservation.reservations r
				WHERE r.MeetingRoomId = mr.Id  AND OfficeId = @OfficeId
				AND r.ReservationDate = @ReservationDate
				AND ((@STARTTIME BETWEEN r.StartTime AND r.EndTime)
				OR (@ENDTIME BETWEEN r.StartTime AND r.EndTime)) )"                ,
                                                                 new { request.OfficeId, request.ReservationDate, request.StartTime, request.EndTime }));
            }
        }
예제 #8
0
        public IHttpActionResult Post(ReservationRequestDto dto)
        {
            var validationMsg = _validator.Validate(dto);

            if (validationMsg != "")
            {
                return(this.BadRequest(validationMsg));
            }

            var r  = new Reservation(dto.Date, dto.Name, dto.Email, dto.Quantity);
            var id = _maîtreD.TryAccept(r);

            if (id == null)
            {
                return(this.StatusCode(HttpStatusCode.Forbidden));
            }

            return(this.Ok());
        }
예제 #9
0
        public async Task <ActionResult <IEnumerable <MeetingRoom> > > GetAvailableMeetingRooms(ReservationRequestDto requestDto)
        {
            var meetingRooms = await _reservationQueries.GetAvailableMeetingRooms(requestDto);

            return(Ok(meetingRooms));
        }
예제 #10
0
 public async Task<string> Post([FromBody]ReservationRequestDto reservationRequest, [FromServices] ITrainDataService trainDataService, IBookingReference bookingReference)
 {
     return await _seatReservationAdapter.PostSeatsRequest(reservationRequest);
 }
예제 #11
0
        public async Task <string> Post([FromBody] ReservationRequestDto reservationRequest)
        {
            var manager = new WebTicketManager();

            return(await manager.Reserve(reservationRequest.train_id, reservationRequest.number_of_seats));
        }