Finishing the Shopping Cart with TDD and TypeScript
Introduction to the Shopping Cart Module
Welcome to your fifth and final unit for this course dedicated to practicing Test Driven Development (TDD) utilizing TypeScript and Jest. We're going to finish building a our ShoppingCart system by adding even more features into our class.
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. Where I wrote the tests for you last time, this time it's all up to you!
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.
Final Requirements for `ShoppingCart` Class
11. Quantity Limit for Single Item
- Description: The cart should enforce a maximum quantity limit of 10 for a single type of item, preventing more than the allowed amount to be added.
- Details
- Utilize the
addItem(item, quantity)method to add items to the cart. - Ensure an error is raised when adding a quantity that exceeds a limit of
10for a single item. - The error message should clearly state 'Maximum quantity exceeded' when the limit is breached.
- Utilize the
- Examples: Attempting to add
11units of{ id: '1', name: 'Book', price: 10 }should throw an error indicating 'Maximum quantity exceeded'.
12. Retrieving Item Details by ID
- Description: When an item is added to the cart, it should be possible to retrieve the item details using its ID, which includes the product information and its quantity in the cart.
- Details
- enable items to be added using an
addItem()method with specific IDs - ensure
getItem(id)returns the correct item details, including the quantity after being added to the cart
- enable items to be added using an
- Examples: adding
{ id: '1', name: 'Book', price: 10 }and retrieving by ID1should return{ id: '1', name: 'Book', price: 10, quantity: 1 }
13. Applying Discount Codes
- Description: Applying a valid discount code should reduce the total price of items in the cart by the specified discount percentage.
- Details
- use
applyDiscountCode(code)method to apply discount - support valid discount codes like
'HOLIDAY25'for a 25% discount - update
getTotal()to reflect the discounted price
- use
- Examples: applying the discount code
'HOLIDAY25'to an item{ id: '1', name: 'Book', price: 100 }should reduce the total to75
