public void More_test_cases_SuperSmartParkingBoy_Should_park_cars_to_more_positionRate_parkingLot(int parkingCapacity1, int parkingCapacity2, int parkingCapacity3)
        {
            //given
            var parkingLots = new List <ParkingLot>()
            {
                { new ParkingLot(parkingCapacity1) }, { new ParkingLot(parkingCapacity2) }, { new ParkingLot(parkingCapacity3) }
            };
            var superSmartParkingBoy = new SuperSmartParkingBoy();
            var parkingBoy           = new ParkingBoy();

            //when
            for (int i = 0; i < 2; i++)
            {
                parkingBoy.Park(i.ToString(), parkingLots[1]);
                parkingBoy.Park(i.ToString(), parkingLots[2]);
            }

            var numberPlate      = "XX2345";
            var parkingTicket    = superSmartParkingBoy.Park(numberPlate, parkingLots);
            var expectParkingLot = parkingLots[0];

            //then
            Assert.NotEmpty(parkingTicket);
            Assert.Contains <string>("XX2345", expectParkingLot.ParkingCarsList);
        }
        public void Should_superSmartBoy_park_per_availabe_ratio()
        {
            var mySuperBoy = new SuperSmartParkingBoy(DataLoader.GetParkingLots());

            mySuperBoy.TryPark(new Car("test plate1"), out Ticket ticket1);
            mySuperBoy.TryPark(new Car("test plate2"), out Ticket ticket2);
            mySuperBoy.TryPark(new Car("test plate3"), out Ticket ticket3);
            mySuperBoy.TryPark(new Car("test plate4"), out Ticket ticket4);

            Assert.Equal("MyLot2", ticket1.LotName);
            Assert.Equal("MyLot1", ticket2.LotName);
            Assert.Equal("MyLot2", ticket3.LotName);
            Assert.Equal("MyLot2", ticket4.LotName);
        }
        public void Should_Park_Return_ParkingTicket_When_Park_To_Available_ParkingLot()
        {
            // given
            var car         = new Car("JAA8888");
            var parkingLot1 = new ParkingLot("ParkingLotOne");
            var parkingLot2 = new ParkingLot("ParkingLotOne");
            var parkingBoy  = new SuperSmartParkingBoy("Jack", parkingLot1, parkingLot2);

            // when
            var parkingTicket = parkingBoy.Park(car);

            // then
            Assert.IsType <ParkingTicket>(parkingTicket);
        }
        public void Should_Park_Return_Null_When_Park_Null_Car()
        {
            // given
            Car car         = null;
            var parkingLot1 = new ParkingLot("ParkingLotOne");
            var parkingLot2 = new ParkingLot("ParkingLotOne");
            var parkingBoy  = new SuperSmartParkingBoy("Jack", parkingLot1, parkingLot2);

            // when
            var parkingTicket = parkingBoy.Park(car);

            // then
            Assert.Null(parkingTicket);
        }
Example #5
0
        public void Should_Return_False_Given_Parking_Lot_Not_Exist_When_Remove_ParkingLot()
        {
            //given
            var parkingLot = new ParkingLot();
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
            });

            //when
            var result = parkingBoy.RemoveParkingLot(parkingLot);

            //then
            Assert.False(result);
        }
Example #6
0
        public void Should_Remove_Parking_Lot_Given_Parking_Lot_Exist_When_Remove_ParkingLot()
        {
            //given
            var parkingLot = new ParkingLot();
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                parkingLot
            });

            //when
            var result = parkingBoy.RemoveParkingLot(parkingLot);

            //then
            Assert.Equal(0, parkingBoy.ParkingLotsCount);
        }
Example #7
0
        public void Should_Super_Smart_Parking_Boy_Park_A_Car_And_Get_Ticket()
        {
            //given
            var expectedTicket = new Ticket("N98245");

            //when
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var ticket = parkingBoy.Park(new Car("N98245"), out _);

            //then
            Assert.Equal(expectedTicket.GetType(), ticket.GetType());
        }
Example #8
0
        public void Should_Super_Smart_Parking_Boy_Fetch_No_Cars_Given_The_No_Ticket()
        {
            //given
            var expectedCar = new Car("N98245");

            //when
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var car = parkingBoy.Fetch(null, out _);

            //then
            Assert.Null(car);
        }
Example #9
0
        public void Should_Get_Error_Message_Given_The_Parking_Lot_Is_Full_When_Park_Car()
        {
            //given
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot(0)
            });

            //when
            var errorMessage = string.Empty;

            parkingBoy.Park(null, out errorMessage);

            //then
            Assert.Equal("Not enough position.", errorMessage);
        }
Example #10
0
        public void Should_Super_Smart_Parking_Boy_Fetch_A_Car_Using_Ticket()
        {
            //given
            var expectedCar = new Car("N98245");

            //when
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var ticket = parkingBoy.Park(expectedCar, out _);
            var car    = parkingBoy.Fetch(ticket, out _);

            //then
            Assert.Equal(expectedCar.GetType(), car.GetType());
        }
