예제 #1
0
class ParkingLotBasicCRUDTests(unittest.TestCase):
    @classmethod
    def setUp(cls):
        print("setting up ParkingLotFunctionalTests")

    @classmethod
    def tearDown(cls):
        print("tearingDown ParkingLotFunctionalTests")

    # this function gets called for before every test in the class
    def setUp(self):
        self.parkingLot = ParkingLot(7)

    # this function gets called after every test in the class
    def tearDown(self):
        del self.parkingLot
        ParkingLot.deleteInstance()

    def test_park_vehicle(self):
        """ if parking lot is empty , then slot 1 should be allocated"""
        slot_number = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-1234",
            color="White")
        self.assertEqual(1, slot_number)
        """ find vehicle should result in valid slot """
        """ the corresponding slot should have valid vehicle """
        """ vehicle should have valid slot """
        vehicle_slot = self.parkingLot.find_vehicle("KA-01-HH-1234")
        self.assertEqual(1, 1)

    def park_5_vehicles(self):
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-1234",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9999",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9994",
                                     color="Blue")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9995",
                                     color="Pink")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9996",
                                     color="Red")

    def test_park_vehicle_when_full(self):
        """ if parking lot is full , then None should be allocated"""
        self.park_5_vehicles()
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9995",
                                     color="Pink")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9996",
                                     color="Red")

        slot_number = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-1254",
            color="White")
        self.assertEqual(None, slot_number)

    def test_vehicle_exit(self):
        """ clear allocated slot and return slot number """
        ## test specific setup start ##
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-1234",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9999",
                                     color="White")
        ## test specific setup end ##
        slot_number = self.parkingLot.vehicle_exit(1)
        self.assertEqual(1, slot_number)
        self.assertEqual(None, self.parkingLot.find_vehicle("KA-01-HH-1234"))
        self.assertEqual(1, self.parkingLot.get_size())

    def test_find_vehicle(self):
        """ given a registration number find the slot where a vehicle is parked """
        self.park_5_vehicles()
        slot_number1 = self.parkingLot.find_vehicle(
            registration_number="KA-01-HH-9996")
        self.assertEqual(5, slot_number1)
        # find a non exisiting vehicle
        self.parkingLot.vehicle_exit(5)
        slot_number2 = self.parkingLot.find_vehicle(
            registration_number="KA-01-HH-9996")
        self.assertEqual(None, slot_number2)

    def test_assign_spot_complex(self):
        """ give the spot nearest to the slot if entry is 0 """
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        slot_number1 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9321",
            color="fieryRed")
        self.assertEqual(2, slot_number1)
        slot_number2 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9124",
            color="fieryRed")
        self.assertEqual(3, slot_number2)

    def test_registration_numbers_for_cars_with_color(self):
        """ should return registration numbers of slots with a given color in ascending order """
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        slot_number1 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9321",
            color="White")
        slot_number2 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9124",
            color="fieryRed")
        registration_numbers_with_color = self.parkingLot.get_registration_numbers_for_cars_with_color(
            "White")
        # should give registration numbers in the same order as that of slots.
        self.assertEqual(["KA-01-HH-1234", "KA-01-HH-9321"],
                         registration_numbers_with_color)
        # since blue car left this must give empty
        self.assertEqual(
            [],
            self.parkingLot.get_registration_numbers_for_cars_with_color(
                "Blue"))

    def test_slot_ids_for_cars_with_color(self):
        """ should return registration numbers of slots with a given color in ascending order """
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        slot_number1 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9321",
            color="White")
        slot_number2 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9124",
            color="fieryRed")
        slot_ids_with_color = self.parkingLot.get_slot_numbers_for_cars_with_color(
            "White")
        # should give registration numbers in the same order as that of slots.
        self.assertEqual([1, 2], slot_ids_with_color)
        # since blue car left this must give empty
        self.assertEqual(
            [], self.parkingLot.get_slot_numbers_for_cars_with_color("Blue"))
