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");
        }
示例#2
0
        void should_can_pick_the_car_when_manage_parking_lots_and_parking_boys_and_park_a_car()
        {
            var lotNoSpace  = new ParkingLot(0);
            var lotHasSpace = new ParkingLot(2);
            var boy         = new SuperParkingBoy(lotHasSpace);
            var superBoy    = new SuperParkingBoy(lotHasSpace);
            var smartBoy    = new SuperParkingBoy(lotNoSpace);
            var manager     = new ParkingManager(lotNoSpace, boy, smartBoy, superBoy);
            var car         = new Car();

            var token = manager.Park(car);

            Assert.Same(car, manager.Pick(token));

            token = manager.Park(car);
            Assert.Same(car, boy.Pick(token));

            token = manager.Park(car);
            Assert.Same(car, superBoy.Pick(token));

            token = manager.Park(car);
            Assert.Same(car, lotHasSpace.Pick(token));

            token = manager.Park(car);
            Assert.Throws <NotFoundException>(() => smartBoy.Pick(token));

            token = manager.Park(car);
            Assert.Throws <NotFoundException>(() => lotNoSpace.Pick(token));
        }
        public void should_park_to_parking_lot_with_higher_vacancy_rate(
            int parkingLot0Capacity,
            int parkingLot0OccupiedParkingSpace,
            int parkingLot1Capacity,
            int parkingLot1OccupiedParkingSpace,
            int chosenParkingLotIndex)
        {
            var parkingLot0 = new ParkingLotBuilder()
                              .WithCapacity(parkingLot0Capacity)
                              .WithOccupiedParkingSpace(parkingLot0OccupiedParkingSpace)
                              .Create();
            var parkingLot1 = new ParkingLotBuilder()
                              .WithCapacity(parkingLot1Capacity)
                              .WithOccupiedParkingSpace(parkingLot1OccupiedParkingSpace)
                              .Create();
            var parkingLots     = new[] { parkingLot0, parkingLot1 };
            var superParkingBoy = new SuperParkingBoy(parkingLots);
            var car             = new Car();

            var token = superParkingBoy.Park(car);

            var pickedCar = parkingLots[chosenParkingLotIndex].Pick(token);

            pickedCar.Should().BeSameAs(car);
        }
示例#4
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);
        }
        given_parking_boy_and_super_parking_boy_then_super_boy_can_not_manage_parking_boy()
        {
            var parkingLot = new OOParkingLot(1);
            var parkingBoy = new ParkingBoy(parkingLot);
            var superBoy   = new SuperParkingBoy(parkingBoy as IParkingLot);

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

            superParkingBoy.Invoking(p => p.Pick(token))
            .ShouldThrow <CarNotFoundException>()
            .WithMessage("Cannot find the car.");
        }
        public void should_stopped_to_park()
        {
            Park park = new Park(1);
            Car car = new Car("JP123");
            SuperParkingBoy boy = new SuperParkingBoy(park);

            boy.StopCar(car);

            Assert.Same(car, park.PickUpCar(car.CarNumber));
        }
        public void should_pick_up_car_from_park()
        {
            Park park = new Park(1);
            Car car = new Car("JP123");
            SuperParkingBoy boy = new SuperParkingBoy(park);

            boy.StopCar(car);

            Assert.Same(car, boy.PickUpCar(car.CarNumber));
        }
        public void should_not_pick_correct_car_while_no_parking()
        {
            var parkingLotWithHighVacancyRate = CreateParkingLotAndParkSomeCar(4, 1);
            var parkingLotWithLowVacancyRate  = CreateParkingLotAndParkSomeCar(3, 1);
            var superParkingBoy = new SuperParkingBoy(new[] { parkingLotWithHighVacancyRate, parkingLotWithLowVacancyRate });

            const int illegalCarToken = 0;

            Assert.Same(null, superParkingBoy.Pick(illegalCarToken));
        }