Example #11
0
        public void Should_Get_Error_Message_Given_A_Null_Ticket_When_Fetch_Car()
        {
            //given
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });

            //when
            var errorMessage = string.Empty;

            parkingBoy.Fetch(null, out errorMessage);

            //then
            Assert.Equal("Please provide your parking ticket.", errorMessage);
        }
Example #12
0
        public void Manager_Should_able_to_Add_all_kinds_of_parkingboys_to_his_list()
        {
            //given
            var superSmartParkingBoy = new SuperSmartParkingBoy();
            var smartParkingBoy      = new SmartParkingBoy();
            var parkingBoy           = new ParkingBoy();
            var manager = new Manager();

            //when
            manager.AddParkingBoy(parkingBoy);
            manager.AddParkingBoy(smartParkingBoy);
            manager.AddParkingBoy(superSmartParkingBoy);
            //then
            Assert.Contains <ParkingBoy>(parkingBoy, manager.ParkingBoyList);
            Assert.Contains <ParkingBoy>(smartParkingBoy, manager.ParkingBoyList);
            Assert.Contains <ParkingBoy>(superSmartParkingBoy, manager.ParkingBoyList);
        }
Example #13
0
        public void Should_Get_Error_Message_Unrecognized_parking_ticket_Given_A_Wrong_Ticket_When_Fetch_Car()
        {
            //given
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot(10)
            });
            var wrongTicket = new Ticket("wrongNumber");

            //when
            var errorMessage = string.Empty;

            parkingBoy.Fetch(wrongTicket, out errorMessage);

            //then
            Assert.Equal("Unrecognized parking ticket.", errorMessage);
        }
Example #14
0
        public void Should__Super_Smart_Parking_Boy_Park_The_Car_To_Mutiple_Parking_Lots_And_Park_To_The_Parking_Lot_Has_Largest_AvaliablePositionRate()
        {
            //given
            var parkingLot1 = new ParkingLot(2);
            var parkingBoy  = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                parkingLot1, new ParkingLot(1)
            });

            parkingBoy.Park(new Car("car1"), out _);

            //when
            var ticket = parkingBoy.Park(new Car("car2"), out _);

            //then
            Assert.Contains(ticket.TicketNumber, parkingLot1.Tickets);
        }
        public void Should_Fetch_Return_Car_With_Valid_ParkingTicket()
        {
            // given
            // given
            var parkedCar     = new Car("JAA8888");
            var parkingLot1   = new ParkingLot("ParkingLotOne");
            var parkingLot2   = new ParkingLot("ParkingLotOne");
            var parkingBoy    = new SuperSmartParkingBoy("Jack", parkingLot1, parkingLot2);
            var parkingTicket = parkingBoy.Park(parkedCar);

            // when
            var fetchedCar = parkingBoy.Fetch(parkingTicket);

            // then
            Assert.IsType <Car>(fetchedCar);
            Assert.Equal(fetchedCar, parkedCar);
        }
Example #16
0
        public void Should_Super_Smart_Parking_Boy_Fetch_No_Car_Given_The_Ticket_Has_Been_Used()
        {
            //given
            var parkedCar  = new Car("N98245");
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var ticket = parkingBoy.Park(parkedCar, out _);

            parkingBoy.Fetch(ticket, out _);

            //when
            var car = parkingBoy.Fetch(ticket, out _);

            //then
            Assert.Null(car);
        }
Example #17
0
        public void Should_Super_Smart_Park_No_Car_Given_Parking_Lot_Has_No_Position()
        {
            //given
            var parkedCar  = new Car("N98245");
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot(1)
            });

            parkingBoy.Park(parkedCar, out _);

            //when
            var newCar    = new Car("A982453");
            var newTicket = parkingBoy.Park(newCar, out _);

            //then
            Assert.Null(newTicket);
        }
Example #18
0
        public void Should_parking_lot_service_manager_add_super_smart_parking_boy_to_managementList()
        {
            // given
            List <ParkingLot> parkingLotListForManager = new List <ParkingLot> {
                new ParkingLot(0), new ParkingLot(1)
            };
            List <ParkingLot> parkingLotListForParkingBoy = new List <ParkingLot> {
                new ParkingLot(2), new ParkingLot(3)
            };
            var expectedSuperSmartParkingBoy = new SuperSmartParkingBoy(parkingLotListForParkingBoy);
            var parkingLotServiceManager     = new ParkingLotServiceManager(parkingLotListForManager, new List <ParkingBoy>());

            parkingLotServiceManager.AddParkingBoy(expectedSuperSmartParkingBoy);
            // when
            var specifiedParkingBoy = parkingLotServiceManager.SpecifyParkingBoy();

            // then
            Assert.Equal(expectedSuperSmartParkingBoy, specifiedParkingBoy);
        }