class ParkingLotUITests(unittest.TestCase):
    def setUp(self):
        self.parkingLot = ParkingLot(7)
        self.parkingLotUI = ParkingLotUI(self.parkingLot)

    def tearDown(self):
        del self.parkingLot
        del self.parkingLotUI
        ParkingLot.deleteInstance()

    def test_park_vehicle(self):
        """ if parking lot is empty , then slot 1 should be allocated"""
        response = self.parkingLotUI.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-1234",
            color="White")
        self.assertEqual("Allocated slot number: 1", response)

    def park_5_vehicles(self):
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-1234",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9999",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9994",
                                     color="Blue")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9995",
                                     color="Pink")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9996",
                                     color="Red")

    def test_park_vehicle_when_full(self):
        """ if parking lot is full , then None should be allocated"""
        self.park_5_vehicles()
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9995",
                                     color="Pink")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9996",
                                     color="Red")
        response = self.parkingLotUI.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-1254",
            color="White")
        self.assertEqual("Sorry, parking lot is full", response)

    def test_vehicle_exit(self):
        """ clear allocated slot and return slot number """
        ## test specific setup start ##
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-1234",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9999",
                                     color="White")
        ## test specific setup end ##
        response = self.parkingLotUI.vehicle_exit(1)
        self.assertEqual("Slot number 1 is free", response)

    def test_find_vehicle(self):
        """ given a registration number find the slot where a vehicle is parked """
        self.park_5_vehicles()
        slot_number1 = self.parkingLotUI.find_vehicle(
            registration_number="KA-01-HH-9996")
        self.assertEqual("5", slot_number1)
        # find a non exisiting vehicle
        self.parkingLot.vehicle_exit(5)
        slot_number2 = self.parkingLotUI.find_vehicle(
            registration_number="KA-01-HH-9996")
        self.assertEqual("Not found", slot_number2)

    def test_registration_numbers_for_cars_with_color(self):
        """ should return registration numbers of slots with a given color in ascending order """
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        slot_number1 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9321",
            color="White")
        slot_number2 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9124",
            color="fieryRed")
        registration_numbers_with_color = self.parkingLotUI.get_registration_numbers_for_cars_with_color(
            "White")
        # should give registration numbers in the same order as that of slots.
        self.assertEqual("KA-01-HH-1234, KA-01-HH-9321",
                         registration_numbers_with_color)
        ## TODO : verify this
        # since blue car left this must give empty
        self.assertEqual(
            "No cars with given color",
            self.parkingLotUI.get_registration_numbers_for_cars_with_color(
                "Blue"))

    def test_slot_ids_for_cars_with_color(self):
        """ should return registration numbers of slots with a given color in ascending order """
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        slot_number1 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9321",
            color="White")
        slot_number2 = self.parkingLot.park_vehicle(
            vehicle_type="car",
            registration_number="KA-01-HH-9124",
            color="fieryRed")
        slot_ids_with_color = self.parkingLotUI.get_slot_numbers_for_cars_with_color(
            "White")
        # should give registration numbers in the same order as that of slots.
        self.assertEqual("1, 2", slot_ids_with_color)
        # since blue car left this must give empty
        ## TODO : verify this
        self.assertEqual(
            "No cars with given color",
            self.parkingLotUI.get_slot_numbers_for_cars_with_color("Blue"))

    def test_get_status_list(self):
        # self.parkingLot.park_vehicle(vehicle_type = "car",registration_number = "KA-01-HH-1234",color = "White")
        # self.parkingLot.park_vehicle(vehicle_type = "car",registration_number = "KA-01-HH-9999",color = "White")
        # self.parkingLot.park_vehicle(vehicle_type = "car",registration_number = "KA-01-HH-9994",color = "Blue")
        # self.parkingLot.park_vehicle(vehicle_type = "car",registration_number = "KA-01-HH-9995",color = "Pink")
        # self.parkingLot.park_vehicle(vehicle_type = "car",registration_number = "KA-01-HH-9996",color = "Red")
        self.park_5_vehicles()
        self.parkingLot.vehicle_exit(2)
        self.parkingLot.vehicle_exit(3)
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9321",
                                     color="White")
        self.parkingLot.park_vehicle(vehicle_type="car",
                                     registration_number="KA-01-HH-9124",
                                     color="FieryRed")
        response = self.parkingLotUI.get_status_list()
        expectedResponse = [
            "Slot No.".ljust(10) + "Registration No".ljust(20) +
            "Colour".ljust(10),
            "1".ljust(10) + "KA-01-HH-1234".ljust(20) + "White".ljust(10),
            "2".ljust(10) + "KA-01-HH-9321".ljust(20) + "White".ljust(10),
            "3".ljust(10) + "KA-01-HH-9124".ljust(20) + "FieryRed".ljust(10),
            "4".ljust(10) + "KA-01-HH-9995".ljust(20) + "Pink".ljust(10),
            "5".ljust(10) + "KA-01-HH-9996".ljust(20) + "Red".ljust(10),
        ]
        self.assertEqual(expectedResponse, response)