Lesson 4
Implementing More Features for the Shopping Cart
More about the Shopping Cart Module

Welcome to your fourth unit for this course dedicated to practicing Test Driven Development (TDD). We're going to continue building our ShoppingCart system by adding even more features.

In this course, emphasis is placed on hands-on practice, where you'll receive requirements through tests, one at a time. Your task is to write tests AND implement code that makes each test pass, simulating a real-world TDD environment.

Remember to use the core concepts of the Red-Green-Refactor cycle while completing these coding exercises. I'm still here to help! Just ask.

More Requirements for `ShoppingCart` Class
6. Removing a Non-Existent Item
  • Description: Trying to remove an item that is not present in the cart should throw an exception, indicating that the item was not found.
  • Details
    • Implement the removal through a RemoveItem(int id) method.
    • Ensure the method throws an exception with an appropriate message if the item is not found in the cart.
  • Examples: Attempting to remove an item with Id: 999 should throw an exception with the message "Item not found".
7. Applying Percentage Discount
  • Description: Applying a percentage discount should adjust the total price of the items in the cart accordingly.
  • Details
    • Use the ApplyDiscount(double percentage) method to apply a percentage discount to the total.
    • Ensure GetTotal() returns the adjusted price after applying the discount.
  • Examples: Applying a 10% discount to a total price of 100 should result in a new total of 90.
8. Applying a Bulk Discount
  • Description: Automatically apply a 10% discount when the total price of items in the cart exceeds $150.
  • Details
    • If the total exceeds 150, the 10% discount should be automatically applied.
    • The GetTotal() method should return the discounted total when the discount is applicable.
  • Examples: Adding an "Book" with price 200 should result in a total of 180 after applying the bulk discount
9. Clearing All Items
  • Description: The cart should have the functionality to remove all items, resetting both the item count and total price to zero.
  • Details
    • Implement a Clear() method to remove all items from the cart.
    • Ensure GetItemCount() returns 0 after clearing.
    • Verify GetTotal() is 0 after clearing.
  • Examples: If there are multiple items in the cart, calling Clear should leave the count as 0 and the total as 0.
10. Updating Item Quantity
  • Description: When the quantity of an item in the cart is changed, both the item count and total price should accurately reflect the new quantity.
  • Details
    • Allow item quantities to be updated using an UpdateQuantity(int id, int quantity) method.
    • Ensure GetItemCount() returns the correct total item count after the quantity is updated.
    • Ensure GetTotal() returns the correct total price after the quantity is updated.
  • Examples: Updating the quantity of a "Book" with price 10 from 2 to 3 should result in a count of 3 and a total of 30.
Summary and Preparation for Practice Exercises

In this unit, you explored the design of test cases for a new ShoppingCart class, focusing on essential features like handling an empty cart, adding items, managing item quantities, and removing items. Now it's your turn to ensure that the described functionality is implemented by writing comprehensive test cases and ensuring that the test passes with the least amount of code needed.

As you undertake these exercises, remember to engage in the Red-Green-Refactor cycle. Be sure to practice writing tests first and do not write implementation code unless the test asks for it.

Red! Green! Refactor!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.