Example #19
0
        public void Should_parking_lot_service_manager_return_parking_boy_to_do_parking_works()
        {
            // given
            List <ParkingLot> parkingLotListForManager = new List <ParkingLot> {
                new ParkingLot(0), new ParkingLot(1)
            };
            List <ParkingLot> parkingLotListForParkingBoy = new List <ParkingLot> {
                new ParkingLot(2), new ParkingLot(3)
            };
            var superSmartParkingBoy     = new SuperSmartParkingBoy(parkingLotListForParkingBoy);
            var managementList           = new List <ParkingBoy>();
            var parkingLotServiceManager = new ParkingLotServiceManager(parkingLotListForManager, managementList);

            // when
            parkingLotServiceManager.AddParkingBoy(superSmartParkingBoy);
            bool isSuperSmartParkingBoyAdded = managementList.Contains(superSmartParkingBoy);

            // then
            Assert.True(isSuperSmartParkingBoyAdded);
        }
        public void Should_Return_ticket_Super_Smart_Parking_Boy()
        {
            //given
            var parkingLot1    = new ParkingLot.ParkingLot(1, 3);
            var parkingLot2    = new ParkingLot.ParkingLot(2, 4);
            var parkingLotList = new List <ParkingLot.ParkingLot>
            {
                parkingLot1,
                parkingLot2,
            };
            //when
            var parkingBoy     = new SuperSmartParkingBoy(parkingLotList);
            var ticket0        = parkingBoy.ParkACarAndGetTicket("abc123");
            var ticket1        = parkingBoy.ParkACarAndGetTicket("abc123");
            var ticket2        = parkingBoy.ParkACarAndGetTicket("abc124");
            var expectedTicket = new Ticket("abc124", 2);

            //then
            Assert.Equal(expectedTicket.GetParkingLotNumber(), ticket2.GetParkingLotNumber());
        }
Example #21
0
        public void Should_Get_Error_Message_Unrecognized_parking_ticket_Given_A_Used_Ticket_When_Fetch_Car()
        {
            //given
            var parkedCar  = new Car("N98245");
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var ticket = parkingBoy.Park(parkedCar, out _);

            parkingBoy.Fetch(ticket, out _);

            //when
            var errorMessage = string.Empty;

            parkingBoy.Fetch(ticket, out errorMessage);

            //then
            Assert.Equal("Unrecognized parking ticket.", errorMessage);
        }
Example #22
0
        public void Should_always_park_cars_to_the_parking_lot_which_has_larger_available_position_rate()
        {
            // given
            List <ParkingLot> parkingLotList = new List <ParkingLot> {
                new ParkingLot(0, 5), new ParkingLot(1, 2)
            };
            var superSmartParkingBoy = new SuperSmartParkingBoy(parkingLotList);

            for (int i = 0; i < 3; i++)
            {
                parkingLotList[0].AddCar(new Car());
            }

            parkingLotList[1].AddCar(new Car());
            var expectedCar = new Car();
            // when
            var parkingTicket = superSmartParkingBoy.ParkCar(expectedCar, out string errorMessagePark1);

            // then
            Assert.True(parkingTicket.ParkingLotId == 1);
        }
Example #23
0
        public void Should_Super_Smart_Parking_Boy_Park_Mutiple_Cars_And_Fetch_The_Right_Car_Using_Ticket()
        {
            //given
            var expectedCar = new Car("N98245");

            //when
            var parkingBoy = new SuperSmartParkingBoy(new List <ParkingLot>()
            {
                new ParkingLot()
            });
            var carList = new List <Car>()
            {
                new Car("car1"), new Car("car2"), new Car("car3")
            };

            carList.ForEach(car => parkingBoy.Park(car, out _));
            var ticket = parkingBoy.Park(expectedCar, out _);
            var car    = parkingBoy.Fetch(ticket, out _);

            //then
            Assert.Equal(expectedCar, car);
        }
        public void Should_SuperSmartParkingBoy_Park_The_Car_To_The_Parkinglot_With_Higher_EmptyRate(int currentLotLoad1, int currentLotLoad2, int loadCapacity1, int loadCapacity2)
        {
            //Given
            var    boy         = new SuperSmartParkingBoy("Jack");
            var    car         = new Car("RJ_45675415");
            string message     = string.Empty;
            var    parkingLots = new List <CarLot <string, Car> >()
            {
                LotInitialize.FillLotWithCars(currentLotLoad1, loadCapacity1),
                LotInitialize.FillLotWithCars(currentLotLoad2, loadCapacity2),
            };
            var    testCount       = parkingLots[0].Count;
            var    testCapacity    = parkingLots[0].Capacity;
            string expectedTicket  = "SuperPark: RJ_45675415";
            double minimumLoadRate = Math.Min(parkingLots[0].LoadRate, parkingLots[1].LoadRate);
            int    targetIndex     = 0;

            for (int index = 0; index < parkingLots.Count; index++)
            {
                if (parkingLots[index].LoadRate == Math.Min(parkingLots[0].LoadRate, parkingLots[1].LoadRate))
                {
                    targetIndex = index;
                    break;
                }
            }

            int expectedLoad = parkingLots[targetIndex].Count + 1;

            //When
            string actualTicket = boy.Park(car, parkingLots, out message);
            var    actualLoad   = parkingLots[targetIndex].Count;

            //Then
            Assert.Equal(expectedTicket, actualTicket);
            Assert.Equal(expectedLoad, actualLoad);
        }