Created
August 14, 2019 13:05
-
-
Save gatarelib/8c55a91dd4a9bf112e2243663ab0a1b4 to your computer and use it in GitHub Desktop.
Andela - Python D2 Software Developer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ShoppingCart(object): | |
def __init__(self): | |
self.total = 0 | |
self.items = {} | |
def add_item(self, item_name, quantity, price): | |
self.total += quantity * price | |
if type(item_name) == str and quantity > 0: | |
self.items.update({item_name: quantity}) | |
def remove_item(self, item_name, quantity, price): | |
if quantity >= self.items[item_name] and quantity >= 1: | |
items_cost = price * self.items[item_name] | |
self.total -= items_cost | |
del self.items[item_name] | |
else: | |
self.total -= quantity * price | |
self.items[item_name] -= quantity | |
def checkout(self, cash_paid): | |
balance = 0 | |
if cash_paid < self.total: | |
return "Cash paid not enough" | |
balance = cash_paid - self.total | |
return balance | |
class Shop(ShoppingCart): | |
def __init__(self): | |
self.quantity = 100 | |
def remove_item(self): | |
self.quantity -= 1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest; | |
class Test(unittest.TestCase): | |
def setUp(self): | |
self.cart = ShoppingCart() | |
self.shop = Shop() | |
def test_cart_property_initialization(self): | |
self.assertEqual(self.cart.total, 0, msg='Initial value of total not correct') | |
self.assertIsInstance(self.cart.items, dict, msg='Items is not a dictionary') | |
def test_add_item(self): | |
self.cart.add_item('Mango', 3, 10) | |
self.assertEqual(self.cart.total, 30, msg='Cart total not correct after adding items') | |
self.assertEqual(self.cart.items['Mango'], 3, msg='Quantity of items not correct after adding item') | |
def test_add_item_hidden(self): | |
self.cart.add_item('Mango', 3, 10) | |
self.cart.add_item('Orange', 16, 10) | |
self.assertEqual(self.cart.total, 190, msg='Cart total not correct after adding items') | |
self.assertEqual(self.cart.items['Orange'], 16, msg='Quantity of items not correct after adding item') | |
def test_remove_item(self): | |
self.cart.add_item('Mango', 3, 10) | |
self.cart.remove_item('Mango', 2, 10) | |
self.assertEqual(self.cart.total, 10, msg='Cart total not correct after removing item') | |
self.assertEqual(self.cart.items['Mango'], 1, msg='Quantity of items not correct after removing item') | |
def test_remove_item_hidden(self): | |
self.cart.add_item('Mango', 3, 10) | |
self.cart.add_item('Orange', 16, 10) | |
self.cart.remove_item('Mango', 2, 10) | |
self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item') | |
self.assertEqual(self.cart.items['Mango'], 1, msg='Quantity of items not correct after removing item') | |
self.cart.remove_item('Mango', 2, 10) | |
self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item') | |
with self.assertRaises(KeyError): | |
self.cart.items['Mango'] | |
def test_checkout_returns_correct_value(self): | |
self.cart.add_item('Mango', 3, 10) | |
self.cart.add_item('Orange', 16, 10) | |
self.assertEqual(self.cart.checkout(265), 75, msg='Balance of checkout not correct') | |
self.assertEqual(self.cart.checkout(25), 'Cash paid not enough', msg='Balance of checkout not correct') | |
def test_shop_is_instance_of_shopping_cart(self): | |
self.assertTrue(isinstance(self.shop, ShoppingCart), msg='Shop is not a subclass of ShoppingCart') | |
def test_shop_initializaton(self): | |
self.assertEqual(self.shop.quantity, 100, msg='Shop quantity not initialized correctly') | |
def test_shop_remove_item_method(self): | |
for i in range(15): | |
self.shop.remove_item() | |
self.assertEqual(self.shop.quantity, 85) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment