Shopping cart

Great test coverage and separation of happy/sad/bad paths!