Esempio n. 1
0
        public void SmartParkingBoy_Should_park_cars_to_more_space_parkingLot_with_cars(int parkingCapacity1, int parkingCapacity2, int parkingCapacity3)
        {
            //given
            var parkingLots = new List <ParkingLot>()
            {
                { new ParkingLot(parkingCapacity1) }, { new ParkingLot(parkingCapacity2) }, { new ParkingLot(parkingCapacity3) }
            };
            var smartParkingBoy = new SmartParkingBoy();
            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    = smartParkingBoy.Park(numberPlate, parkingLots);
            var expectParkingLot = parkingLots[2];

            //then
            Assert.NotEmpty(parkingTicket);
            Assert.Contains <string>("XX2345", expectParkingLot.ParkingCarsList);
        }
Esempio n. 2
0
        void should_show_parking_lots_and_parking_boys_parking_info()
        {
            List <Car> cars = CreateCars(10);

            ParkingLot ParkingLot1 = CreateParkingLots(3, cars.GetRange(0, 2));
            ParkingLot ParkingLot2 = CreateParkingLots(3, cars.GetRange(2, 1));
            ParkingLot ParkingLot3 = CreateParkingLots(3, cars.GetRange(3, 2));
            ParkingLot ParkingLot4 = CreateParkingLots(3, cars.GetRange(5, 3));
            ParkingLot ParkingLot5 = CreateParkingLots(3, cars.GetRange(8, 2));

            var parkingBoy = new ParkingBoy(new List <ParkingLot> {
                ParkingLot1, ParkingLot2
            });
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                ParkingLot3
            });
            var smartParkingBoy = new SmartParkingBoy(new List <ParkingLot> {
                ParkingLot4
            });

            var manager = new Manager(new List <IPickerParker> {
                parkingBoy, ParkingLot5, superParkingBoy, smartParkingBoy
            });

            string       des         = manager.Description("");
            const string expectedDes = "Manager 10 15\n\t ParkingBoy 3 6\n\t\t ParkingLot 2 3\n\t\t ParkingLot 1 3\n\t ParkingLot 2 3\n\t SuperBoy 2 3\n\t\t ParkingLot 2 3\n\t SmartBoy 3 3\n\t\t ParkingLot 3 3\n";

            Assert.Equal(expectedDes, des);
        }
Esempio n. 3
0
        public void Should_Manager_Can_Tell_Boy_To_Fetch(string plateNumber, string parkingTicket)
        {
            //Given
            var manager   = new ParkingManager("Chris");
            var employee  = new ParkingBoy("Jack");
            var employee2 = new SmartParkingBoy("Joy");

            manager.HireBoy(employee);
            manager.HireBoy(employee2);
            string parkMessage   = string.Empty;
            string fectchMessage = string.Empty;
            var    fetchedCar    = new Car(plateNumber);
            var    ticket        = parkingTicket;
            var    parkingLots   = new List <CarLot <string, Car> >()
            {
                new CarLot <string, Car>(),
            };

            manager.ManagerPark(fetchedCar, parkingLots, out parkMessage);
            Car expected = fetchedCar;

            //When
            var result = manager.ManagerFetch(ticket, parkingLots, out fectchMessage);

            //Then
            Assert.IsType <Car>(result);
            Assert.Equal(expected, result);
        }
Esempio n. 4
0
        public void should_park_into_second_parking_lot_when_have_two_parking_lots_and_both_are_available_the_second_have_more_spot()
        {
            var parkingLotA = new ParkingLot(_capacity);
            var parkingLotB = new ParkingLot(_capacity);

            for (var i = 0; i < _capacity - 1; i++)
            {
                parkingLotA.Park(new Car());
            }
            for (var i = 0; i < _capacity - 2; i++)
            {
                parkingLotB.Park(new Car());
            }
            var preNumOfCarA = parkingLotA.GetAvailableSpotNumber();
            var preNumOfCarB = parkingLotB.GetAvailableSpotNumber();
            var car          = new Car();
            var list         = new List <ParkingLot>()
            {
                parkingLotA, parkingLotB
            };
            var smartParkingBoy = new SmartParkingBoy(list);

            smartParkingBoy.Park(car);

            Assert.Equal(preNumOfCarA, parkingLotA.GetAvailableSpotNumber());
            Assert.Equal(preNumOfCarB - 1, parkingLotB.GetAvailableSpotNumber());
        }
        void should_save_to_the_previous_parking_lot_when_parking_lot_left_space_is_equal()
        {
            var parkingLotA = new ParkingLot(20);
            var parkingLotB = new ParkingLot(20);
            var parkingLotC = new ParkingLot(20);
            var parkingBoy  = new SmartParkingBoy(new List <ParkingLot>
            {
                parkingLotA,
                parkingLotB,
                parkingLotC
            });

            for (int i = 0; i < 15; i++)
            {
                parkingLotA.Park(new Car());
            }

            for (int i = 0; i < 10; i++)
            {
                parkingLotB.Park(new Car());
            }

            for (int i = 0; i < 10; i++)
            {
                parkingLotC.Park(new Car());
            }

            parkingBoy.Park(new Car());
            Assert.Equal(5, parkingLotA.GetAvailableSpace());
            Assert.Equal(9, parkingLotB.GetAvailableSpace());
            Assert.Equal(10, parkingLotC.GetAvailableSpace());
        }