示例#10
0
        void should_can_pick_the_car_when_parking_boy_park_a_car()
        {
            var parkingBoy = new SuperParkingBoy(new ParkingLot(10));
            var car        = new Car();
            var token      = parkingBoy.Park(car);

            var pickedCar = parkingBoy.Pick(token);

            Assert.Same(car, pickedCar);
        }
示例#11
0
        void should_report_when_manager_manages_one_super_parking_boy()
        {
            var parkingLot     = ParkingLotBuilder.Build(2, 1);
            var parkingBoy     = new SuperParkingBoy(parkingLot);
            var parkingManager = new ParkingManager(parkingBoy);

            Assert.Equal("M 1 2" + NewLine +
                         "  B 1 2" + NewLine +
                         "    P 1 2", parkingManager.Report.ToString());
        }
        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);
        }
        public void given_a_parkingLot_and_a_super_parking_boy_when_super_boy_park_a_car_then_the_car_in_the_parkingLot()
        {
            var firstParkinglot = new OOParkingLot(1);
            var superParkingBoy = new SuperParkingBoy(firstParkinglot);
            var car             = new Car("car");

            var carId = superParkingBoy.Park(car);

            Assert.AreSame(car, firstParkinglot.Pick(carId));
        }
        public void should_not_stop_when_park_have_zero_position()
        {
            Park park = new Park(0);
            SuperParkingBoy boy = new SuperParkingBoy(park);

            Car car = new Car("JP456");
            boy.StopCar(car);

            Assert.Same(null, park.PickUpCar(car.CarNumber));
        }
        public void should_not_pick_up_car_when_repeat_pick_up()
        {
            Park park = new Park(1);
            Car car = new Car("JP123");
            SuperParkingBoy boy = new SuperParkingBoy(park);

            boy.StopCar(car);
            boy.PickUpCar(car.CarNumber);

            Assert.Same(null, boy.PickUpCar(car.CarNumber));
        }
        public void should_pick_the_same_car_after_parked_it()
        {
            var parkingLot      = new ParkingLot(1);
            var superParkingBoy = new SuperParkingBoy(parkingLot);
            var car             = new Car();
            var token           = superParkingBoy.Park(car);

            var pickedCar = superParkingBoy.Pick(token);

            pickedCar.Should().BeSameAs(car);
        }
        public void should_pick_up_car_from_first_park_when_two_parks_have_same_empty_rate()
        {
            Park firstPark = new Park(1);
            Park secondPark = new Park(1);
            Car car = new Car("JP123");
            SuperParkingBoy boy = new SuperParkingBoy(firstPark, secondPark);

            boy.StopCar(car);

            Assert.Same(car, firstPark.PickUpCar(car.CarNumber));
        }
        public void should_park_one_car_to_parking_lot_which_have_high_vacancy_rate_and_less_parking_space()
        {
            var parkingLotWithHighRate = CreateParkingLotAndParkSomeCar(3, 1);
            var parkingLotWithLowRate  = CreateParkingLotAndParkSomeCar(6, 3);
            var superParkingBoy        = new SuperParkingBoy(new[] { parkingLotWithHighRate, parkingLotWithLowRate });
            var car = new Car();

            var carToken = superParkingBoy.Park(car);

            Assert.Same(car, parkingLotWithHighRate.Pick(carToken));
        }
        public void should_park_one_car_to_one_of_parking_lots_while_all_have_same_vacancy_rate()
        {
            var parkingLot             = CreateParkingLotAndParkSomeCar(2, 1);
            var parkingLotWithSameRate = CreateParkingLotAndParkSomeCar(2, 1);
            var superParkingBoy        = new SuperParkingBoy(new[] { parkingLot, parkingLotWithSameRate });
            var car = new Car();

            var carToken = superParkingBoy.Park(car);

            Assert.Same(car, CarParkingInOneOfParkingLots(new[] { parkingLot.Pick(carToken), parkingLotWithSameRate.Pick(carToken) }));
        }
        public void should_pick_correct_car()
        {
            var parkingLotWithHighVacancyRate = CreateParkingLotAndParkSomeCar(5, 1);
            var parkingLotWithLowVacancyRate  = CreateParkingLotAndParkSomeCar(3, 1);
            var superParkingBoy = new SuperParkingBoy(new[] { parkingLotWithHighVacancyRate, parkingLotWithLowVacancyRate });
            var car             = new Car();

            var carToken = parkingLotWithHighVacancyRate.Park(car);

            Assert.Same(car, superParkingBoy.Pick(carToken));
        }
