spree_frontend 3.1.5 → 3.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/spree/products_controller.rb +1 -1
- data/app/views/spree/shared/_taxonomies.html.erb +4 -2
- data/spree_frontend.gemspec +1 -2
- metadata +8 -84
- data/spec/controllers/controller_extension_spec.rb +0 -126
- data/spec/controllers/controller_helpers_spec.rb +0 -122
- data/spec/controllers/spree/checkout_controller_spec.rb +0 -462
- data/spec/controllers/spree/checkout_controller_with_views_spec.rb +0 -36
- data/spec/controllers/spree/content_controller_spec.rb +0 -12
- data/spec/controllers/spree/current_order_tracking_spec.rb +0 -44
- data/spec/controllers/spree/home_controller_spec.rb +0 -47
- data/spec/controllers/spree/orders_controller_ability_spec.rb +0 -96
- data/spec/controllers/spree/orders_controller_spec.rb +0 -134
- data/spec/controllers/spree/orders_controller_transitions_spec.rb +0 -31
- data/spec/controllers/spree/products_controller_spec.rb +0 -87
- data/spec/controllers/spree/taxons_controller_spec.rb +0 -12
- data/spec/features/address_spec.rb +0 -93
- data/spec/features/automatic_promotion_adjustments_spec.rb +0 -47
- data/spec/features/caching/products_spec.rb +0 -59
- data/spec/features/caching/taxons_spec.rb +0 -22
- data/spec/features/cart_spec.rb +0 -90
- data/spec/features/checkout_spec.rb +0 -572
- data/spec/features/checkout_unshippable_spec.rb +0 -34
- data/spec/features/coupon_code_spec.rb +0 -88
- data/spec/features/currency_spec.rb +0 -18
- data/spec/features/free_shipping_promotions_spec.rb +0 -59
- data/spec/features/locale_spec.rb +0 -60
- data/spec/features/microdata_spec.rb +0 -0
- data/spec/features/order_spec.rb +0 -74
- data/spec/features/page_promotions_spec.rb +0 -36
- data/spec/features/products_spec.rb +0 -334
- data/spec/features/taxons_spec.rb +0 -147
- data/spec/features/template_rendering_spec.rb +0 -19
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/frontend_helper_spec.rb +0 -57
- data/spec/helpers/order_helper_spec.rb +0 -12
- data/spec/helpers/taxons_helper_spec.rb +0 -17
- data/spec/spec_helper.rb +0 -126
- data/spec/support/shared_contexts/checkout_setup.rb +0 -10
- data/spec/support/shared_contexts/custom_products.rb +0 -25
- data/spec/support/shared_contexts/product_prototypes.rb +0 -30
- data/spec/views/spree/checkout/_summary_spec.rb +0 -11
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "checkout with unshippable items", type: :feature, inaccessible: true do
|
4
|
-
let!(:stock_location) { create(:stock_location) }
|
5
|
-
let(:order) { OrderWalkthrough.up_to(:delivery) }
|
6
|
-
|
7
|
-
before do
|
8
|
-
OrderWalkthrough.add_line_item!(order)
|
9
|
-
line_item = order.line_items.last
|
10
|
-
stock_item = stock_location.stock_item(line_item.variant)
|
11
|
-
stock_item.adjust_count_on_hand -999
|
12
|
-
stock_item.backorderable = false
|
13
|
-
stock_item.save!
|
14
|
-
|
15
|
-
user = create(:user)
|
16
|
-
order.user = user
|
17
|
-
order.update_with_updater!
|
18
|
-
|
19
|
-
allow_any_instance_of(Spree::CheckoutController).to receive_messages(:current_order => order)
|
20
|
-
allow_any_instance_of(Spree::CheckoutController).to receive_messages(:try_spree_current_user => user)
|
21
|
-
allow_any_instance_of(Spree::CheckoutController).to receive_messages(:skip_state_validation? => true)
|
22
|
-
allow_any_instance_of(Spree::CheckoutController).to receive_messages(:ensure_sufficient_stock_lines => true)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'displays and removes' do
|
26
|
-
visit spree.checkout_state_path(:delivery)
|
27
|
-
expect(page).to have_content('Unshippable Items')
|
28
|
-
|
29
|
-
click_button "Save and Continue"
|
30
|
-
|
31
|
-
order.reload
|
32
|
-
expect(order.line_items.count).to eq 1
|
33
|
-
end
|
34
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Coupon code promotions", type: :feature, js: true do
|
4
|
-
let!(:country) { create(:country, name: "United States of America", states_required: true) }
|
5
|
-
let!(:state) { create(:state, name: "Alabama", country: country) }
|
6
|
-
let!(:zone) { create(:zone) }
|
7
|
-
let!(:shipping_method) { create(:shipping_method) }
|
8
|
-
let!(:payment_method) { create(:check_payment_method) }
|
9
|
-
let!(:product) { create(:product, name: "RoR Mug", price: 20) }
|
10
|
-
let!(:store) { create(:store) }
|
11
|
-
|
12
|
-
context "visitor makes checkout as guest without registration" do
|
13
|
-
def create_basic_coupon_promotion(code)
|
14
|
-
promotion = Spree::Promotion.create!(name: code.titleize,
|
15
|
-
code: code,
|
16
|
-
starts_at: 1.day.ago,
|
17
|
-
expires_at: 1.day.from_now)
|
18
|
-
|
19
|
-
calculator = Spree::Calculator::FlatRate.new
|
20
|
-
calculator.preferred_amount = 10
|
21
|
-
|
22
|
-
action = Spree::Promotion::Actions::CreateItemAdjustments.new
|
23
|
-
action.calculator = calculator
|
24
|
-
action.promotion = promotion
|
25
|
-
action.save
|
26
|
-
|
27
|
-
promotion.reload # so that promotion.actions is available
|
28
|
-
end
|
29
|
-
|
30
|
-
let!(:promotion) { create_basic_coupon_promotion("onetwo") }
|
31
|
-
|
32
|
-
# OrdersController
|
33
|
-
context "on the payment page" do
|
34
|
-
before do
|
35
|
-
visit spree.root_path
|
36
|
-
click_link "RoR Mug"
|
37
|
-
click_button "add-to-cart-button"
|
38
|
-
click_button "Checkout"
|
39
|
-
fill_in "order_email", with: "spree@example.com"
|
40
|
-
fill_in "First Name", with: "John"
|
41
|
-
fill_in "Last Name", with: "Smith"
|
42
|
-
fill_in "Street Address", with: "1 John Street"
|
43
|
-
fill_in "City", with: "City of John"
|
44
|
-
fill_in "Zip", with: "01337"
|
45
|
-
select country.name, from: "Country"
|
46
|
-
select state.name, from: "order[bill_address_attributes][state_id]"
|
47
|
-
fill_in "Phone", with: "555-555-5555"
|
48
|
-
|
49
|
-
# To shipping method screen
|
50
|
-
click_button "Save and Continue"
|
51
|
-
# To payment screen
|
52
|
-
click_button "Save and Continue"
|
53
|
-
end
|
54
|
-
|
55
|
-
it "informs about an invalid coupon code" do
|
56
|
-
fill_in "order_coupon_code", with: "coupon_codes_rule_man"
|
57
|
-
click_button "Save and Continue"
|
58
|
-
expect(page).to have_content(Spree.t(:coupon_code_not_found))
|
59
|
-
end
|
60
|
-
|
61
|
-
it "informs the user about a coupon code which has exceeded its usage" do
|
62
|
-
promotion.update_column(:usage_limit, 5)
|
63
|
-
allow_any_instance_of(promotion.class).to receive_messages(credits_count: 10)
|
64
|
-
|
65
|
-
fill_in "order_coupon_code", with: "onetwo"
|
66
|
-
click_button "Save and Continue"
|
67
|
-
expect(page).to have_content(Spree.t(:coupon_code_max_usage))
|
68
|
-
end
|
69
|
-
|
70
|
-
it "can enter an invalid coupon code, then a real one" do
|
71
|
-
fill_in "order_coupon_code", with: "coupon_codes_rule_man"
|
72
|
-
click_button "Save and Continue"
|
73
|
-
expect(page).to have_content(Spree.t(:coupon_code_not_found))
|
74
|
-
fill_in "order_coupon_code", with: "onetwo"
|
75
|
-
click_button "Save and Continue"
|
76
|
-
expect(page).to have_content("Promotion (Onetwo) -$10.00")
|
77
|
-
end
|
78
|
-
|
79
|
-
context "with a promotion" do
|
80
|
-
it "applies a promotion to an order" do
|
81
|
-
fill_in "order_coupon_code", with: "onetwo"
|
82
|
-
click_button "Save and Continue"
|
83
|
-
expect(page).to have_content("Promotion (Onetwo) -$10.00")
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Switching currencies in backend", :type => :feature do
|
4
|
-
before do
|
5
|
-
create(:base_product, :name => "RoR Mug")
|
6
|
-
end
|
7
|
-
|
8
|
-
# Regression test for #2340
|
9
|
-
it "does not cause current_order to become nil", inaccessible: true do
|
10
|
-
visit spree.root_path
|
11
|
-
click_link "RoR Mug"
|
12
|
-
click_button "Add To Cart"
|
13
|
-
# Now that we have an order...
|
14
|
-
Spree::Config[:currency] = "AUD"
|
15
|
-
expect { visit spree.root_path }.not_to raise_error
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Free shipping promotions", :type => :feature, :js => true do
|
4
|
-
let!(:country) { create(:country, :name => "United States of America", :states_required => true) }
|
5
|
-
let!(:state) { create(:state, :name => "Alabama", :country => country) }
|
6
|
-
let!(:zone) { create(:zone) }
|
7
|
-
let!(:shipping_method) do
|
8
|
-
sm = create(:shipping_method)
|
9
|
-
sm.calculator.preferred_amount = 10
|
10
|
-
sm.calculator.save
|
11
|
-
sm
|
12
|
-
end
|
13
|
-
|
14
|
-
let!(:payment_method) { create(:check_payment_method) }
|
15
|
-
let!(:product) { create(:product, :name => "RoR Mug", :price => 20) }
|
16
|
-
let!(:promotion) do
|
17
|
-
promotion = Spree::Promotion.create!(:name => "Free Shipping",
|
18
|
-
:starts_at => 1.day.ago,
|
19
|
-
:expires_at => 1.day.from_now)
|
20
|
-
|
21
|
-
action = Spree::Promotion::Actions::FreeShipping.new
|
22
|
-
action.promotion = promotion
|
23
|
-
action.save
|
24
|
-
|
25
|
-
promotion.reload # so that promotion.actions is available
|
26
|
-
end
|
27
|
-
|
28
|
-
context "free shipping promotion automatically applied" do
|
29
|
-
before do
|
30
|
-
|
31
|
-
visit spree.root_path
|
32
|
-
click_link "RoR Mug"
|
33
|
-
click_button "add-to-cart-button"
|
34
|
-
click_button "Checkout"
|
35
|
-
fill_in "order_email", :with => "spree@example.com"
|
36
|
-
fill_in "First Name", :with => "John"
|
37
|
-
fill_in "Last Name", :with => "Smith"
|
38
|
-
fill_in "Street Address", :with => "1 John Street"
|
39
|
-
fill_in "City", :with => "City of John"
|
40
|
-
fill_in "Zip", :with => "01337"
|
41
|
-
select country.name, :from => "Country"
|
42
|
-
select state.name, :from => "order[bill_address_attributes][state_id]"
|
43
|
-
fill_in "Phone", :with => "555-555-5555"
|
44
|
-
|
45
|
-
# To shipping method screen
|
46
|
-
click_button "Save and Continue"
|
47
|
-
# To payment screen
|
48
|
-
click_button "Save and Continue"
|
49
|
-
end
|
50
|
-
|
51
|
-
# Regression test for #4428
|
52
|
-
it "applies the free shipping promotion" do
|
53
|
-
within("#checkout-summary") do
|
54
|
-
expect(page).to have_content("Shipping total: $10.00")
|
55
|
-
expect(page).to have_content("Promotion (Free Shipping): -$10.00")
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'setting locale', type: :feature do
|
4
|
-
def with_locale(locale)
|
5
|
-
I18n.locale = locale
|
6
|
-
Spree::Frontend::Config[:locale] = locale
|
7
|
-
yield
|
8
|
-
I18n.locale = 'en'
|
9
|
-
Spree::Frontend::Config[:locale] = 'en'
|
10
|
-
end
|
11
|
-
|
12
|
-
context 'shopping cart link and page' do
|
13
|
-
before do
|
14
|
-
I18n.backend.store_translations(:fr,
|
15
|
-
spree: {
|
16
|
-
cart: 'Panier',
|
17
|
-
shopping_cart: 'Panier'
|
18
|
-
})
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should be in french' do
|
22
|
-
with_locale('fr') do
|
23
|
-
visit spree.root_path
|
24
|
-
click_link 'Panier'
|
25
|
-
expect(page).to have_content('Panier')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'checkout form validation messages' do
|
31
|
-
include_context 'checkout setup'
|
32
|
-
|
33
|
-
let(:error_messages) do
|
34
|
-
{
|
35
|
-
'en' => 'This field is required.',
|
36
|
-
'fr' => 'Ce champ est obligatoire.',
|
37
|
-
'de' => 'Dieses Feld ist ein Pflichtfeld.',
|
38
|
-
}
|
39
|
-
end
|
40
|
-
|
41
|
-
def check_error_text(text)
|
42
|
-
%w(firstname lastname address1 city).each do |attr|
|
43
|
-
expect(find("#b#{attr} label.error").text).to eq(text)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'shows translated jquery.validate error messages', js: true do
|
48
|
-
visit spree.root_path
|
49
|
-
click_link mug.name
|
50
|
-
click_button 'add-to-cart-button'
|
51
|
-
error_messages.each do |locale, message|
|
52
|
-
with_locale(locale) do
|
53
|
-
visit '/checkout/address'
|
54
|
-
find('.form-buttons input[type=submit]').click
|
55
|
-
check_error_text message
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
File without changes
|
data/spec/features/order_spec.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'orders', :type => :feature do
|
4
|
-
let(:order) { OrderWalkthrough.up_to(:complete) }
|
5
|
-
let(:user) { create(:user) }
|
6
|
-
|
7
|
-
before do
|
8
|
-
order.update_attribute(:user_id, user.id)
|
9
|
-
order.shipments.destroy_all
|
10
|
-
allow_any_instance_of(Spree::OrdersController).to receive_messages(:try_spree_current_user => user)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "can visit an order" do
|
14
|
-
# Regression test for current_user call on orders/show
|
15
|
-
expect { visit spree.order_path(order) }.not_to raise_error
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should display line item price" do
|
19
|
-
# Regression test for #2772
|
20
|
-
line_item = order.line_items.first
|
21
|
-
line_item.target_shipment = create(:shipment)
|
22
|
-
line_item.price = 19.00
|
23
|
-
line_item.save!
|
24
|
-
|
25
|
-
visit spree.order_path(order)
|
26
|
-
|
27
|
-
# Tests view spree/shared/_order_details
|
28
|
-
within 'td.price' do
|
29
|
-
expect(page).to have_content "19.00"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should have credit card info if paid with credit card" do
|
34
|
-
create(:payment, :order => order)
|
35
|
-
visit spree.order_path(order)
|
36
|
-
within '.payment-info' do
|
37
|
-
expect(page).to have_content "Ending in 1111"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should have payment method name visible if not paid with credit card" do
|
42
|
-
create(:check_payment, :order => order)
|
43
|
-
visit spree.order_path(order)
|
44
|
-
within '.payment-info' do
|
45
|
-
expect(page).to have_content "Check"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Regression test for #2282
|
50
|
-
context "can support a credit card with blank information" do
|
51
|
-
before do
|
52
|
-
credit_card = create(:credit_card)
|
53
|
-
credit_card.update_column(:cc_type, '')
|
54
|
-
payment = order.payments.first
|
55
|
-
payment.source = credit_card
|
56
|
-
payment.save!
|
57
|
-
end
|
58
|
-
|
59
|
-
specify do
|
60
|
-
visit spree.order_path(order)
|
61
|
-
within '.payment-info' do
|
62
|
-
expect { find("img") }.to raise_error(Capybara::ElementNotFound)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should return the correct title when displaying a completed order" do
|
68
|
-
visit spree.order_path(order)
|
69
|
-
|
70
|
-
within '#order_summary' do
|
71
|
-
expect(page).to have_content("#{Spree.t(:order)} #{order.number}")
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'page promotions', :type => :feature do
|
4
|
-
let!(:product) { create(:product, :name => "RoR Mug", :price => 20) }
|
5
|
-
before do
|
6
|
-
promotion = Spree::Promotion.create!(:name => "$10 off",
|
7
|
-
:path => 'test',
|
8
|
-
:starts_at => 1.day.ago,
|
9
|
-
:expires_at => 1.day.from_now)
|
10
|
-
|
11
|
-
calculator = Spree::Calculator::FlatRate.new
|
12
|
-
calculator.preferred_amount = 10
|
13
|
-
|
14
|
-
action = Spree::Promotion::Actions::CreateItemAdjustments.create(:calculator => calculator)
|
15
|
-
promotion.actions << action
|
16
|
-
|
17
|
-
visit spree.root_path
|
18
|
-
click_link "RoR Mug"
|
19
|
-
click_button "add-to-cart-button"
|
20
|
-
end
|
21
|
-
|
22
|
-
it "automatically applies a page promotion upon visiting" do
|
23
|
-
expect(page).not_to have_content("Promotion ($10 off) -$10.00")
|
24
|
-
visit '/content/test'
|
25
|
-
visit '/cart'
|
26
|
-
expect(page).to have_content("Promotion ($10 off) -$10.00")
|
27
|
-
expect(page).to have_content("Subtotal (1 item) $20.00")
|
28
|
-
end
|
29
|
-
|
30
|
-
it "does not activate an adjustment for a path that doesn't have a promotion" do
|
31
|
-
expect(page).not_to have_content("Promotion ($10 off) -$10.00")
|
32
|
-
visit '/content/cvv'
|
33
|
-
visit '/cart'
|
34
|
-
expect(page).not_to have_content("Promotion ($10 off) -$10.00")
|
35
|
-
end
|
36
|
-
end
|
@@ -1,334 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe "Visiting Products", type: :feature, inaccessible: true do
|
5
|
-
include_context "custom products"
|
6
|
-
|
7
|
-
let(:store_name) do
|
8
|
-
((first_store = Spree::Store.first) && first_store.name).to_s
|
9
|
-
end
|
10
|
-
|
11
|
-
before(:each) do
|
12
|
-
visit spree.root_path
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should be able to show the shopping cart after adding a product to it" do
|
16
|
-
click_link "Ruby on Rails Ringer T-Shirt"
|
17
|
-
expect(page).to have_content("$19.99")
|
18
|
-
|
19
|
-
click_button 'add-to-cart-button'
|
20
|
-
expect(page).to have_content("Shopping Cart")
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "correct displaying of microdata" do
|
24
|
-
let(:products) { Spree::TestingSupport::Microdata::Document.new(page.body).extract_items }
|
25
|
-
let(:ringer) { products.keep_if { |product| product.properties["name"].first.match("Ringer") }.first }
|
26
|
-
|
27
|
-
it "correctly displays the product name via microdata" do
|
28
|
-
expect(ringer.properties["name"]).to eq ["Ruby on Rails Ringer T-Shirt"]
|
29
|
-
end
|
30
|
-
|
31
|
-
it "correctly displays the product image via microdata" do
|
32
|
-
expect(ringer.properties['image'].first).to include '/assets/noimage/small'
|
33
|
-
end
|
34
|
-
|
35
|
-
it "correctly displays the product url via microdata" do
|
36
|
-
expect(ringer.properties["url"]).to eq ["/products/ruby-on-rails-ringer-t-shirt"]
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe 'meta tags and title' do
|
41
|
-
let(:jersey) { Spree::Product.find_by_name('Ruby on Rails Baseball Jersey') }
|
42
|
-
let(:metas) { { meta_description: 'Brand new Ruby on Rails Jersey', meta_title: 'Ruby on Rails Baseball Jersey Buy High Quality Geek Apparel', meta_keywords: 'ror, jersey, ruby' } }
|
43
|
-
|
44
|
-
it 'should return the correct title when displaying a single product' do
|
45
|
-
click_link jersey.name
|
46
|
-
expect(page).to have_title('Ruby on Rails Baseball Jersey - ' + store_name)
|
47
|
-
within('div#product-description') do
|
48
|
-
within('h1.product-title') do
|
49
|
-
expect(page).to have_content('Ruby on Rails Baseball Jersey')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'displays metas' do
|
55
|
-
jersey.update_attributes metas
|
56
|
-
click_link jersey.name
|
57
|
-
expect(page).to have_meta(:description, 'Brand new Ruby on Rails Jersey')
|
58
|
-
expect(page).to have_meta(:keywords, 'ror, jersey, ruby')
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'displays title if set' do
|
62
|
-
jersey.update_attributes metas
|
63
|
-
click_link jersey.name
|
64
|
-
expect(page).to have_title('Ruby on Rails Baseball Jersey Buy High Quality Geek Apparel')
|
65
|
-
end
|
66
|
-
|
67
|
-
it "doesn't use meta_title as heading on page" do
|
68
|
-
jersey.update_attributes metas
|
69
|
-
click_link jersey.name
|
70
|
-
within("h1") do
|
71
|
-
expect(page).to have_content(jersey.name)
|
72
|
-
expect(page).not_to have_content(jersey.meta_title)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'uses product name in title when meta_title set to empty string' do
|
77
|
-
jersey.update_attributes meta_title: ''
|
78
|
-
click_link jersey.name
|
79
|
-
expect(page).to have_title('Ruby on Rails Baseball Jersey - ' + store_name)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
context "using Russian Rubles as a currency" do
|
84
|
-
before do
|
85
|
-
Spree::Config[:currency] = "RUB"
|
86
|
-
end
|
87
|
-
|
88
|
-
let!(:product) do
|
89
|
-
product = Spree::Product.find_by_name("Ruby on Rails Ringer T-Shirt")
|
90
|
-
product.price = 19.99
|
91
|
-
product.tap(&:save)
|
92
|
-
end
|
93
|
-
|
94
|
-
# Regression tests for #2737
|
95
|
-
context "uses руб as the currency symbol" do
|
96
|
-
it "on products page" do
|
97
|
-
visit spree.root_path
|
98
|
-
within("#product_#{product.id}") do
|
99
|
-
within(".price") do
|
100
|
-
expect(page).to have_content("19.99 ₽")
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
it "on product page" do
|
106
|
-
visit spree.product_path(product)
|
107
|
-
within(".price") do
|
108
|
-
expect(page).to have_content("19.99 ₽")
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
it "when adding a product to the cart", js: true do
|
113
|
-
visit spree.product_path(product)
|
114
|
-
click_button "Add To Cart"
|
115
|
-
click_link "Home"
|
116
|
-
within(".cart-info") do
|
117
|
-
expect(page).to have_content("19.99 ₽")
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
it "when on the 'address' state of the cart", js: true do
|
122
|
-
visit spree.product_path(product)
|
123
|
-
click_button "Add To Cart"
|
124
|
-
click_button "Checkout"
|
125
|
-
fill_in "order_email", with: "test@example.com"
|
126
|
-
click_button 'Continue'
|
127
|
-
within("tr[data-hook=item_total]") do
|
128
|
-
expect(page).to have_content("19.99 ₽")
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should be able to search for a product" do
|
135
|
-
fill_in "keywords", with: "shirt"
|
136
|
-
click_button "Search"
|
137
|
-
|
138
|
-
expect(page.all('#products .product-list-item').size).to eq(1)
|
139
|
-
end
|
140
|
-
|
141
|
-
context "a product with variants" do
|
142
|
-
let(:product) { Spree::Product.find_by_name("Ruby on Rails Baseball Jersey") }
|
143
|
-
let(:option_value) { create(:option_value) }
|
144
|
-
let!(:variant) { build(:variant, price: 5.59, product: product, option_values: []) }
|
145
|
-
|
146
|
-
before do
|
147
|
-
# Need to have two images to trigger the error
|
148
|
-
image = File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __FILE__))
|
149
|
-
product.images.create!(:attachment => image)
|
150
|
-
product.images.create!(:attachment => image)
|
151
|
-
|
152
|
-
product.option_types << option_value.option_type
|
153
|
-
variant.option_values << option_value
|
154
|
-
variant.save!
|
155
|
-
end
|
156
|
-
|
157
|
-
it "should be displayed" do
|
158
|
-
expect { click_link product.name }.to_not raise_error
|
159
|
-
end
|
160
|
-
|
161
|
-
it "displays price of first variant listed", js: true do
|
162
|
-
click_link product.name
|
163
|
-
within("#product-price") do
|
164
|
-
expect(page).to have_content variant.price
|
165
|
-
expect(page).not_to have_content Spree.t(:out_of_stock)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
it "doesn't display out of stock for master product" do
|
170
|
-
product.master.stock_items.update_all count_on_hand: 0, backorderable: false
|
171
|
-
|
172
|
-
click_link product.name
|
173
|
-
within("#product-price") do
|
174
|
-
expect(page).not_to have_content Spree.t(:out_of_stock)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
it "doesn't display cart form if all variants (including master) are out of stock" do
|
179
|
-
product.variants_including_master.each { |v| v.stock_items.update_all count_on_hand: 0, backorderable: false }
|
180
|
-
|
181
|
-
click_link product.name
|
182
|
-
within("[data-hook=product_price]") do
|
183
|
-
expect(page).not_to have_content Spree.t(:add_to_cart)
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
context "a product with variants, images only for the variants" do
|
189
|
-
let(:product) { Spree::Product.find_by_name("Ruby on Rails Baseball Jersey") }
|
190
|
-
let(:variant1) { create(:variant, product: product, price: 9.99) }
|
191
|
-
let(:variant2) { create(:variant, product: product, price: 10.99) }
|
192
|
-
|
193
|
-
before do
|
194
|
-
image = File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __FILE__))
|
195
|
-
variant1.images.create!(attachment: image)
|
196
|
-
variant2.images.create!(attachment: image)
|
197
|
-
end
|
198
|
-
|
199
|
-
it "should not display no image available" do
|
200
|
-
visit spree.root_path
|
201
|
-
expect(page).to have_xpath("//img[contains(@src,'thinking-cat')]")
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
context "an out of stock product without variants" do
|
206
|
-
let(:product) { Spree::Product.find_by_name("Ruby on Rails Tote") }
|
207
|
-
|
208
|
-
before do
|
209
|
-
product.master.stock_items.update_all count_on_hand: 0, backorderable: false
|
210
|
-
end
|
211
|
-
|
212
|
-
it "does display out of stock for master product" do
|
213
|
-
click_link product.name
|
214
|
-
within("#product-price") do
|
215
|
-
expect(page).to have_content Spree.t(:out_of_stock)
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
it "doesn't display cart form if master is out of stock" do
|
220
|
-
click_link product.name
|
221
|
-
within("[data-hook=product_price]") do
|
222
|
-
expect(page).not_to have_content Spree.t(:add_to_cart)
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
context 'product with taxons' do
|
228
|
-
let(:product) { Spree::Product.find_by_name("Ruby on Rails Tote") }
|
229
|
-
let(:taxon) { product.taxons.first }
|
230
|
-
|
231
|
-
it 'displays breadcrumbs for the default taxon when none selected' do
|
232
|
-
click_link product.name
|
233
|
-
within("#breadcrumbs") do
|
234
|
-
expect(page).to have_content taxon.name
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'displays selected taxon in breadcrumbs' do
|
239
|
-
taxon = Spree::Taxon.last
|
240
|
-
product.taxons << taxon
|
241
|
-
product.save!
|
242
|
-
visit '/t/' + taxon.to_param
|
243
|
-
click_link product.name
|
244
|
-
within("#breadcrumbs") do
|
245
|
-
expect(page).to have_content taxon.name
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
it "should be able to hide products without price" do
|
251
|
-
expect(page.all('#products .product-list-item').size).to eq(9)
|
252
|
-
Spree::Config.show_products_without_price = false
|
253
|
-
Spree::Config.currency = "CAN"
|
254
|
-
visit spree.root_path
|
255
|
-
expect(page.all('#products .product-list-item').size).to eq(0)
|
256
|
-
end
|
257
|
-
|
258
|
-
|
259
|
-
it "should be able to display products priced under 10 dollars" do
|
260
|
-
within(:css, '#taxonomies') { click_link "Ruby on Rails" }
|
261
|
-
check "Price_Range_Under_$10.00"
|
262
|
-
within(:css, '#sidebar_products_search') { click_button "Search" }
|
263
|
-
expect(page).to have_content("No products found")
|
264
|
-
end
|
265
|
-
|
266
|
-
it "should be able to display products priced between 15 and 18 dollars" do
|
267
|
-
within(:css, '#taxonomies') { click_link "Ruby on Rails" }
|
268
|
-
check "Price_Range_$15.00_-_$18.00"
|
269
|
-
within(:css, '#sidebar_products_search') { click_button "Search" }
|
270
|
-
|
271
|
-
expect(page.all('#products .product-list-item').size).to eq(3)
|
272
|
-
tmp = page.all('#products .product-list-item a').map(&:text).flatten.compact
|
273
|
-
tmp.delete("")
|
274
|
-
expect(tmp.sort!).to eq(["Ruby on Rails Mug", "Ruby on Rails Stein", "Ruby on Rails Tote"])
|
275
|
-
end
|
276
|
-
|
277
|
-
it "should be able to display products priced between 15 and 18 dollars across multiple pages" do
|
278
|
-
Spree::Config.products_per_page = 2
|
279
|
-
within(:css, '#taxonomies') { click_link "Ruby on Rails" }
|
280
|
-
check "Price_Range_$15.00_-_$18.00"
|
281
|
-
within(:css, '#sidebar_products_search') { click_button "Search" }
|
282
|
-
|
283
|
-
expect(page.all('#products .product-list-item').size).to eq(2)
|
284
|
-
products = page.all('#products .product-list-item span[itemprop=name]')
|
285
|
-
expect(products.count).to eq(2)
|
286
|
-
|
287
|
-
find('.pagination .next a').click
|
288
|
-
products = page.all('#products .product-list-item span[itemprop=name]')
|
289
|
-
expect(products.count).to eq(1)
|
290
|
-
end
|
291
|
-
|
292
|
-
it "should be able to display products priced 18 dollars and above" do
|
293
|
-
within(:css, '#taxonomies') { click_link "Ruby on Rails" }
|
294
|
-
check "Price_Range_$18.00_-_$20.00"
|
295
|
-
check "Price_Range_$20.00_or_over"
|
296
|
-
within(:css, '#sidebar_products_search') { click_button "Search" }
|
297
|
-
|
298
|
-
expect(page.all('#products .product-list-item').size).to eq(4)
|
299
|
-
tmp = page.all('#products .product-list-item a').map(&:text).flatten.compact
|
300
|
-
tmp.delete("")
|
301
|
-
expect(tmp.sort!).to eq(["Ruby on Rails Bag",
|
302
|
-
"Ruby on Rails Baseball Jersey",
|
303
|
-
"Ruby on Rails Jr. Spaghetti",
|
304
|
-
"Ruby on Rails Ringer T-Shirt"])
|
305
|
-
end
|
306
|
-
|
307
|
-
it "should be able to put a product without a description in the cart" do
|
308
|
-
product = FactoryGirl.create(:base_product, :description => nil, :name => 'Sample', :price => '19.99')
|
309
|
-
visit spree.product_path(product)
|
310
|
-
expect(page).to have_content "This product has no description"
|
311
|
-
click_button 'add-to-cart-button'
|
312
|
-
expect(page).to have_content "This product has no description"
|
313
|
-
end
|
314
|
-
|
315
|
-
it "shouldn't be able to put a product without a current price in the cart" do
|
316
|
-
product = FactoryGirl.create(:base_product, :description => nil, :name => 'Sample', :price => '19.99')
|
317
|
-
Spree::Config.currency = "CAN"
|
318
|
-
Spree::Config.show_products_without_price = true
|
319
|
-
visit spree.product_path(product)
|
320
|
-
expect(page).to have_content "This product is not available in the selected currency."
|
321
|
-
expect(page).not_to have_content "add-to-cart-button"
|
322
|
-
end
|
323
|
-
|
324
|
-
it "should return the correct title when displaying a single product" do
|
325
|
-
product = Spree::Product.find_by_name("Ruby on Rails Baseball Jersey")
|
326
|
-
click_link product.name
|
327
|
-
|
328
|
-
within("div#product-description") do
|
329
|
-
within("h1.product-title") do
|
330
|
-
expect(page).to have_content("Ruby on Rails Baseball Jersey")
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|