예제 #1
0
def test_compact_vehicles_are_first_prioritized_into_compact_parking_space():
    parking_level_1 = ParkingLevel(
        spaces=[ParkingSpace(compact=True),
                ParkingSpace(compact=False)])
    parking_level_2 = ParkingLevel(
        spaces=[ParkingSpace(compact=False),
                ParkingSpace(compact=True)])
    parking_level_3 = ParkingLevel(
        spaces=[ParkingSpace(compact=False),
                ParkingSpace(compact=False)])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle(vehicle_type=VehicleType.Car)
    vehicle_2 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_3 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_4 = Vehicle(vehicle_type=VehicleType.Truck)
    vehicle_5 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_6 = Vehicle(vehicle_type=VehicleType.Car)

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_1]
    expected_vehicles_on_level_2: List[Vehicle] = [vehicle_4, vehicle_3]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_5, vehicle_6]

    garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6])

    TestHelpers.assert_expected_parking_placement(
        levels=garage.levels,
        expected_levels=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
def test_vehicles_without_premium_permits_are_rejected_from_premium_parking_spaces(
):
    parking_space_a = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_b = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_c = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_d = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_e = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_f = ParkingSpace(required_permit=Permit.PREMIUM)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle(permit=Permit.PREMIUM)
    vehicle_2 = Vehicle(permit=Permit.NONE)
    vehicle_3 = Vehicle(permit=Permit.NONE)
    vehicle_4 = Vehicle(permit=Permit.PREMIUM)
    vehicle_5 = Vehicle(permit=Permit.DISABILITY)
    vehicle_6 = Vehicle(permit=Permit.NONE)

    expected_rejected_vehicles: List[Vehicle] = [
        vehicle_2,
        vehicle_3,
        vehicle_5,
        vehicle_6,
    ]

    actual_rejected_vehicles = garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6])

    TestHelpers.assert_expected_vehicles_are_rejected(
        actual=actual_rejected_vehicles, expected=expected_rejected_vehicles)
예제 #3
0
def test_vehicles_are_rejected_when_capacity_is_exceeded():
    parking_level_1 = ParkingLevel(spaces=[ParkingSpace(), ParkingSpace()])
    parking_level_2 = ParkingLevel(spaces=[ParkingSpace()])

    garage = Garage(levels=[parking_level_1, parking_level_2])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle()
    vehicle_3 = Vehicle()
    vehicle_4 = Vehicle()
    vehicle_5 = Vehicle()
    vehicle_6 = Vehicle()
    vehicle_7 = Vehicle()

    expected_rejected_vehicles: List[Vehicle] = [
        vehicle_4,
        vehicle_5,
        vehicle_6,
        vehicle_7,
    ]

    actual_rejected_vehicles = garage.add_vehicles([
        vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6,
        vehicle_7
    ])

    TestHelpers.assert_expected_vehicles_are_rejected(
        actual=actual_rejected_vehicles, expected=expected_rejected_vehicles)
예제 #4
0
def test_trucks_are_rejected_from_compact_parking_space():
    parking_level_1 = ParkingLevel(
        spaces=[ParkingSpace(compact=True),
                ParkingSpace(compact=True)])
    parking_level_2 = ParkingLevel(
        spaces=[ParkingSpace(compact=True),
                ParkingSpace(compact=True)])
    parking_level_3 = ParkingLevel(
        spaces=[ParkingSpace(compact=True),
                ParkingSpace(compact=True)])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_2 = Vehicle(vehicle_type=VehicleType.Truck)
    vehicle_3 = Vehicle(vehicle_type=VehicleType.Truck)
    vehicle_4 = Vehicle(vehicle_type=VehicleType.Truck)
    vehicle_5 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_6 = Vehicle(vehicle_type=VehicleType.Truck)

    expected_rejected_vehicles: List[Vehicle] = [
        vehicle_2,
        vehicle_3,
        vehicle_4,
        vehicle_6,
    ]

    actual_rejected_vehicles = garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6])

    TestHelpers.assert_expected_vehicles_are_rejected(
        actual=actual_rejected_vehicles, expected=expected_rejected_vehicles)
