def test_save_multiple_delivery_address():
    profile = Profile()
    addresses = [Address('100 John Rd', 'Toronto', 'ON', 'M5R 7U6'),
                 Address('200 Mark Blvd', 'Mississauga', 'ON', 'L5M 1Y1')]
    profile.add_adresses(addresses)

    assert len(profile.addresses) == 2, "The profile should now have two addresses"
def test_add_order_history():
    profile = Profile()
    assert len(profile.order_history) == 0, "Order history should be empty"

    history1 = History('Salad', 'delivered', datetime.datetime(2020, 5, 17))
    history2 = History('Burger', 'cancelled', datetime.datetime(2020, 5, 18))

    profile.add_order_history(history1)
    profile.add_order_history(history2)

    assert len(profile.order_history) == 2, "Order history should contain the items that were ordered"
def test_modify_profile():
    profile = Profile()
    account = Account('Shivam', 'shars48', 'password', profile)
    account.set_email('*****@*****.**')
    assert account.email == '*****@*****.**', "The current email should be returned"
    account.set_email('*****@*****.**')
    assert account.email == "*****@*****.**", "The updated email should be returned"
def test_add_payment_info_to_account():
    profile = Profile()
    payment_info = PaymentInfo('VISA', '0000-1111-2222-3333')
    profile.add_payment_info(payment_info)

    assert profile.payment_info.details == '0000-1111-2222-3333', "The saved payment info should be correct"
def test_check_order_status():
    history = History('Salad', 'delivered', datetime.datetime(2020, 5, 17))
    profile = Profile()
    profile.add_order_history(history)
    assert profile.order_history[0].order_status == 'delivered', "Should be able to check order status from history"
def test_invalid_login():
    profile = Profile()
    account = Account('Shivam', 'shars48', 'password', profile)
    assert account.authenticate('shars48', 'pass') is False, "Valid credentials should allow login"
def test_invalid_email_verification():
    profile = Profile()
    account = Account('Shivam', 'shars48', 'password', profile)
    account.set_email('shivam-xyz.com')
    assert account.email != 'shivam-xyz.com', "Invalid email should not be added"
def test_apply_invalid_discount_coupon():
    coupon = DiscountCoupon('15% off', datetime.datetime(2020, 10, 30))
    profile = Profile()
    profile.add_discount_coupon(coupon)
    assert len(profile.discount_coupon) == 0, "Should not be able to add invalid coupon"
def test_profile_creation():
    profile = Profile()
    account = Account('Shivam', 'shars48', 'password', profile)
    account.set_email('*****@*****.**')

    assert account.name == 'Shivam' and account.email == '*****@*****.**' and account.password == 'password' and account.username == 'shars48', "Account should be created"
def test_delete_account():
    profile = Profile()
    account = Account('Shivam', 'shars48', 'password', profile)
    account.delete_account()
    assert account.authenticate('shars48', 'password') is False, "Should not be able to authenticate after account " \
                                                                 "has been deleted"