Done testing
[depot.git] / test / integration / user_stories_test.rb
diff --git a/test/integration/user_stories_test.rb b/test/integration/user_stories_test.rb
new file mode 100644 (file)
index 0000000..6c39e75
--- /dev/null
@@ -0,0 +1,59 @@
+require 'test_helper'
+
+class UserStoriesTest < ActionController::IntegrationTest
+  fixtures :products
+
+  # Replace this with your real tests.
+  test "the truth" do
+    assert true
+  end
+
+  # 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_book)
+
+    get "/store/index"
+    assert_response :success
+    assert_template "index"
+
+    xml_http_request :put, "/store/add_to_cart" , :id => ruby_book.id
+    assert_response :success
+
+    cart = session[:cart]
+    assert_equal 1, cart.items.size
+    assert_equal ruby_book, cart.items[0].product
+
+    post "/store/checkout"
+    assert_response :success
+    assert_template "checkout"
+
+    post_via_redirect "/store/save_order" ,
+      :order => { :name     => "Dave Thomas" ,
+                  :address  => "123 The Street" ,
+                  :email    => "dave@pragprog.com" ,
+                  :pay_type => "cheque" }
+    assert_response :success
+    assert_template "index"
+#    assert_template "store/checkout"
+
+    assert_equal 0, session[:cart].items.size
+    orders = Order.find(: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@pragprog.com", order.email
+    assert_equal "cheque",            order.pay_type
+
+    assert_equal 1, order.line_items.size
+    line_item = order.line_items[0]
+    assert_equal ruby_book, line_item.product
+  end
+end