def test_standard_cars_are_rejected_from_compact_parking_space():
    parking_space_a = ParkingSpace(compact=True)
    parking_space_b = ParkingSpace(compact=True)
    parking_space_c = ParkingSpace(compact=True)
    parking_space_d = ParkingSpace(compact=True)
    parking_space_e = ParkingSpace(compact=True)
    parking_space_f = ParkingSpace(compact=True)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_2 = Vehicle(vehicle_type=VehicleType.Car)
    vehicle_3 = Vehicle(vehicle_type=VehicleType.Car)
    vehicle_4 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_5 = Vehicle(vehicle_type=VehicleType.Car)
    vehicle_6 = Vehicle(vehicle_type=VehicleType.Car)

    expected_vehicles_rejected: List[Vehicle] = [
        vehicle_2,
        vehicle_3,
        vehicle_5,
        vehicle_6,
    ]

    actual_vehicles_rejected = garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6]
    )

    TestHelpers.assert_expected_vehicles_are_rejected(
        actual=actual_vehicles_rejected, expected=expected_vehicles_rejected
    )
예제 #6
0
def test_vehicle_is_added_to_parking_space():
    parking_space = ParkingSpace()
    parking_level = ParkingLevel(spaces=[parking_space])
    vehicle = Vehicle()

    garage = Garage(levels=[parking_level])
    garage.add_vehicles(vehicles=[vehicle])

    assert (parking_space.vehicle is
            vehicle), "Parking space does not contain the expected vehicle."
