public void Get_Unrecognized_parking_ticket_Error_Message_When_Ticket_Has_Been_Used_Test(string ticket, string errorMessage)
        {
            //given
            const int  numberOfFetchedCar = 1;
            const int  index         = 0;
            const bool requryMessage = true;
            var        plateNumber   = new string[numberOfFetchedCar] {
                "G 123455"
            };
            Ticket requiredTicket = new Ticket()
            {
                TicketMarker = plateNumber[index], IsUsed = false
            };

            //when
            var parkingLot = InitializeParkingLotWithPosition();
            var parkingBoy = new ParkingBoy();

            parkingLot.CarList = new List <string>();
            Ticket[] tickets = parkingBoy.ParkCars(plateNumber, parkingLot, requryMessage);
            parkingBoy.FetchTheCar(requiredTicket, parkingLot, requryMessage);
            var canFetchCarTwice = parkingBoy.FetchTheCar(requiredTicket, parkingLot, requryMessage);
            var message          = parkingBoy.Response;

            //then
            Assert.Equal(errorMessage, message);
            Assert.False(canFetchCarTwice);
        }
        public void Parking_Boy_Can_Fetch_No_Car_By_Used_Ticket_Test()
        {
            //given
            const int numberOfFetchedCar = 1;
            const int index       = numberOfFetchedCar - 1;
            var       plateNumber = new string[numberOfFetchedCar] {
                "G 123455"
            };
            const bool requryMessage = false;
            Ticket     usedTicket    = new Ticket()
            {
                TicketMarker = plateNumber[index], IsUsed = false
            };

            //when
            var parkingLot = InitializeParkingLotWithPosition();
            var parkingBoy = new ParkingBoy();

            Ticket[] tickets          = parkingBoy.ParkCars(plateNumber, parkingLot, false);
            var      canFetchCar      = parkingBoy.FetchTheCar(usedTicket, parkingLot, requryMessage);
            var      canFetchCarTwice = parkingBoy.FetchTheCar(usedTicket, parkingLot, requryMessage);
            var      fetchedCar       = parkingLot.CarList.Find(car => car == usedTicket.TicketMarker);

            //then
            Assert.Null(fetchedCar);
            Assert.False(canFetchCarTwice);
        }
        public void Parking_Boy_Can_Fetch_No_Car_By_Null_Or_Wrong_Ticket_Test(string ticket)
        {
            //given
            const int  numberOfFetchedCar = 1;
            const int  index         = 0;
            const bool requryMessage = false;
            var        plateNumber   = new string[numberOfFetchedCar] {
                "G 123455"
            };
            var ticketStrings = new string[numberOfFetchedCar] {
                ticket
            };
            Ticket wrongTicket = new Ticket()
            {
                TicketMarker = ticket, IsUsed = false
            };

            //when
            var parkingLot = InitializeParkingLotWithPosition();
            var parkingBoy = new ParkingBoy();

            Ticket[] tickets     = parkingBoy.ParkCars(plateNumber, parkingLot, requryMessage);
            var      canFetchCar = parkingBoy.FetchTheCar(wrongTicket, parkingLot, requryMessage);
            var      fetchedCar  = parkingLot.CarList.Find(car => car == ticket);

            //then
            Assert.Null(fetchedCar);
            Assert.False(canFetchCar);
        }
        public void Parking_Boy_Can_Fetch_The_Car_By_Ticket_Test()
        {
            //given
            const int  numberOfFetchedCar = 1;
            const int  index         = 0;
            const bool requryMessage = true;
            var        plateNumber   = new string[numberOfFetchedCar] {
                "G 123455"
            };
            var ticketStrings = new string[numberOfFetchedCar] {
                "G 123455"
            };

            //when
            var parkingLot = InitializeParkingLotWithPosition();
            var parkingBoy = new ParkingBoy();

            Ticket[] tickets     = parkingBoy.ParkCars(plateNumber, parkingLot, false);
            Random   random      = new Random();
            var      intIndex    = random.Next(0, tickets.Length);
            var      canFetchCar = parkingBoy.FetchTheCar(tickets[intIndex], parkingLot, requryMessage);
            var      fetchedCar  = parkingLot.CarList.Find(car => car == plateNumber[index]);

            //then
            Assert.True(canFetchCar);
            Assert.Null(fetchedCar);
        }
        public void Get_Please_provide_Your_Parking_Ticket_Error_Message_Test(string ticket, string errorMessage)
        {
            //given
            const int  numberOfFetchedCar = 1;
            const int  index         = 0;
            const bool requryMessage = true;
            var        plateNumber   = new string[numberOfFetchedCar] {
                "G 123455"
            };
            var ticketStrings = new string[numberOfFetchedCar] {
                ticket
            };
            Ticket wrongTicket = new Ticket()
            {
                TicketMarker = ticket, IsUsed = false
            };

            //when
            var parkingLot = InitializeParkingLotWithPosition();
            var parkingBoy = new ParkingBoy();

            Ticket[] tickets     = parkingBoy.ParkCars(plateNumber, parkingLot, requryMessage);
            var      canFetchCar = parkingBoy.FetchTheCar(wrongTicket, parkingLot, requryMessage);
            var      message     = parkingBoy.Response;
            var      fetchedCar  = parkingLot.CarList.Find(car => car == ticket);

            //then
            Assert.Null(fetchedCar);
            Assert.Equal(errorMessage, message);
            Assert.False(canFetchCar);
        }
        public void Get_Not_enough_position_Error_Message_Test(string ticket, string errorMessage)
        {
            //given
            const int  numberOfFetchedCar = 1;
            const int  index         = 0;
            const bool requryMessage = true;
            var        plateNumber   = new string[numberOfFetchedCar] {
                "G 123455"
            };
            Ticket requiredTicket = new Ticket()
            {
                TicketMarker = null, IsUsed = true
            };

            //when
            var parkingLot = InitializeParkingLotWithoutPosition();
            var parkingBoy = new ParkingBoy();

            Ticket[] tickets     = parkingBoy.ParkCars(plateNumber, parkingLot, requryMessage);
            var      canFetchCar = parkingBoy.FetchTheCar(requiredTicket, parkingLot, requryMessage);
            var      message     = parkingBoy.Response;

            //then
            Assert.Equal(errorMessage, message);
            Assert.False(canFetchCar);
        }