from solution import Order, OrderItem, Payment
def test_order_flow():
print("Running basic order flow tests...")
order = Order("O1")
item1 = OrderItem("I1", 100, 2)
item2 = OrderItem("I2", 50, 1)
assert order.get_status() == "CREATED"
assert order.add_item(item1) is True
assert order.add_item(item2) is True
assert order.get_total_amount() == 250
payment = Payment(250)
assert order.make_payment(payment) is True
assert order.get_status() == "PAID"
print("✅ Basic order flow tests passed")
def test_invalid_item_addition():
print("Running invalid item tests...")
order = Order("O2")
bad_item = OrderItem("I3", -10, 2)
assert order.add_item(bad_item) is False
assert order.get_total_amount() == 0
print("✅ Invalid item tests passed")
def test_payment_rules():
print("Running payment rules tests...")
order = Order("O3")
item = OrderItem("I4", 100, 1)
order.add_item(item)
wrong_payment = Payment(50)
assert order.make_payment(wrong_payment) is False
correct_payment = Payment(100)
assert order.make_payment(correct_payment) is True
second_payment = Payment(100)
assert order.make_payment(second_payment) is False
print("✅ Payment rule tests passed")
def test_cancel_rules():
print("Running cancel rules tests...")
order = Order("O4")
item = OrderItem("I5", 200, 1)
order.add_item(item)
assert order.cancel() is True
assert order.get_status() == "CANCELLED"
payment = Payment(200)
assert order.make_payment(payment) is False
print("✅ Cancel rule tests passed")
if __name__ == "__main__":
test_order_flow()
test_invalid_item_addition()
test_payment_rules()
test_cancel_rules()
print("\n🎉 ALL DAY 8 TESTS PASSED SUCCESSFULLY")