public void Should_ideally_left_70_percent_of_every_coach_available()
        {
            // setup mocks
            var firstBookingId  = "75bcd15";
            var secondBookingId = "9904fgG6";

            var bookingReferenceProvider = ConfigureABookingReferenceProviderMock(new[] { firstBookingId, secondBookingId });

            var trainId           = "express_2000";
            var trainDataProvider = new TrainDataServiceMock(TrainProviderHelper.GetTrainWith2CoachesAnd2IndividualSeatsAvailable(trainId));

            // act
            // First reservation
            var ticketOffice     = new TicketOffice(bookingReferenceProvider, trainDataProvider);
            var firstReservation = ticketOffice.MakeReservation(new ReservationRequest(trainId, 1));

            // Must be located in the remaining seat of 1st coach
            Check.That(firstReservation.TrainId).IsEqualTo(trainId);
            Check.That(firstReservation.BookingReference.Value).IsEqualTo(firstBookingId);
            Check.That(firstReservation.Seats).ContainsExactly(new Seat("A", 7));

            // Second reservation
            var secondReservation = ticketOffice.MakeReservation(new ReservationRequest(trainId, 1));

            // Must be located in the remaining seat of 1st coach
            Check.That(secondReservation.TrainId).IsEqualTo(trainId);
            Check.That(secondReservation.BookingReference.Value).IsEqualTo(secondBookingId);
            Check.That(secondReservation.Seats).ContainsExactly(new Seat("B", 7));
        }
        /// <summary>
        /// Acts like a composition root for the Hexagonal Architecture.
        /// </summary>
        public static IReserveTrainSeats ComposeTheHexagon(IProvideBookingReferences bookingReferenceProvider, IProvideTrainData trainDataProvider)
        {
            var ticketOffice = new TicketOffice(bookingReferenceProvider, trainDataProvider);

            var reservationAdapter = new CliReservationAdapter(ticketOffice);

            return(reservationAdapter);
        }
        public void Should_fail_to_reserve_when_asking_more_seats_than_the_70_percent_limit()
        {
            // setup mocks
            var expectedBookingId        = "75bcd15";
            var bookingReferenceProvider = ConfigureABookingReferenceProviderMock(expectedBookingId);

            var trainId           = "express_2000";
            var trainDataProvider = ConfigureATrainDataProviderMock(trainId, TrainProviderHelper.GetTrainWith1CoachAnd10SeatsAvailable(trainId));

            // act
            var ticketOffice = new TicketOffice(bookingReferenceProvider, trainDataProvider);
            var reservation  = ticketOffice.MakeReservation(new ReservationRequest(trainId, 9));

            Check.That(reservation.TrainId).IsEqualTo(trainId);
            Check.That(reservation.BookingReference.Value).IsEmpty();
            Check.That(reservation.Seats).IsEmpty();
        }
        public void Should_reserve_seats_when_unreserved_seats_are_available()
        {
            // setup mocks
            var expectedBookingId        = "75bcd15";
            var bookingReferenceProvider = ConfigureABookingReferenceProviderMock(expectedBookingId);

            var trainId           = "express_2000";
            var trainDataProvider = ConfigureATrainDataProviderMock(trainId, TrainProviderHelper.GetTrainWith1CoachAnd10SeatsAvailable(trainId));

            // act
            var ticketOffice = new TicketOffice(bookingReferenceProvider, trainDataProvider);
            var reservation  = ticketOffice.MakeReservation(new ReservationRequest(trainId, 3));

            Check.That(reservation.TrainId).IsEqualTo(trainId);
            Check.That(reservation.BookingReference.Value).IsEqualTo(expectedBookingId);
            Check.That(reservation.Seats).ContainsExactly(new Seat("A", 1), new Seat("A", 2), new Seat("A", 3));
        }
        public void Should_mark_seats_as_reserved_once_reserved()
        {
            // setup mocks
            var expectedBookingId        = "75bcd15";
            var bookingReferenceProvider = ConfigureABookingReferenceProviderMock(expectedBookingId);

            var trainId           = "express_2000";
            var trainDataProvider = ConfigureATrainDataProviderMock(trainId, TrainProviderHelper.GetTrainWith1CoachAnd10SeatsAvailable(trainId));

            // act
            var ticketOffice = new TicketOffice(bookingReferenceProvider, trainDataProvider);
            var reservation  = ticketOffice.MakeReservation(new ReservationRequest(trainId, 1));

            Check.That(reservation.TrainId).IsEqualTo(trainId);
            Check.That(reservation.BookingReference.Value).IsEqualTo(expectedBookingId);
            Check.That(reservation.Seats).ContainsExactly(new Seat("A", 1));

            // Check that the train data mock has been called to persist this reservation
            trainDataProvider.Received().MarkSeatsAsReserved(trainId, reservation.BookingReference, reservation.Seats);
        }
        public void Should_reserve_seats_in_the_same_coach()
        {
            // setup mocks
            var firstBookingId  = "75bcd15";
            var secondBookingId = "9904fgG6";

            var bookingReferenceProvider = ConfigureABookingReferenceProviderMock(new[] { firstBookingId, secondBookingId });

            var trainId           = "express_2000";
            var trainDataProvider = new TrainDataServiceMock(TrainProviderHelper.GetTrainWith2CoachesOf10And1Then2SeatsAvailable(trainId));

            // act
            var ticketOffice     = new TicketOffice(bookingReferenceProvider, trainDataProvider);
            var firstReservation = ticketOffice.MakeReservation(new ReservationRequest(trainId, 2));

            // Must be located in the remaining seats of the 2nd coach
            Check.That(firstReservation.TrainId).IsEqualTo(trainId);
            Check.That(firstReservation.BookingReference.Value).IsEqualTo(firstBookingId);
            Check.That(firstReservation.Seats).ContainsExactly(new Seat("B", 6), new Seat("B", 7));
        }
        public void Setup()
        {
            var trainData = new Mock <ISeat>();

            trainData.Setup(e => e.GetCoach("express_2000", "A")).Returns(Coach.Of(new List <Seat>()
            {
                Seat.Of("A", 1, "75bcd14"),
                Seat.Of("A", 2, "75bcd14"),
                Seat.Of("A", 3, "75bcd14"),
                Seat.Of("A", 4, "75bcd14"),
                Seat.Of("A", 5, ""),
                Seat.Of("A", 6, ""),
                Seat.Of("A", 7, ""),
                Seat.Of("A", 8, "")
            }));
            trainData.Setup(e => e.GetCoach("local_1000", "A")).Returns(Coach.Of(new List <Seat>()
            {
                Seat.Of("A", 1, ""),
                Seat.Of("A", 2, ""),
                Seat.Of("A", 3, ""),
                Seat.Of("A", 4, "")
            }));
            trainData.Setup(e => e.GetCoach("test_3000", "A")).Returns(Coach.Of(new List <Seat>()
            {
                Seat.Of("A", 1, "75bcd14"),
                Seat.Of("A", 2, "75bcd14"),
                Seat.Of("A", 3, "75bcd14"),
                Seat.Of("A", 4, "75bcd14")
            }));

            var reservationRegister = new Mock <IReservationRegister>();

            reservationRegister.Setup(e => e.Reserve(It.IsAny <Reservation>())).Returns(Result.WasSucces(null));

            var bookingReference = new Mock <IBookingReference>();

            bookingReference.Setup(e => e.GetBookingReference()).Returns("75bcd15");

            _ticketOffice = new TicketOffice(trainData.Object, reservationRegister.Object, bookingReference.Object);
        }