Esempio n. 6
0
        public void Should_Manager_Can_Tell_Boy_To_Park(string plateNumber, string parkingTicket)
        {
            //Given
            var manager   = new ParkingManager("Chris");
            var employee  = new ParkingBoy("Jack");
            var employee2 = new SmartParkingBoy("Joy");

            manager.HireBoy(employee);
            manager.HireBoy(employee2);
            string parkMessage = string.Empty;
            var    car         = new Car(plateNumber);
            var    parkingLots = new List <CarLot <string, Car> >()
            {
                LotInitialize.FillLotWithCars(10, 20),
                LotInitialize.FillLotWithCars(8, 30),
            };

            string expected = parkingTicket;

            //When
            var result = manager.ManagerPark(car, parkingLots, out parkMessage);

            //Then
            Assert.IsType <string>(result);
            Assert.Equal(expected, result);
        }
        public void should_report_when_manager_manages_one_parking_lot_and_different_parking_boys()
        {
            var parkingLot = new ParkingLotBuilder()
                             .WithCapacity(100)
                             .WithOccupiedParkingSpace(10)
                             .Create();
            var parkingBoy =
                new ParkingBoy(new ParkingLotBuilder().WithCapacity(200).WithOccupiedParkingSpace(20).Create());
            var smartParkingBoy =
                new SmartParkingBoy(new ParkingLotBuilder().WithCapacity(300).WithOccupiedParkingSpace(30).Create());
            var superParkingBoy = new SuperParkingBoy(
                new ParkingLotBuilder().WithCapacity(400).WithOccupiedParkingSpace(40).Create());
            var parkingManager  = new ParkingManager(parkingBoy, smartParkingBoy, superParkingBoy, parkingLot);
            var parkingDirector = new ParkingDirector(parkingManager);

            var actualReportText = parkingDirector.ParkingReport.ToString("markdown");

            actualReportText.Should().StartWith(
                "# M 100 1000" + NewLine +
                "* P 10 100");
            actualReportText.Should().Contain("## B 20 200" + NewLine +
                                              "* P 20 200");
            actualReportText.Should().Contain("## B 30 300" + NewLine +
                                              "* P 30 300");
            actualReportText.Should().Contain("## B 40 400" + NewLine +
                                              "* P 40 400");
        }
Esempio n. 8
0
        public void Should_SmartParkingBoy_Park_The_Car_To_The_Parkinglot_With_More_Empty_Positions(int currentLoadforPark1, int currentLoadforPark2)
        {
            //Given
            var    boy         = new SmartParkingBoy("Jack");
            var    car         = new Car("RJ_45675415");
            string message     = string.Empty;
            var    parkingLots = new List <CarLot <string, Car> >()
            {
                LotInitialize.FillLotWithCars(currentLoadforPark1),
                LotInitialize.FillLotWithCars(currentLoadforPark2),
            };
            string expectedTicket = "SuperPark: RJ_45675415";
            int    minimumIndex   = 0;

            for (int index = 0; index < parkingLots.Count; index++)
            {
                if (parkingLots[index].Count == Math.Min(currentLoadforPark1, currentLoadforPark2))
                {
                    minimumIndex = index;
                    break;
                }
            }

            int expectedLoad = Math.Min(currentLoadforPark1, currentLoadforPark2) + 1;

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

            //Then
            Assert.Equal(expectedTicket, actualTicket);
            Assert.Equal(expectedLoad, actualLoad);
        }
        given_parking_boy_and_smart_parking_boy_then_smart_boy_can_not_manage_parking_boy()
        {
            var parkingLot      = new OOParkingLot(1);
            var parkingBoy      = new ParkingBoy(parkingLot);
            var smartParkingBoy = new SmartParkingBoy(parkingBoy as IParkingLot);

            smartParkingBoy.Park(new Car("car"));
        }
        public void should_not_pick_car_when_the_car_is_not_in_parking_lot()
        {
            var smartParkingBoy = new SmartParkingBoy(new ParkingLot(1));
            var token           = Guid.NewGuid().ToString();

            smartParkingBoy.Invoking(p => p.Pick(token))
            .ShouldThrow <CarNotFoundException>()
            .WithMessage("Cannot find the car.");
        }
        public void given_a_parking_manager_with_a_super_parking_boy_with_two_parking_lot_and_a_smart_boy_with_a_parking_lot_managed_by_a_parking_director_then_the_director_could_print_right_report()
        {
            var superParkingBoy = new SuperParkingBoy(new OOParkingLot(1), new OOParkingLot(1));
            var smartParkingBoy = new SmartParkingBoy(new OOParkingLot(1));
            var parkingDirector = new ParkingDirector(new ParkingManager(smartParkingBoy, superParkingBoy));

            var report = parkingDirector.OutPutByStrategy();

            Assert.AreEqual("M 3 0\r\n\tB1 1 0\r\n\t\tP 1 0\r\n\tB2 2 0\r\n\t\tP 1 0\r\n\t\tP 1 0", report);
        }