示例#21
0
        public void given_a_parking_lot_and_a_super_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 superParkingBoy = new SuperParkingBoy(parkinglot);
            var manager         = new ParkingManager(superParkingBoy);
            var car             = new Car("car");

            var carId = superParkingBoy.Park(car);

            Assert.AreSame(car, manager.Pick(carId));
        }
示例#22
0
        public void should_park_car_when_there_is_one_parking_lot()
        {
            var parkingLot      = new ParkingLot(1);
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot
            });
            var car = new Car();

            var ticket = superParkingBoy.Park(car);

            Assert.Equal(car, parkingLot.Pick(ticket));
        }
        public void should_not_park_car_when_all_managed_parking_lots_are_full()
        {
            var parkingLot = new ParkingLotBuilder()
                             .WithCapacity(1)
                             .WithOccupiedParkingSpace(1)
                             .Create();
            var superParkingBoy = new SuperParkingBoy(parkingLot);

            superParkingBoy.Invoking(p => p.Park(new Car()))
            .ShouldThrow <ParkingFailedException>()
            .WithMessage("Cannot park at this moment.");
        }
        public void should_park_car_when_manages_super_parking_boy()
        {
            var parkingLot     = new ParkingLot(1);
            var parkingBoy     = new SuperParkingBoy(parkingLot);
            var parkingManager = new ParkingManager(parkingBoy);
            var car            = new Car();

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

            pickedCar.Should().BeSameAs(car);
        }
示例#25
0
        public void should_be_able_to_pick_car()
        {
            var car        = new Car();
            var parkingLot = new ParkingLot(1);
            var parkingBoy = new SuperParkingBoy(new List <ParkingLot>()
            {
                parkingLot
            });

            var ticket = parkingLot.Park(car);

            Assert.Equal(car, parkingBoy.Pick(ticket));
        }
        public void should_pick_up_from_more_empty_rate_park_when_two_parks_have_different_empty_rate()
        {
            Park lessEmptyRatePark = new Park(2);
            Park moreEmptyRatePark = new Park(1);
            lessEmptyRatePark.StopCar(new Car("JP123"));

            SuperParkingBoy boy = new SuperParkingBoy(lessEmptyRatePark, moreEmptyRatePark);

            Car car = new Car("JP456");
            boy.StopCar(car);

            Assert.Same(car, moreEmptyRatePark.PickUpCar(car.CarNumber));
        }
示例#27
0
        public void should_be_able_to_park_car_if_parking_lots_has_same_free_space_rate()
        {
            var parkingLot1     = new ParkingLot(1);
            var parkingLot2     = new ParkingLot(1);
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot1, parkingLot2
            });
            var car = new Car();

            var ticket = superParkingBoy.Park(car);

            Assert.Equal(car, superParkingBoy.Pick(ticket));
        }
示例#28
0
        public void should_decrease_free_space_rate_when_park_car()
        {
            var parkingLot      = new ParkingLot(2);
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot
            });
            var freeSpaceRateBeforePark = parkingLot.FreeSpaceRate;

            superParkingBoy.Park(new Car());
            var freeSpaceRateAfterPark = parkingLot.FreeSpaceRate;

            Assert.True(freeSpaceRateBeforePark > freeSpaceRateAfterPark);
        }