Пример #8
0
        public void TestMethod1()
        {
            // Arrange
            Ticket[] tickets = new Ticket[50];
            for (int i = 0; i < 50; i++)
            {
                tickets[i] = new Ticket();
            }

            int          officeProperty = 1000000;
            TicketOffice ticketOffice   = new TicketOffice(1000000, tickets);
            TicketSeller ticketSeller   = new TicketSeller(ticketOffice);
            Theater1     theater        = new Theater1(ticketSeller);

            int      audienceCash = 20000;
            Bag      bag          = new Bag(audienceCash);
            Audience jisoo        = new Audience(bag);

            // Act
            theater.Enter(jisoo);

            // Assert
            Assert.AreEqual(officeProperty + audienceCash, ticketOffice.Amount + jisoo.Amount);
        }
Пример #9
0
 public TicketSeller(TicketOffice ticketOffice) => this.ticketOffice = ticketOffice;
 public CliReservationAdapter(TicketOffice ticketOffice)
 {
     this.ticketOffice = ticketOffice;
 }
        public void Setup()
        {
            var trainData = new Mock <ISeat>();

            trainData.Setup(e => e.GetTrain("empty_train")).Returns(Train.Of(new List <Seat>()
            {
                Seat.Of("A", 1, ""),
                Seat.Of("A", 2, ""),
                Seat.Of("A", 3, ""),
                Seat.Of("A", 4, ""),
                Seat.Of("B", 1, ""),
                Seat.Of("B", 2, ""),
                Seat.Of("B", 3, ""),
                Seat.Of("B", 4, ""),
                Seat.Of("C", 1, ""),
                Seat.Of("C", 2, ""),
                Seat.Of("C", 3, ""),
                Seat.Of("C", 4, ""),
            }));

            trainData.Setup(e => e.GetTrain("1coachReserved_train")).Returns(Train.Of(new List <Seat>()
            {
                Seat.Of("A", 1, "75bcd14"),
                Seat.Of("A", 2, "75bcd14"),
                Seat.Of("A", 3, "75bcd14"),
                Seat.Of("A", 4, ""),
                Seat.Of("B", 1, ""),
                Seat.Of("B", 2, ""),
                Seat.Of("B", 3, ""),
                Seat.Of("B", 4, ""),
                Seat.Of("C", 1, ""),
                Seat.Of("C", 2, ""),
                Seat.Of("C", 3, ""),
                Seat.Of("C", 4, ""),
            }));

            trainData.Setup(e => e.GetTrain("FullyReserved_train")).Returns(Train.Of(new List <Seat>()
            {
                Seat.Of("A", 1, "75bcd14"),
                Seat.Of("A", 2, "75bcd14"),
                Seat.Of("A", 3, "75bcd14"),
                Seat.Of("A", 4, "75bcd14"),
                Seat.Of("B", 1, "75bcd14"),
                Seat.Of("B", 2, "75bcd14"),
                Seat.Of("B", 3, "75bcd14"),
                Seat.Of("B", 4, "75bcd14"),
                Seat.Of("C", 1, "75bcd14"),
                Seat.Of("C", 2, ""),
                Seat.Of("C", 3, ""),
                Seat.Of("C", 4, ""),
            }));

            var reservationRegister = new Mock <IReservationRegister>();

            reservationRegister.Setup(e => e.Reserve(It.IsAny <Reservation>())).Returns(Result.WasSucces(null));

            var bookingReference = new Mock <IBookingReference>();

            bookingReference.Setup(e => e.GetBookingReference()).Returns("75bcd15");

            _ticketOffice = new TicketOffice(trainData.Object, reservationRegister.Object, bookingReference.Object);
        }