예제 #7
0
def test_compact_vehicles_with_dual_premium_disability_permits_take_the_same_priority_as_non_compact_vehicles():
    parking_space_a = ParkingSpace(required_permit=Permit.DISABILITY)
    parking_space_b = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_c = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_d = ParkingSpace(required_permit=Permit.DISABILITY)
    parking_space_e = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_f = ParkingSpace(required_permit=Permit.PREMIUM)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle(vehicle_type=VehicleType.Compact, permit=Permit.PREMIUM)
    vehicle_2 = Vehicle(
        vehicle_type=VehicleType.Truck, permit=Permit.DISABILITY | Permit.PREMIUM
    )
    vehicle_3 = Vehicle(
        vehicle_type=VehicleType.Compact, permit=Permit.DISABILITY | Permit.PREMIUM
    )
    vehicle_4 = Vehicle(vehicle_type=VehicleType.Compact, permit=Permit.PREMIUM)
    vehicle_5 = Vehicle(
        vehicle_type=VehicleType.Truck, permit=Permit.DISABILITY | Permit.PREMIUM
    )
    vehicle_6 = Vehicle(
        vehicle_type=VehicleType.Compact, permit=Permit.DISABILITY | Permit.PREMIUM
    )

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_5]
    expected_vehicles_on_level_2: List[Vehicle] = [vehicle_6, vehicle_3]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_1, vehicle_4]

    garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6]
    )

    TestHelpers.assert_expected_vehicles_on_levels(
        levels=garage.levels,
        expected_vehicles=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
def test_compact_vehicles_with_premium_permits_are_first_prioritized_into_premium_parking_spaces(
):
    parking_space_a = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_b = ParkingSpace(compact=True)
    parking_space_c = ParkingSpace(compact=True)
    parking_space_d = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_e = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_f = ParkingSpace(compact=True)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.PREMIUM)
    vehicle_3 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.PREMIUM)
    vehicle_4 = Vehicle()
    vehicle_5 = Vehicle()
    vehicle_6 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.PREMIUM)
    vehicle_7 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.PREMIUM)

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_7]
    expected_vehicles_on_level_2: List[Vehicle] = [None, vehicle_3]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_6, None]

    garage.add_vehicles([
        vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6,
        vehicle_7
    ])

    TestHelpers.assert_expected_parking_placement(
        levels=garage.levels,
        expected_levels=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
예제 #9
0
def test_compact_vehicles_with_disability_permits_do_not_take_priority_over_non_permitted_spaces(
):
    parking_space_a = ParkingSpace(required_permit=Permit.DISABILITY)
    parking_space_b = ParkingSpace(compact=True)
    parking_space_c = ParkingSpace(compact=True)
    parking_space_d = ParkingSpace(required_permit=Permit.DISABILITY)
    parking_space_e = ParkingSpace(required_permit=Permit.DISABILITY)
    parking_space_f = ParkingSpace(compact=True)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.DISABILITY)
    vehicle_3 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.DISABILITY)
    vehicle_4 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_5 = Vehicle(vehicle_type=VehicleType.Compact)
    vehicle_6 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.DISABILITY)
    vehicle_7 = Vehicle(vehicle_type=VehicleType.Compact,
                        permit=Permit.DISABILITY)

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_4]
    expected_vehicles_on_level_2: List[Vehicle] = [vehicle_5, vehicle_3]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_6, vehicle_7]

    garage.add_vehicles([
        vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6,
        vehicle_7
    ])

    TestHelpers.assert_expected_parking_placement(
        levels=garage.levels,
        expected_levels=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
예제 #10
0
	def setUp(self):
		"""This method is run once before _each_ test method is executed"""
		self.garage = Garage()
		self.bike = Bike()
		self.bike2 = Bike()
		self.bike3 = Bike()
		self.bike4 = Bike()
		self.bike5 = Bike()
		self.bike6 = Bike()
		self.bike7 = Bike()
def test_vehicles_with_premium_permits_take_priority_over_non_permitted_spaces(
):
    parking_space_a = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_b = ParkingSpace()
    parking_space_c = ParkingSpace()
    parking_space_d = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_e = ParkingSpace()
    parking_space_f = ParkingSpace()

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle(permit=Permit.PREMIUM)
    vehicle_3 = Vehicle(permit=Permit.PREMIUM)
    vehicle_4 = Vehicle()
    vehicle_5 = Vehicle(permit=Permit.PREMIUM)
    vehicle_6 = Vehicle(permit=Permit.PREMIUM)
    vehicle_7 = Vehicle(permit=Permit.PREMIUM)

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_5]
    expected_vehicles_on_level_2: List[Vehicle] = [vehicle_6, vehicle_3]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_7, vehicle_1]

    garage.add_vehicles([
        vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6,
        vehicle_7
    ])

    TestHelpers.assert_expected_parking_placement(
        levels=garage.levels,
        expected_levels=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
예제 #12
0
def test_vehicles_are_added_to_single_level_garage_until_capacity_is_reached():
    parking_level_1 = ParkingLevel(spaces=[
        ParkingSpace(),
        ParkingSpace(),
        ParkingSpace(),
        ParkingSpace(),
        ParkingSpace(),
        ParkingSpace(),
    ])

    garage = Garage(levels=[parking_level_1])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle()
    vehicle_3 = Vehicle()
    vehicle_4 = Vehicle()
    vehicle_5 = Vehicle()
    vehicle_6 = Vehicle()
    vehicle_7 = Vehicle()

    expected_vehicles_on_level_1: List[Vehicle] = [
        vehicle_1,
        vehicle_2,
        vehicle_3,
        vehicle_4,
        vehicle_5,
        vehicle_6,
    ]

    garage.add_vehicles([
        vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6,
        vehicle_7
    ])

    TestHelpers.assert_expected_parking_placement(
        levels=garage.levels,
        expected_levels=[
            expected_vehicles_on_level_1,
        ],
    )
예제 #13
0
def test_vehicles_with_premium_permits_are_added_to_premium_parking_spaces():
    parking_space_a = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_b = ParkingSpace()
    parking_space_c = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_d = ParkingSpace(required_permit=Permit.PREMIUM)
    parking_space_e = ParkingSpace()
    parking_space_f = ParkingSpace(required_permit=Permit.PREMIUM)

    parking_level_1 = ParkingLevel(spaces=[parking_space_a, parking_space_b])
    parking_level_2 = ParkingLevel(spaces=[parking_space_c, parking_space_d])
    parking_level_3 = ParkingLevel(spaces=[parking_space_e, parking_space_f])

    garage = Garage(levels=[parking_level_1, parking_level_2, parking_level_3])

    vehicle_1 = Vehicle()
    vehicle_2 = Vehicle(permit=Permit.DISABILITY | Permit.PREMIUM)
    vehicle_3 = Vehicle(permit=Permit.PREMIUM)
    vehicle_4 = Vehicle()
    vehicle_5 = Vehicle()
    vehicle_6 = Vehicle(permit=Permit.PREMIUM)

    expected_vehicles_on_level_1: List[Vehicle] = [vehicle_2, vehicle_1]
    expected_vehicles_on_level_2: List[Vehicle] = [vehicle_3, vehicle_6]
    expected_vehicles_on_level_3: List[Vehicle] = [vehicle_4, None]

    garage.add_vehicles(
        [vehicle_1, vehicle_2, vehicle_3, vehicle_4, vehicle_5, vehicle_6]
    )

    TestHelpers.assert_expected_vehicles_on_levels(
        levels=garage.levels,
        expected_vehicles=[
            expected_vehicles_on_level_1,
            expected_vehicles_on_level_2,
            expected_vehicles_on_level_3,
        ],
    )
예제 #14
0
def test_new_garages_have_zero_levels():
    garage = Garage()

    assert len(garage.levels) == 0, "Default garage contains levels."
예제 #15
0
class TestVan(object):

	@classmethod
	def setup_class(klass):
		"""This method is run once for each class before any tests are run"""

	@classmethod
	def teardown_class(klass):
		"""This method is run once for each class _after_ all tests are run"""

	def setUp(self):
		"""This method is run once before _each_ test method is executed"""
		self.garage = Garage()
		self.bike = Bike()
		self.bike2 = Bike()
		self.bike3 = Bike()
		self.bike4 = Bike()
		self.bike5 = Bike()
		self.bike6 = Bike()
		self.bike7 = Bike()

	def teardown(self):
		"""This method is run once after _each_ test method is executed"""
		pass

	def test_garage_has_capacity_of_six(self):
		assert_equal(self.garage.capacity, 6)

	def test_garage_is_not_full(self):
		self.garage.dock(self.bike)
		self.garage.dock(self.bike2)
		assert_equal(self.garage.is_full(), "not full")

	def test_garage_can_be_full(self):
		self.garage.dock(self.bike)
		self.garage.dock(self.bike2)
		self.garage.dock(self.bike3)
		self.garage.dock(self.bike4)
		self.garage.dock(self.bike5)
		self.garage.dock(self.bike6)
		assert_equal(self.garage.is_full(), "full")

	def test_garage_cannot_dock_more_than_five_bikes(self):
		self.garage.dock(self.bike)
		self.garage.dock(self.bike2)
		self.garage.dock(self.bike3)
		self.garage.dock(self.bike4)
		self.garage.dock(self.bike5)
		self.garage.dock(self.bike6)
		assert_equal(self.garage.dock(self.bike7), "Cannot dock any more bikes")

	def test_can_fix_one_broken_bike(self):
		self.bike.break_bike()
		self.garage.dock(self.bike)
		self.garage.fix_bikes()
		assert_in(self.bike, self.garage.available_bikes)

	def test_can_fix_all_broken_bikes(self):
		self.bike.break_bike()
		self.bike2.break_bike()
		self.garage.dock(self.bike)
		self.garage.dock(self.bike2)
		self.garage.fix_bikes()
		assert_in(self.bike, self.garage.available_bikes)
		assert_in(self.bike2, self.garage.available_bikes)

	def test_error_if_no_broken_bikes(self):
		self.garage.dock(self.bike)
		assert_equal(self.garage.fix_bikes(), "There are no broken bikes here")