#--- # Excerpted from "Agile Web Development with Rails", # published by The Pragmatic Bookshelf. # Copyrights apply to this code. It may not be used to create training material, # courses, books, articles, and the like. Contact us if you are in doubt. # We make no guarantees that this code is fit for any purpose. # Visit http://www.pragmaticprogrammer.com/titles/rails4 for more book information. #--- require 'test_helper' class UserStoriesTest < ActionDispatch::IntegrationTest fixtures :products # A user goes to the index page. They select a product, adding it to their # cart, and check out, filling in their details on the checkout form. When # they submit, an order is created containing their information, along with a # single line item corresponding to the product they added to their cart. test "buying a product" do LineItem.delete_all Order.delete_all ruby_book = products(:ruby) get "/" assert_response :success assert_template "index" xml_http_request :post, '/line_items', product_id: ruby_book.id assert_response :success cart = Cart.find(session[:cart_id]) assert_equal 1, cart.line_items.size assert_equal ruby_book, cart.line_items[0].product get "/orders/new" assert_response :success assert_template "new" post_via_redirect "/orders", order: { name: "Dave Thomas", address: "123 The Street", email: "dave@example.com", pay_type: "Check" } assert_response :success assert_template "index" cart = Cart.find(session[:cart_id]) assert_equal 0, cart.line_items.size orders = Order.all assert_equal 1, orders.size order = orders[0] assert_equal "Dave Thomas", order.name assert_equal "123 The Street", order.address assert_equal "dave@example.com", order.email assert_equal "Check", order.pay_type assert_equal 1, order.line_items.size line_item = order.line_items[0] assert_equal ruby_book, line_item.product mail = ActionMailer::Base.deliveries.last assert_equal ["dave@example.com"], mail.to assert_equal 'Sam Ruby ', mail[:from].value assert_equal "Pragmatic Store Order Confirmation", mail.subject end end