Пример #12
0
 public PromotionSales(TicketOffice ticket)
 {
     _ticket = ticket;
 }
Пример #13
0
        static void Main(string[] args)
        {
            Console.WriteLine("Start creation of the database");
            using (var context = new CircusContext())
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();



                var troupe1 = new Troupe()
                {
                    NameTroupe  = "The Croustillants",
                    MembersName = new List <MemberTroupe>()
                    {
                        new MemberTroupe {
                            Name = "Pablo", Age = 28, Job = "Acrobate"
                        },
                        new MemberTroupe {
                            Name = "Ortencia", Age = 62, Job = "Acrobate"
                        },
                        new MemberTroupe {
                            Name = "Picasso", Age = 58, Job = "Acrobate"
                        },
                        new MemberTroupe {
                            Name = "Lolita", Age = 24, Job = "Acrobate"
                        },
                    },
                };

                var troupe2 = new Troupe()
                {
                    NameTroupe  = "The Clowns",
                    MembersName = new List <MemberTroupe>()
                    {
                        new MemberTroupe {
                            Name = "Albert", Age = 28, Job = "Clown"
                        },
                        new MemberTroupe {
                            Name = "Filibert", Age = 62, Job = "Clown"
                        },
                        new MemberTroupe {
                            Name = "Gertrude", Age = 58, Job = "Clown"
                        },
                        new MemberTroupe {
                            Name = "Gaston", Age = 24, Job = "Clown"
                        },
                    },
                };

                var show1 = new Show()
                {
                    ShowName      = "Vol-au-Vent",
                    MemberTroupes = troupe1.MembersName,
                    TroupeName    = troupe1.NameTroupe,
                    ShowType      = "Acrobatics",
                    Description   = "Personnes qui volent"
                };
                List <Show> show1List = new List <Show>();
                show1List.Add(show1);

                troupe1.ShowsList = show1List;
                troupe1.ShowType  = show1.ShowType;

                var show2 = new Show()
                {
                    ShowName      = "Qu'est-ce-qu'on se marre",
                    MemberTroupes = troupe2.MembersName,
                    TroupeName    = troupe2.NameTroupe,
                    ShowType      = "Clown show",
                    Description   = "Clowns qui font rire"
                };

                List <Show> show2List = new List <Show>();
                show2List.Add(show2);

                troupe2.ShowsList = show2List;
                troupe2.ShowType  = show2.ShowType;

                var calendar1 = new Calendar()
                {
                    ShowDay = "Lundi, Jeudi, Samedi",
                    Name    = troupe1.NameTroupe,
                    Hour    = "14H-15h30"
                };

                var calendar2 = new Calendar()
                {
                    ShowDay = "Lundi, Jeudi, Samedi",
                    Name    = troupe2.NameTroupe,
                    Hour    = "16H-18h"
                };

                troupe1.CalendarShow = calendar1;
                troupe2.CalendarShow = calendar2;


                var user1 = new User()
                {
                    Name        = "Gruss",
                    Password    = "******",
                    StaffMember = false
                };

                var user2 = new User()
                {
                    Name        = "Arlette",
                    Password    = "******",
                    StaffMember = false
                };

                var staffUser = new User()
                {
                    Name        = "Staff",
                    Password    = "******",
                    StaffMember = true
                };

                var tickets1 = new TicketOffice()
                {
                    NameTroupe       = troupe1.NameTroupe,
                    ShowName         = show1.ShowName,
                    AvailableTickets = 200,
                    SoldTickets      = 10
                };

                var tickets2 = new TicketOffice()
                {
                    NameTroupe       = troupe2.NameTroupe,
                    ShowName         = show2.ShowName,
                    AvailableTickets = 150,
                    SoldTickets      = 20
                };

                context.Add(troupe1);
                context.Add(troupe2);
                context.Add(calendar1);
                context.Add(calendar2);
                context.Add(show1);
                context.Add(show2);
                context.Add(user1);
                context.Add(user2);
                context.Add(staffUser);
                context.Add(tickets1);
                context.Add(tickets2);
                context.SaveChanges();

                Console.WriteLine("End of the database creation");
                GetHost();
            }
        }