Activity 1

Create a migration that copies the product price into the line item, and add_product method in the Cart model to capture the price whenever a new line item is created.

Hint: use LineItem.all.each to iterate over all of the existing line items inside your migration.

Discuss

Activity 2

Add unit tests which add unique products and duplicate products. Note that you will need to modify the fixture to refer to products and carts by name, for example product: ruby.

Hint: add two tests to test/unit/cart_test.rb; in one test create a cart, add two different books to the cart, and then make assertions as to what the cart.line_items.size and cart.total_price should be. Make sure to save the LineItems that you create before making these assertions.

Discuss

Activity 3

Check products and line items for other places where a user friendly error message would be in order.

Hint: what about a price too high or a image_url that is not unique? You also aren’t limited to the validates method as Rails also has a validate method that can enforce any restriction that you can express via code.

Discuss

Activity 4

Add the ability to delete individual line items from the cart. This will require buttons on each line, and such buttons will need to be linked to the destroy action in the LineItemsController

Hint: the destroy action currently redirects to the line_items_url upon completion. Is this where you want it to go? If you change this, be sure to update your unit test. Also consider adding a :notice. If you do so, make sure that the target view displays this notice.

Discuss