def test_offer_two_offers():
    checkout = Checkout()
    checkout.add_item(item_b)
    checkout.add_item(item_b)
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    assert checkout.get_total_cost() == 45 + 130
def test_offer_price_items_not_in_order():
    checkout = Checkout()
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    checkout.add_item(item_b)
    checkout.add_item(item_a)
    assert checkout.get_total_cost() == 130 + 30
 def setUp(self):
     self.c = Checkout()
class CheckoutTest(TestCase):
    def setUp(self):
        self.c = Checkout()

    def test_total_with_empty_scan(self):
        self.c.scan('')
        self.assertEqual(0, self.c.total())

    def test_total_with_AAA_scan(self):
        self.c.scan('AAA')
        self.assertEqual(130, self.c.total())

    def test_total_with_AAAAAA_scan(self):
        self.c.scan('AAAAAA')
        self.assertEqual(260, self.c.total())

    def test_total_with_B_scan(self):
        self.c.scan('B')
        self.assertEqual(30, self.c.total())

    def test_total_with_BB_scan(self):
        self.c.scan('BB')
        self.assertEqual(45, self.c.total())

    def test_total_with_BB_scan(self):
        self.c.scan('BBB')
        self.assertEqual(75, self.c.total())

    def test_total_with_C_scan(self):
        self.c.scan('C')
        self.assertEqual(20, self.c.total())

    def test_total_with_CC_scan(self):
        self.c.scan('CC')
        self.assertEqual(40, self.c.total())

    def test_total_with_CCC_scan(self):
        self.c.scan('CCC')
        self.assertEqual(60, self.c.total())

    def test_total_with_D_scan(self):
        self.c.scan('C')
        self.assertEqual(20, self.c.total())

    def test_total_with_DD_scan(self):
        self.c.scan('CC')
        self.assertEqual(40, self.c.total())

    def test_total_with_DDD_scan(self):
        self.c.scan('CCC')
        self.assertEqual(60, self.c.total())

    def test_total_with_ABAABDACCD_scan(self):
        self.c.scan('ABAABDACCD')
        self.assertEqual(295, self.c.total())

    def test_total_with_E_scan(self):
        self.c.scan('E')
        self.assertEqual(0, self.c.total())

    def test_total_with_11_scan(self):
        self.c.scan(11)
        self.assertEqual(0, self.c.total())

    def test_total_scan_11AAABE(self):
        self.c.scan('11AAABBE')
        self.assertEqual(175, self.c.total())
def test_offer_price_two_items():
    checkout = Checkout()
    checkout.add_item(item_b)
    checkout.add_item(item_b)
    assert checkout.get_total_cost() == 45
def test_offer_price_tree_items_duplicate_offer():
    checkout = Checkout()
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    checkout.add_item(item_a)

    checkout.add_item(item_a)
    checkout.add_item(item_a)
    checkout.add_item(item_a)

    assert checkout.get_total_cost() == 150 + 130
def test_offer_price_tree_items():
    checkout = Checkout()
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    checkout.add_item(item_a)
    assert checkout.get_total_cost() == 130
def test_simple_price_two_items():
    checkout = Checkout()
    checkout.add_item(item_a)
    checkout.add_item(item_b)
    assert checkout.get_total_cost() == 80
def test_simple_price():
    checkout = Checkout()
    checkout.add_item(item_a)
    assert checkout.get_total_cost() == 50
def test_simple_no_items():
    checkout = Checkout()
    assert checkout.get_total_cost() == 0
def test_simple_add_items():
    checkout = Checkout()
    checkout.add_item(item_a)
    checkout.add_item(item_b)
    assert len(checkout.get_items()) == 2