Esempio n. 12
0
        void should_can_pick_the_car_when_parking_boy_park_a_car()
        {
            var parkingBoy = new SmartParkingBoy(new ParkingLot(10));
            var car        = new Car();
            var token      = parkingBoy.Park(car);

            var pickedCar = parkingBoy.Pick(token);

            Assert.Same(car, pickedCar);
        }
Esempio n. 13
0
        void should_report_when_manager_manages_one_smart_parking_boy()
        {
            var parkingLot     = ParkingLotBuilder.Build(2, 1);
            var parkingBoy     = new SmartParkingBoy(parkingLot);
            var parkingManager = new ParkingManager(parkingBoy);

            Assert.Equal("M 1 2" + NewLine +
                         "  B 1 2" + NewLine +
                         "    P 1 2", parkingManager.Report.ToString());
        }
Esempio n. 14
0
        public void park_the_car_in_the_second_lot_and_return_a_ticket_when_park_a_vehicle_and_both_the_second_and_the_third_lot_have_most_empty_slots()
        {
            var parkingLots = new ParkingLot[3] {
                new ParkingLot(1), new ParkingLot(2), new ParkingLot(2)
            };
            var smartParkingBoy = new SmartParkingBoy(parkingLots);
            var fromParkingBoy  = smartParkingBoy.Park(new Vehicle());

            Assert.IsType <Ticket>(fromParkingBoy);
            Assert.Same(parkingLots[1], fromParkingBoy.ParkingLot);
        }
Esempio n. 15
0
        public void should_park_a_car_into_a_parking_lot_which_has_space_and_get_a_ticket()
        {
            var list = new List <ParkingLot> {
                new ParkingLot(_capacity)
            };
            var smartParkingBoy = new SmartParkingBoy(list);

            var ticket = smartParkingBoy.Park(new Car());

            Assert.NotNull(ticket);
        }
        public void given_two_parkingLot_with_same_space_and_a_smart_parking_boy_when_smart_boy_park_a_car_then_the_car_in_the_first_parkingLot()
        {
            var firstParkinglot  = new OOParkingLot(1);
            var secondParkinglot = new OOParkingLot(1);

            var smartParkingBoy = new SmartParkingBoy(firstParkinglot, secondParkinglot);
            var car             = new Car("car");
            var carId           = smartParkingBoy.Park(car);

            Assert.AreSame(car, firstParkinglot.Pick(carId));
        }
        public void should_pick_the_same_car_after_parked_it()
        {
            var parkingLot      = new ParkingLot(1);
            var smartParkingBoy = new SmartParkingBoy(parkingLot);
            var car             = new Car();
            var token           = smartParkingBoy.Park(car);

            var pickedCar = smartParkingBoy.Pick(token);

            pickedCar.Should().BeSameAs(car);
        }
Esempio n. 18
0
        public void given_a_parking_lot_and_a_smart_parking_boy_which_managed_by_parking_manager_when_parking_boy_park_a_car_then_manager_could_pick_the_car()
        {
            var parkinglot      = new OOParkingLot(1);
            var smartParkingBoy = new SmartParkingBoy(parkinglot);
            var manager         = new ParkingManager(smartParkingBoy);
            var car             = new Car("car");

            var carId = smartParkingBoy.Park(car);

            Assert.AreSame(car, manager.Pick(carId));
        }
Esempio n. 19
0
        void should_park_car_to_the_parking_lot_which_has_the_larget_space_count()
        {
            var parkingLot = new ParkingLot(10);
            var parkingBoy = new SmartParkingBoy(new ParkingLot(5), parkingLot, new ParkingLot(3));
            var car        = new Car();
            var token      = parkingBoy.Park(car);

            var pickedCar = parkingLot.Pick(token);

            Assert.Same(car, pickedCar);
        }
