public void should_get_park_status_when_multiple_parkingLots_parked()
        {
            var manager = new ParkingBoyManager(new List<IParkable> { new ParkingLot(1), new ParkingLot(2) });

            manager.Park(new Car());
            manager.Park(new Car());

            var director = new ParkingDirector(manager);
            Assert.Equal("M 2 3\r\n  P 1 1\r\n  P 1 2", director.GetParkStatus());
        }
        public void manager_should_park_and_pick()
        {
            var car = new Car();
            var manager = new ParkingBoyManager(new List<IParkable> { new ParkingLot(1)});

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

            Assert.Same(car, manager.Pick(manager.Park(car)));
        }
        public void parkingLot_should_pick_after_manager_park()
        {
            var car = new Car();
            var parkingLot = new ParkingLot(1);
            var manager = new ParkingBoyManager(new List<IParkable> { parkingLot});

            Assert.Same(car, parkingLot.Pick(manager.Park(car).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)));
        }
        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)));
        }