Ejemplo n.º 1
0
def test_can_accept() -> None:
    """Test the can_accept function of the Checkout Class."""
    a = RegularLine(3)
    b = ExpressLine(3)
    c = SelfServeLine(3)
    d = ExpressLine(3)
    c1 = Customer('A', [Item('bananas', 7)])
    c2 = Customer('B', [Item('apple', 2)])
    c3 = Customer('C', [Item('orange', 5)])
    c4 = Customer('D', [Item('grapes', 10)])
    c5 = Customer('E', [Item('grapes', 10)])
    c6 = Customer('F', [
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1),
        Item('avacado', 1)
    ])
    a.queue = [c1]
    b.queue = [c2, c3, c4]
    assert a.can_accept(c5) == True
    assert b.can_accept(c5) == False
    assert c.can_accept(c5) == True
    assert d.can_accept(c6) == False
    assert d.can_accept(c5) == True
def test_express_customer_joining_test() -> None:
    line = ExpressLine(3)
    lst = []
    lst2 = []
    lst3 = []
    for i in range(EXPRESS_LIMIT + 1):
        lst.append(Item("lid", 1))
    for i in range(EXPRESS_LIMIT):
        lst2.append(Item("Item_2" + str(i), 1))
    for i in range(EXPRESS_LIMIT):
        lst3.append(Item("Item_3" + str(i), 1))

    c1 = Customer("Jon", lst2)
    c2 = Customer("James", lst3)
    c3 = Customer("Janice", lst)
    counter = 1
    for item in [c1, c2, c3]:
        if counter in (1, 2):
            assert line.can_accept(item)
            assert line.accept(item)
        else:
            assert not line.can_accept(item)
            assert not line.accept(item)
        counter += 1
    assert counter == 4
    assert len(line) == 2
    assert line.capacity == 3
    assert c1 in line.queue
    assert c2 in line.queue
    assert c3 not in line.queue
    assert line.queue[0] is c1
    assert line.queue[1] is c2
Ejemplo n.º 3
0
def test_close_line_people_in_line() -> None:
    """check close line with people in line"""
    customer1 = Customer("bruce", [])
    customer2 = Customer("tom", [])
    customer3 = Customer("mary", [])
    line1 = RegularLine(3)
    assert line1.accept(customer1) is True
    assert line1.accept(customer2) is True
    assert line1.accept(customer3) is True
    assert line1.close() == [customer2, customer3]
    assert line1.is_open is False
    assert line1.queue == [customer1]
    assert line1.can_accept(customer2) is False
    line2 = ExpressLine(3)
    assert line2.accept(customer1) is True
    assert line2.accept(customer2) is True
    assert line2.accept(customer3) is True
    assert line2.close() == [customer2, customer3]
    assert line2.is_open is False
    assert line2.queue == [customer1]
    assert line2.can_accept(customer2) is False
    line3 = SelfServeLine(3)
    assert line3.accept(customer1) is True
    assert line3.accept(customer2) is True
    assert line3.accept(customer3) is True
    assert line3.close() == [customer2, customer3]
    assert line3.is_open is False
    assert line3.queue == [customer1]
    assert line3.can_accept(customer2) is False
Ejemplo n.º 4
0
def test_checkout_can_accept_basic() -> None:
    """check for can accept"""
    customer1 = Customer("bruce", [])
    line1 = RegularLine(3)
    assert line1.can_accept(customer1) is True
    line2 = ExpressLine(3)
    assert line2.can_accept(customer1) is True
    line3 = SelfServeLine(3)
    assert line3.can_accept(customer1) is True
Ejemplo n.º 5
0
def test_checkout_cannot_accept_when_line_is_closed() -> None:
    """check if a customer can enter a line if line is closed"""
    customer1 = Customer("bruce", [])
    line1 = RegularLine(3)
    line1.is_open = False
    assert line1.can_accept(customer1) is False
    line2 = SelfServeLine(3)
    line2.is_open = False
    assert line2.can_accept(customer1) is False
    line3 = ExpressLine(3)
    line3.is_open = False
    assert line3.can_accept(customer1) is False
def test_express_start_checkout_test() -> None:
    line = ExpressLine(3)
    lst = []
    lst2 = []
    lst3 = []
    for i in range(EXPRESS_LIMIT + 1):
        lst.append(Item("lid", 1))
    for i in range(EXPRESS_LIMIT - 1):
        lst2.append(Item("Item_2" + str(i), 1))
    for i in range(EXPRESS_LIMIT):
        lst3.append(Item("Item_3" + str(i), 2))

    c1 = Customer("Jon", lst2)
    c2 = Customer("James", lst3)
    c3 = Customer("Janice", lst)
    counter = 1
    for item in [c1, c2, c3]:
        if counter in (1, 2):
            assert line.can_accept(item)
            assert line.accept(item)
        else:
            assert not line.can_accept(item)
            assert not line.accept(item)
        counter += 1
    assert len(line.queue) == 2
    assert line.capacity == 3
    assert line.queue[0] is c1
    assert line.queue[1] is c2
    assert line.start_checkout() == EXPRESS_LIMIT - 1
    assert len(line) == 2
    assert line.start_checkout() == EXPRESS_LIMIT - 1
    assert line.complete_checkout() is True
    assert line.start_checkout() == 2 * EXPRESS_LIMIT
    assert line.complete_checkout() is False
    assert line.start_checkout() == 0
    assert len(line) == 0
    assert len(line.queue) == 0
    assert line.complete_checkout() is False
