Re-group add to cart specs

This commit is contained in:
Rohan Mitchell
2013-05-27 18:12:59 +10:00
parent a2abcaf7bd
commit 7b332d0f53

View File

@@ -8,140 +8,142 @@ feature %q{
include AuthenticationWorkflow
include WebHelper
scenario "adding a product to the cart with no distributor chosen" do
# Given a product and some distributors
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
create(:product, :distributors => [d2])
# When I add an item to my cart without choosing a distributor
visit spree.product_path p
click_button 'Add To Cart'
# Then I should see an error message
page.should have_content "Please choose a distributor for this order."
# And the product should not have been added to my cart
Spree::Order.last.should be_nil
end
scenario "adding the first product to the cart" do
# Given a product, some distributors and a defined shipping cost
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
create(:product, :distributors => [d2])
p = create(:product, :price => 12.34)
create(:product_distribution, :product => p, :distributor => d1, :shipping_method => create(:shipping_method))
# ... with a flat rate shipping method of cost $1.23
sm = p.product_distributions.first.shipping_method
sm.calculator.preferred_amount = 1.23
sm.calculator.save!
# When I choose a distributor
visit spree.root_path
click_link d2.name
# And I add an item to my cart from a different distributor
visit spree.product_path p
select d1.name, :from => 'distributor_id'
click_button 'Add To Cart'
# Then the correct totals should be displayed
page.should have_selector 'span.item-total', :text => '$12.34'
page.should have_selector 'span.shipping-total', :text => '$1.23'
page.should have_selector 'span.grand-total', :text => '$13.57'
# And the item should be in my cart, with shipping method set for the line item
order = Spree::Order.last
line_item = order.line_items.first
line_item.product.should == p
line_item.shipping_method.should == p.product_distributions.first.shipping_method
# And my order should have its distributor set to the chosen distributor
order.distributor.should == d1
end
it "does not allow the user to change distributor after a product has been added to the cart" do
# Given a product and some distributors
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
# When I add a product to my cart (which sets my distributor)
visit spree.product_path p
select d1.name, :from => 'distributor_id'
click_button 'Add To Cart'
page.should have_content "You are shopping at #{d1.name}"
# Then I should not be able to change distributor
visit spree.root_path
page.should_not have_selector "a[href*='select']", :text => d1.name
page.should_not have_selector "a[href*='select']", :text => d2.name
page.should_not have_selector "a", :text => 'Leave distributor'
end
context "adding a subsequent product to the cart" do
it "does not allow the user to choose a distributor" do
# Given a product under a distributor
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d])
# And a product in my cart
visit spree.product_path p
select d.name, :from => 'distributor_id'
click_button 'Add To Cart'
# When I go to add it again, I should not have a choice of distributor
visit spree.product_path p
page.should_not have_selector 'select#distributor_id'
page.should have_selector '.distributor-fixed', :text => "Your distributor for this order is #{d.name}"
end
it "does not allow the user to add a product from another distributor" do
# Given two products, each at a different distributor
context "with product distribution" do
scenario "adding a product to the cart with no distributor chosen" do
# Given a product and some distributors
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d1])
p2 = create(:product, :distributors => [d2])
p = create(:product, :distributors => [d1])
create(:product, :distributors => [d2])
# When I add one of them to my cart
visit spree.product_path p1
# When I add an item to my cart without choosing a distributor
visit spree.product_path p
click_button 'Add To Cart'
# Then I should see an error message
page.should have_content "Please choose a distributor for this order."
# And the product should not have been added to my cart
Spree::Order.last.should be_nil
end
scenario "adding the first product to the cart" do
# Given a product, some distributors and a defined shipping cost
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
create(:product, :distributors => [d2])
p = create(:product, :price => 12.34)
create(:product_distribution, :product => p, :distributor => d1, :shipping_method => create(:shipping_method))
# ... with a flat rate shipping method of cost $1.23
sm = p.product_distributions.first.shipping_method
sm.calculator.preferred_amount = 1.23
sm.calculator.save!
# When I choose a distributor
visit spree.root_path
click_link d2.name
# And I add an item to my cart from a different distributor
visit spree.product_path p
select d1.name, :from => 'distributor_id'
click_button 'Add To Cart'
# And I attempt to add the other
visit spree.product_path p2
# Then the correct totals should be displayed
page.should have_selector 'span.item-total', :text => '$12.34'
page.should have_selector 'span.shipping-total', :text => '$1.23'
page.should have_selector 'span.grand-total', :text => '$13.57'
# Then I should not be allowed to add the product
page.should_not have_selector "button#add-to-cart-button"
page.should have_content "Please complete your order at #{d1.name} before shopping with another distributor."
# And the item should be in my cart, with shipping method set for the line item
order = Spree::Order.last
line_item = order.line_items.first
line_item.product.should == p
line_item.shipping_method.should == p.product_distributions.first.shipping_method
# And my order should have its distributor set to the chosen distributor
order.distributor.should == d1
end
it "adds products with valid distributors" do
# Given two products, each at the same distributor
d = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d])
p2 = create(:product, :distributors => [d])
it "does not allow the user to change distributor after a product has been added to the cart" do
# Given a product and some distributors
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p = create(:product, :distributors => [d1])
# When I add the first to my cart
visit spree.product_path p1
select d.name, :from => 'distributor_id'
# When I add a product to my cart (which sets my distributor)
visit spree.product_path p
select d1.name, :from => 'distributor_id'
click_button 'Add To Cart'
page.should have_content "You are shopping at #{d1.name}"
# And I add the second
visit spree.product_path p2
click_button 'Add To Cart'
# Then I should not be able to change distributor
visit spree.root_path
page.should_not have_selector "a[href*='select']", :text => d1.name
page.should_not have_selector "a[href*='select']", :text => d2.name
page.should_not have_selector "a", :text => 'Leave distributor'
end
# Then both should be in my cart
visit spree.cart_path
page.should have_selector 'h4 a', :text => p1.name
page.should have_selector 'h4 a', :text => p2.name
context "adding a subsequent product to the cart" do
it "does not allow the user to choose a distributor" do
# Given a product under a distributor
d = create(:distributor_enterprise)
p = create(:product, :distributors => [d])
# And a product in my cart
visit spree.product_path p
select d.name, :from => 'distributor_id'
click_button 'Add To Cart'
# When I go to add it again, I should not have a choice of distributor
visit spree.product_path p
page.should_not have_selector 'select#distributor_id'
page.should have_selector '.distributor-fixed', :text => "Your distributor for this order is #{d.name}"
end
it "does not allow the user to add a product from another distributor" do
# Given two products, each at a different distributor
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d1])
p2 = create(:product, :distributors => [d2])
# When I add one of them to my cart
visit spree.product_path p1
select d1.name, :from => 'distributor_id'
click_button 'Add To Cart'
# And I attempt to add the other
visit spree.product_path p2
# Then I should not be allowed to add the product
page.should_not have_selector "button#add-to-cart-button"
page.should have_content "Please complete your order at #{d1.name} before shopping with another distributor."
end
it "adds products with valid distributors" do
# Given two products, each at the same distributor
d = create(:distributor_enterprise)
p1 = create(:product, :distributors => [d])
p2 = create(:product, :distributors => [d])
# When I add the first to my cart
visit spree.product_path p1
select d.name, :from => 'distributor_id'
click_button 'Add To Cart'
# And I add the second
visit spree.product_path p2
click_button 'Add To Cart'
# Then both should be in my cart
visit spree.cart_path
page.should have_selector 'h4 a', :text => p1.name
page.should have_selector 'h4 a', :text => p2.name
end
end
end
context "with distribution via order cycle" do
context "with order cycle distribution" do
it "allows us to add two products from the same distributor" do
# Given two products, each at the same distributor
d = create(:distributor_enterprise)
@@ -164,7 +166,7 @@ feature %q{
page.should have_selector 'h4 a', :text => p2.name
end
it "offers to automatically change distributors when there is only one choice", js: true do
it "offers to automatically change distributors when there is only one choice" do
# Given two products, one available at only one distributor
d1 = create(:distributor_enterprise)
d2 = create(:distributor_enterprise)