// TODO: Implement ShoppingCart using TDD. // // Domain rules (implement one at a time, test first!): // 1. Add an item (name, price, quantity) to the cart // 2. Get the subtotal (sum of price × quantity for all items) // 3. Remove an item by name // 4. Get total item count (sum of all quantities) // 5. Apply a percentage discount to the subtotal (e.g. 10% off) // 6. Items with zero or negative price are rejected // // CartItem is a Value Object — immutable, validated at construction. // ShoppingCart is stateful — it accumulates items across calls. class CartItem { final String name; final double price; final int quantity; CartItem({required this.name, required this.price, required this.quantity}) { // TODO: validate price > 0 and quantity > 0 } } class ShoppingCart { // TODO: implement void addItem(CartItem item) { throw UnimplementedError(); } void removeItem(String name) { throw UnimplementedError(); } double subtotal() { throw UnimplementedError(); } int itemCount() { throw UnimplementedError(); } double totalAfterDiscount(double discountPercent) { throw UnimplementedError(); } }