def test_express_customer_coming_test() -> None:
    line = ExpressLine(3)
    lst = []
    for i in range(EXPRESS_LIMIT + 1):
        lst.append(Item("lid", 1))
    c1 = Customer("Jameson", lst)
    c2 = Customer("Jim", [Item("milk", 2), Item("lid", 1), Item("fan", 3)])
    c3 = Customer("Jon", [Item("milk", 2), Item("lid", 1), Item("fan", 3)])
    c4 = Customer("James", [Item("milk", 2), Item("lid", 1), Item("fan", 3)])
    c5 = Customer("Janice", [Item("milk", 2), Item("lid", 1), Item("fan", 3)])
    counter = 1
    for item in [c1, c2, c3, c4, c5]:
        if counter == 1:
            assert not line.can_accept(item)
        elif item.num_items() <= EXPRESS_LIMIT:
            assert line.can_accept(item)
        else:
            assert not line.can_accept(item)
        counter += 1

    line.close()
    for item in [c1, c2, c3, c4, c5]:
        assert not line.can_accept(item)
def test_express_close_test() -> None:
    line = ExpressLine(4)
    lst = []
    lst2 = []
    lst3 = []
    lst4 = []
    lst5 = []
    for i in range(EXPRESS_LIMIT):
        lst.append(Item("lid", 10))
    for i in range(EXPRESS_LIMIT):
        lst2.append(Item("Item_2" + str(i), 1))
    for i in range(EXPRESS_LIMIT):
        lst3.append(Item("Item_3" + str(i), 2))
    for i in range(EXPRESS_LIMIT):
        lst4.append(Item("lid", 100))
    counter = 1
    c1 = Customer("Jon", lst2)
    c2 = Customer("James", lst3)
    c3 = Customer("Janice", lst)
    c4 = Customer("Johnny", lst4)
    for item in [c1, c2, c3, c4]:
        if counter <= 3:
            assert line.can_accept(item)
            assert line.accept(item)
        if counter == 3:
            assert len(line.queue) == 3
            assert line.queue[0] is c1
            assert line.queue[1] is c2
            assert line.queue[2] is c3
            assert line.close() == [c2, c3]
            assert c1 in line.queue
            assert len(line.queue) == 1
            assert line.queue[0] == c1
        if counter > 3:
            assert not line.can_accept(item)
            assert not line.accept(item)
        counter += 1
Ejemplo n.º 9
0
def test_express_line_accept_over_packaged() -> None:
    """check if a over packaged customer can enter in line """
    customer1 = Customer("bruce", [Item("banana", 10), Item("banana", 10), Item("banana", 10), Item("banana", 10),\
                                   Item("banana", 10), Item("banana", 10), Item("banana", 10), Item("banana", 10), Item("banana", 10)])
    line1 = ExpressLine(2)
    assert line1.can_accept(customer1) is False
    assert line1.accept(customer1) is False
    assert customer1.arrival_time == -1
    assert line1.queue == []
    line2 = RegularLine(2)
    assert line2.can_accept(customer1) is True
    assert line2.accept(customer1) is True
    assert line2.queue == [customer1]
    line3 = SelfServeLine(2)
    assert line3.can_accept(customer1) is True
    assert line3.accept(customer1) is True
    assert line3.queue == [customer1]
Ejemplo n.º 10
0
def test_checkout_cannot_accept_line_capacity_full() -> None:
    """check if a customer can enter a line if the line is full"""
    customer1 = Customer("bruce", [])
    customer2 = Customer("tom", [])
    customer3 = Customer("mary", [])
    line1 = RegularLine(2)
    assert line1.accept(customer2)
    assert line1.accept(customer3)
    assert line1.can_accept(customer1) is False
    assert customer1.arrival_time == -1
    assert line1.queue == [customer2, customer3]
    line2 = ExpressLine(2)
    assert line2.accept(customer2)
    assert line2.accept(customer3)
    assert line2.can_accept(customer1) is False
    assert customer2.arrival_time == -1
    assert line2.queue == [customer2, customer3]
    line3 = SelfServeLine(2)
    assert line3.accept(customer2)
    assert line3.accept(customer3)
    assert line3.can_accept(customer1) is False
    assert customer3.arrival_time == -1
    assert line3.queue == [customer2, customer3]
def test_express_joining_in_extreme() -> None:
    line = ExpressLine(3)
    lst = []
    lst2 = []
    lst3 = []
    for i in range(EXPRESS_LIMIT + 1):
        lst.append(Item("lid", 1))
    for i in range(EXPRESS_LIMIT + 1):
        lst2.append(Item("Item_2" + str(i), 1))
    for i in range(EXPRESS_LIMIT + 1):
        lst3.append(Item("Item_3" + str(i), 1))

    c1 = Customer("Jon", lst2)
    c2 = Customer("James", lst3)
    c3 = Customer("Janice", lst)
    for item in [c1, c2, c3]:
        assert not line.can_accept(item)
        assert not line.accept(item)

    assert len(line) == 0
    assert line.capacity == 3
    assert c1 not in line.queue
    assert c2 not in line.queue
    assert c3 not in line.queue