public void should_park_in_any_parkingLot_for_multiple_empty_parkingLots_with_different_size()
        {
            var car = new Car();
            var superboy = new SuperParkingBoy(new ParkingLot(10), new ParkingLot(20));

            var parkingInfo = superboy.Park(car);

            Assert.Same(car, superboy.Pick(parkingInfo));
        }
        public void should_pick_by_selectedBoy_when_selected_boy_park()
        {
            var car = new Car();
            var superParkingBoy = new SuperParkingBoy(new ParkingLot());
            var manager = new ParkingBoyManager(
                new List<IParkable> { superParkingBoy});

            Assert.Same(car, superParkingBoy.Pick(manager.Park(car)));
        }
        public void parkingLot_should_pick_success_after_superBoy_park()
        {
            var car = new Car();
            var parkinglot = new ParkingLot();
            var superBoy = new SuperParkingBoy(parkinglot);

            var parkingInfo = superBoy.Park(car);

            Assert.Same(car, parkinglot.Pick(parkingInfo.ParkingToken));
        }
        public void superBoy_should_park_failed_if_all_parkingLots_are_full()
        {
            var bmw = new Car();
            var audi = new Car();
            var parkinglot = new ParkingLot(1);
            var superBoy = new SuperParkingBoy(parkinglot);

            superBoy.Park(bmw);

            Assert.Equal(StatusCode.ParkinglotIsFull, superBoy.Park(audi).StatusCode);
        }
        public void should_park_in_parkinglot_with_high_vacancy_rate_for_different_size_parkingLots()
        {
            var bmw = new Car();
            var audi = new Car();
            var parkingLot1 = new ParkingLot(10);
            var parkingLot2 = new ParkingLot(20);
            var superboy = new SuperParkingBoy(parkingLot1, parkingLot2);

            parkingLot2.Park(bmw);
            var parkingInfo = superboy.Park(audi);

            Assert.Same(audi, parkingLot1.Pick(parkingInfo.ParkingToken));
        }
        public void should_park_in_parkinglot_with_high_available_spots_for_same_size_parkingLots()
        {
            var bmw = new Car();
            var audi = new Car();
            var parkingLot1 = new ParkingLot(10);
            var parkingLot2 = new ParkingLot(10);
            var superboy = new SuperParkingBoy(parkingLot1, parkingLot2);

            parkingLot1.Park(bmw);
            var parkingInfo = superboy.Park(audi);

            Assert.Same(audi, parkingLot2.Pick(parkingInfo.ParkingToken));
        }
        public void should_park_failed_if_available_parkingLot_is_null()
        {
            var car = new Car();
            var smartParkingBoy = new SmartParkingBoy(new ParkingLot(1));
            smartParkingBoy.Park(new Car());
            var superParkingBoy = new SuperParkingBoy(new ParkingLot(1));
            superParkingBoy.Park(new Car());
            var manager = new ParkingBoyManager(
                new List<IParkable>
                {
                    smartParkingBoy, superParkingBoy
                });

            Assert.Equal(StatusCode.ParkinglotIsFull, manager.Park(car).StatusCode);
        }
        public void should_try_to_park_in_available_parkingLot()
        {
            var car = new Car();
            var superParkingBoy = new SuperParkingBoy(new ParkingLot(1));
            superParkingBoy.Park(new Car());
            var manager = new ParkingBoyManager(
                new List<IParkable>
                {
                    superParkingBoy, new SmartParkingBoy(new ParkingLot(10))
                });

            Assert.Same(car, manager.Pick(manager.Park(car)));
        }