public void Manager_Should_Add_Error_Message_Given_Outof_Capacity()
        {
            //given
            var parkingLot = new ParkingLot.ParkingLot("parkingLot_1", 2);
            var parkingBoy = new ParkingBoy("parkingBoy_1", parkingLot);
            var car_1      = new Car("car_1");
            var car_2      = new Car("car_2");
            var car_3      = new Car("car_3");
            var manager    = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            manager.ParkCarByParkingBoy(car_1, parkingBoy, out _);
            manager.ParkCarByParkingBoy(car_2, parkingBoy, out _);
            manager.ParkCarByParkingBoy(car_3, parkingBoy, out var errorMessage);
            var expectedMessage = "Not enough position.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public void Manager_Should_Add_Error_Message_Given_Parked_Ticket()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager     = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            var parkedTicket = manager.ParkCarByParkingBoy(car, parkingBoy, out _);

            manager.FetchCarByParkingBoy(parkedTicket, parkingBoy, out _);
            manager.FetchCarByParkingBoy(parkedTicket, parkingBoy, out var errorMessage);
            var expectedMessage = "Unrecognized parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public void Manger_Should_Appoint_ParkingBoy_To_Park_And_Fetch()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager     = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            var parkingResult = manager.ParkCarByParkingBoy(car, parkingBoy, out var parkErrorMessage);

            Assert.Equal("parkingLot_1", parkingResult.ParkingLotId);
            Assert.Equal("car_1", parkingResult.CarId);

            var carResult = manager.FetchCarByParkingBoy(parkingResult, parkingBoy, out var fetchErrorMessage);

            Assert.Equal(car, carResult);
        }