示例#29
0
        given_a_smart_boy_with_empty_parking_lot_and_a_super_boy_with_one_space_parking_lot_both_managed_by_parking_manager_when_parking_manager_park_the_car_then_super_boy_could_pick_the_car
            ()
        {
            var emptyParkinglot = new OOParkingLot(0);
            var parkinglot      = new OOParkingLot(1);
            var smartBoy        = new SmartParkingBoy(emptyParkinglot);
            var superBoy        = new SuperParkingBoy(parkinglot);
            var manager         = new ParkingManager(smartBoy, superBoy);
            var car             = new Car("car");

            var carId = manager.Park(car);

            Assert.AreSame(car, superBoy.Pick(carId));
        }
示例#30
0
        public void should_pick_car_from_parking_lot_2_if_the_car_is_in_parking_lot_2()
        {
            var parkingLot1 = new ParkingLot(1);
            var parkingLot2 = new ParkingLot(1);
            var parkingBoy  = new SuperParkingBoy(new List <ParkingLot>()
            {
                parkingLot1, parkingLot2
            });
            var car = new Car();

            var ticket = parkingLot2.Park(car);

            Assert.Equal(car, parkingBoy.Pick(ticket));
        }
示例#31
0
        public void should_increase_free_space_rate_when_pick_car()
        {
            var parkingLot      = new ParkingLot(2);
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot
            });
            var ticket = superParkingBoy.Park(new Car());
            var freeSpaceRateBeforePick = parkingLot.FreeSpaceRate;

            superParkingBoy.Pick(ticket);
            var freeSpaceRateAfterPick = parkingLot.FreeSpaceRate;

            Assert.True(freeSpaceRateBeforePick < freeSpaceRateAfterPick);
        }
示例#32
0
        public void should_not_park_car_when_parking_lot_is_0_free_space_rate()
        {
            var parkingLot = new ParkingLot(1);

            parkingLot.Park(new Car());
            var superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot
            });
            var car = new Car();

            var ticket = superParkingBoy.Park(car);

            Assert.Null(parkingLot.Pick(ticket));
        }
        public void should_report_when_manager_manages_one_super_parking_boy()
        {
            var parkingLot = new ParkingLotBuilder()
                             .WithCapacity(2)
                             .WithOccupiedParkingSpace(1)
                             .Create();
            var parkingBoy      = new SuperParkingBoy(parkingLot);
            var parkingManager  = new ParkingManager(parkingBoy);
            var parkingDirector = new ParkingDirector(parkingManager);

            parkingDirector.ParkingReport.ToString("markdown").Should().Be(
                "# M 1 2" + NewLine +
                "## B 1 2" + NewLine +
                "* P 1 2");
        }
示例#34
0
        void should_park_car_to_the_parking_lot_which_has_the_larget_space_percent()
        {
            var lotPercent50 = new ParkingLot(2);

            lotPercent50.Park(new Car());

            var lotPercent100 = new ParkingLot(1);
            var parkingBoy    = new SuperParkingBoy(lotPercent50, lotPercent100);
            var car           = new Car();
            var token         = parkingBoy.Park(car);

            var pickedCar = lotPercent100.Pick(token);

            Assert.Same(car, pickedCar);
        }
示例#35
0
        void should_pick_the_car_from_parking_lots_when_park_a_car_by_super_parking_boy()
        {
            const string carId           = "ABC123";
            var          car             = new Car(carId);
            var          parkingLot      = new ParkingLot();
            var          superParkingBoy = new SuperParkingBoy(new List <ParkingLot> {
                parkingLot
            });

            superParkingBoy.Park(car);

            Car pickedCar = parkingLot.Pick(carId);

            Assert.Same(car, pickedCar);
        }
        public void should_park_one_car_to_parking_lot_which_have_high_vacancy_rate_first_test()
        {
            var parkingLotWithHighRate = CreateParkingLotAndParkSomeCar(4, 1);
            var parkingLotWithLowRate  = CreateParkingLotAndParkSomeCar(3, 1);
            var superParkingBoy        = new SuperParkingBoy(new List <ParkingLot>
            {
                parkingLotWithHighRate,
                parkingLotWithLowRate
            });
            var car = new Car();

            var carToken = superParkingBoy.Park(car);

            Assert.Same(car, parkingLotWithHighRate.Pick(carToken));
        }