Esempio n. 20
0
        public void should_throw_exception_when_parking_boy_get_car_given_a_valid_ticket_and_two_parking_lot_and_parking_lot_A_is_managed_by_parking_boy()
        {
            var parkinglotA = new ParkingLot(_capacity);
            var parkinglotB = new ParkingLot(_capacity);
            var boy         = new SmartParkingBoy(new List <ParkingLot> {
                parkinglotA
            });
            var car    = new Car();
            var ticket = parkinglotB.Park(car);

            Assert.Throws <NotFoundException>(() => boy.GetCar(ticket));
        }
        public void should_park_car_when_manages_smart_parking_boy()
        {
            var parkingLot      = new ParkingLot(1);
            var smartParkingBoy = new SmartParkingBoy(parkingLot);
            var parkingManager  = new ParkingManager(smartParkingBoy);
            var car             = new Car();

            var token     = parkingManager.Park(car);
            var pickedCar = parkingManager.Pick(token);

            pickedCar.Should().BeSameAs(car);
        }
Esempio n. 22
0
        public void Should_return_my_car_when_i_use_my_ticket()
        {
            var boy = new SmartParkingBoy(new List <Lot> {
                new Lot(1)
            });
            const string carId  = "川A 123456";
            var          ticket = new Ticket(boy.Park(new Car(carId)));

            var car = boy.Take(ticket);

            Assert.Equal(carId, car.Id);
        }
Esempio n. 23
0
        public void Should_get_ticket_when_parking_boy_park_a_car()
        {
            var boy = new SmartParkingBoy(new List <Lot> {
                new Lot(1)
            });
            const string carId = "川A 123456";
            var          car   = new Car(carId);

            var ticket = boy.Park(car);

            Assert.NotNull(ticket);
        }
        public void should_not_park_car_when_all_managed_parking_lots_are_full()
        {
            var parkingLot = new ParkingLotBuilder()
                             .WithCapacity(1)
                             .WithOccupiedParkingSpace(1)
                             .Create();
            var smartParkingBoy = new SmartParkingBoy(parkingLot);

            smartParkingBoy.Invoking(p => p.Park(new Car()))
            .ShouldThrow <ParkingFailedException>()
            .WithMessage("Cannot park at this moment.");
        }
Esempio n. 25
0
        public void should_throw_exception_when_parking_boy_get_car_given_an_invalid_ticket_and_a_parking_lot()
        {
            var parkinglot = new ParkingLot(_capacity);
            var boy        = new SmartParkingBoy(new List <ParkingLot> {
                parkinglot
            });
            var car = new Car();

            boy.Park(car);

            Assert.Throws <NotFoundException>(() => boy.GetCar(new object()));
        }
Esempio n. 26
0
        public void Should_throw_error_when_smart_boy_try_to_park_a_car_into_2_full_lots()
        {
            var lot1 = new Lot(0);
            var lot2 = new Lot(0);
            var boy  = new SmartParkingBoy(new List <Lot> {
                lot1, lot2
            });
            const string carId = "川A 123456";
            var          car   = new Car(carId);

            Assert.Throws <NoEnoughSpotException>(() =>
                                                  boy.Park(car));
        }
Esempio n. 27
0
        public void should_be_able_to_pick_car_by_smart_parking_boy()
        {
            var car        = new Car();
            var parkingLot = new ParkingLot(1);
            var parkingBoy = new SmartParkingBoy(new List <ParkingLot>()
            {
                parkingLot
            });

            var ticket = parkingLot.Park(car);

            Assert.Equal(car, parkingBoy.Pick(ticket));
        }
Esempio n. 28
0
        public void should_be_able_to_park_car_when_there_is_multi_parking_lot_with_same_avaliable_space()
        {
            var parkingLot1     = new ParkingLot(1);
            var parkingLot2     = new ParkingLot(1);
            var smartParkingBoy = new SmartParkingBoy(new List <ParkingLot> {
                parkingLot1, parkingLot2
            });
            var car = new Car();

            var ticket = smartParkingBoy.Park(car);

            Assert.Equal(car, parkingLot1.Pick(ticket) ?? parkingLot2.Pick(ticket));
        }
Esempio n. 29
0
        public void Should_Return_False_Given_Parking_Lot_Not_Exist_When_Remove_ParkingLot()
        {
            //given
            var parkingLot = new ParkingLot();
            var parkingBoy = new SmartParkingBoy(new List <ParkingLot>()
            {
            });

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

            //then
            Assert.False(result);
        }
Esempio n. 30
0
        public void Should_get_ticket_from_lot_2_when_smart_boy_park_and_park_2_is_more_empty_than_lot_1()
        {
            var lot1 = new Lot(1);
            var lot2 = new Lot(2);
            var boy  = new SmartParkingBoy(new List <Lot> {
                lot1, lot2
            });
            const string carId = "川A 123456";
            var          car   = new Car(carId);

            var ticket = boy.Park(car);

            Assert.Equal(lot2.Id, ticket.LotId);
        }