solidus_frontend 2.10.5 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_frontend might be problematic. Click here for more details.

Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/frontend/checkout/address.js +1 -1
  3. data/app/assets/javascripts/spree/frontend/checkout/coupon-code.js +1 -1
  4. data/app/controllers/spree/checkout_controller.rb +9 -5
  5. data/app/controllers/spree/orders_controller.rb +9 -9
  6. data/app/controllers/spree/products_controller.rb +1 -1
  7. data/app/views/spree/address/_form.html.erb +15 -8
  8. data/app/views/spree/address/_form_hidden.html.erb +6 -2
  9. data/app/views/spree/checkout/payment/_gateway.html.erb +1 -1
  10. data/app/views/spree/orders/_form.html.erb +1 -1
  11. data/app/views/spree/shared/_address.html.erb +1 -1
  12. data/app/views/spree/shared/_image.html.erb +3 -2
  13. data/solidus_frontend.gemspec +5 -5
  14. metadata +10 -53
  15. data/script/rails +0 -10
  16. data/spec/controllers/controller_helpers_spec.rb +0 -29
  17. data/spec/controllers/locale_controller_spec.rb +0 -57
  18. data/spec/controllers/spree/checkout_controller_spec.rb +0 -610
  19. data/spec/controllers/spree/checkout_controller_with_views_spec.rb +0 -37
  20. data/spec/controllers/spree/content_controller_spec.rb +0 -9
  21. data/spec/controllers/spree/current_order_tracking_spec.rb +0 -47
  22. data/spec/controllers/spree/home_controller_spec.rb +0 -29
  23. data/spec/controllers/spree/orders_controller_ability_spec.rb +0 -90
  24. data/spec/controllers/spree/orders_controller_spec.rb +0 -254
  25. data/spec/controllers/spree/orders_controller_transitions_spec.rb +0 -33
  26. data/spec/controllers/spree/products_controller_spec.rb +0 -38
  27. data/spec/controllers/spree/taxons_controller_spec.rb +0 -14
  28. data/spec/features/address_spec.rb +0 -78
  29. data/spec/features/automatic_promotion_adjustments_spec.rb +0 -49
  30. data/spec/features/caching/products_spec.rb +0 -48
  31. data/spec/features/caching/taxons_spec.rb +0 -21
  32. data/spec/features/cart_spec.rb +0 -85
  33. data/spec/features/checkout_confirm_insufficient_stock_spec.rb +0 -71
  34. data/spec/features/checkout_spec.rb +0 -758
  35. data/spec/features/checkout_unshippable_spec.rb +0 -37
  36. data/spec/features/coupon_code_spec.rb +0 -266
  37. data/spec/features/currency_spec.rb +0 -20
  38. data/spec/features/first_order_promotion_spec.rb +0 -59
  39. data/spec/features/free_shipping_promotions_spec.rb +0 -60
  40. data/spec/features/locale_spec.rb +0 -26
  41. data/spec/features/order_spec.rb +0 -73
  42. data/spec/features/products_spec.rb +0 -291
  43. data/spec/features/promotion_code_invalidation_spec.rb +0 -54
  44. data/spec/features/quantity_promotions_spec.rb +0 -130
  45. data/spec/features/taxons_spec.rb +0 -158
  46. data/spec/features/template_rendering_spec.rb +0 -20
  47. data/spec/fixtures/thinking-cat.jpg +0 -0
  48. data/spec/generators/solidus/views/override_generator_spec.rb +0 -50
  49. data/spec/helpers/base_helper_spec.rb +0 -13
  50. data/spec/helpers/order_helper_spec.rb +0 -14
  51. data/spec/helpers/taxon_filters_helper_spec.rb +0 -12
  52. data/spec/spec_helper.rb +0 -106
  53. data/spec/support/shared_contexts/checkout_setup.rb +0 -12
  54. data/spec/support/shared_contexts/custom_products.rb +0 -28
  55. data/spec/support/shared_contexts/locales.rb +0 -16
  56. data/spec/views/spree/checkout/_summary_spec.rb +0 -11
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- Spree::Order.class_eval do
6
- attr_accessor :did_transition
7
- end
8
-
9
- module Spree
10
- describe OrdersController, type: :controller do
11
- # Regression test for https://github.com/spree/spree/issues/2004
12
- context "with a transition callback on first state" do
13
- let(:order) { Spree::Order.new }
14
-
15
- before do
16
- allow(controller).to receive_messages current_order: order
17
- expect(controller).to receive(:authorize!).at_least(:once).and_return(true)
18
-
19
- first_state, = Spree::Order.checkout_steps.first
20
- Spree::Order.state_machine.after_transition to: first_state do |order|
21
- order.did_transition = true
22
- end
23
- end
24
-
25
- it "correctly calls the transition callback" do
26
- expect(order.did_transition).to be_nil
27
- order.line_items << FactoryBot.create(:line_item)
28
- put :update, params: { checkout: "checkout" }
29
- expect(order.did_transition).to be true
30
- end
31
- end
32
- end
33
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Spree::ProductsController, type: :controller do
6
- let!(:product) { create(:product, available_on: 1.year.from_now) }
7
-
8
- # Regression test for https://github.com/spree/spree/issues/1390
9
- it "allows admins to view non-active products" do
10
- allow(controller).to receive_messages try_spree_current_user: mock_model(Spree.user_class, has_spree_role?: true, last_incomplete_spree_order: nil, spree_api_key: 'fake')
11
- get :show, params: { id: product.to_param }
12
- expect(response.status).to eq(200)
13
- end
14
-
15
- it "cannot view non-active products" do
16
- expect {
17
- get :show, params: { id: product.to_param }
18
- }.to raise_error(ActiveRecord::RecordNotFound)
19
- end
20
-
21
- it "should provide the current user to the searcher class" do
22
- user = mock_model(Spree.user_class, last_incomplete_spree_order: nil, spree_api_key: 'fake')
23
- allow(controller).to receive_messages try_spree_current_user: user
24
- expect_any_instance_of(Spree::Config.searcher_class).to receive(:current_user=).with(user)
25
- get :index
26
- expect(response.status).to eq(200)
27
- end
28
-
29
- # Regression test for https://github.com/spree/spree/issues/2249
30
- it "doesn't error when given an invalid referer" do
31
- current_user = mock_model(Spree.user_class, has_spree_role?: true, last_incomplete_spree_order: nil, generate_spree_api_key!: nil)
32
- allow(controller).to receive_messages try_spree_current_user: current_user
33
- request.env['HTTP_REFERER'] = "not|a$url"
34
-
35
- # Previously a URI::InvalidURIError exception was being thrown
36
- get :show, params: { id: product.to_param }
37
- end
38
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Spree::TaxonsController, type: :controller do
6
- it "should provide the current user to the searcher class" do
7
- taxon = create(:taxon, permalink: "test")
8
- user = mock_model(Spree.user_class, last_incomplete_spree_order: nil, spree_api_key: 'fake')
9
- allow(controller).to receive_messages try_spree_current_user: user
10
- expect_any_instance_of(Spree::Config.searcher_class).to receive(:current_user=).with(user)
11
- get :show, params: { id: taxon.permalink }
12
- expect(response.status).to eq(200)
13
- end
14
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Address", type: :feature, inaccessible: true do
6
- let!(:product) { create(:product, name: "RoR Mug") }
7
- let!(:order) { create(:order_with_totals, state: 'cart') }
8
-
9
- stub_authorization!
10
-
11
- before do
12
- visit spree.root_path
13
-
14
- click_link "RoR Mug"
15
- click_button "add-to-cart-button"
16
-
17
- address = "order_bill_address_attributes"
18
- @country_css = "#{address}_country_id"
19
- @state_select_css = "##{address}_state_id"
20
- @state_name_css = "##{address}_state_name"
21
- end
22
-
23
- context "country requires state", js: true, focus: true do
24
- let!(:canada) { create(:country, name: "Canada", states_required: true, iso: "CA") }
25
- let!(:uk) { create(:country, name: "United Kingdom", states_required: true, iso: "GB") }
26
-
27
- before { stub_spree_preferences(default_country_iso: uk.iso) }
28
-
29
- context "but has no state" do
30
- it "shows the state input field" do
31
- click_button "Checkout"
32
-
33
- select canada.name, from: @country_css
34
- expect(page).to have_no_css(@state_select_css)
35
- expect(page).to have_css("#{@state_name_css}.required")
36
- end
37
- end
38
-
39
- context "and has state" do
40
- before { create(:state, name: "Ontario", country: canada) }
41
-
42
- it "shows the state collection selection" do
43
- click_button "Checkout"
44
-
45
- select canada.name, from: @country_css
46
- expect(page).to have_no_css(@state_name_css)
47
- expect(page).to have_css("#{@state_select_css}.required")
48
- end
49
- end
50
-
51
- context "user changes to country without states required" do
52
- let!(:france) { create(:country, name: "France", states_required: false, iso: "FR") }
53
-
54
- it "clears the state name" do
55
- click_button "Checkout"
56
- select canada.name, from: @country_css
57
- page.find(@state_name_css).set("Toscana")
58
-
59
- select france.name, from: @country_css
60
-
61
- expect(page).to have_no_css(@state_name_css)
62
- expect(page).to have_no_css(@state_select_css)
63
- end
64
- end
65
- end
66
-
67
- context "country does not require state", js: true do
68
- let!(:france) { create(:country, name: "France", states_required: false, iso: "FR") }
69
-
70
- it "shows a disabled state input field" do
71
- click_button "Checkout"
72
-
73
- select france.name, from: @country_css
74
- expect(page).to have_no_css(@state_name_css)
75
- expect(page).to have_css("#{@state_select_css}[disabled]", visible: false)
76
- end
77
- end
78
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Automatic promotions", type: :feature, js: true do
6
- let!(:store) { create(:store) }
7
- let!(:country) { create(:country, name: "United States of America", states_required: true) }
8
- let!(:state) { create(:state, name: "Alabama", country: country) }
9
- let!(:zone) { create(:zone) }
10
- let!(:shipping_method) { create(:shipping_method) }
11
- let!(:payment_method) { create(:check_payment_method) }
12
- let!(:product) { create(:product, name: "RoR Mug", price: 20) }
13
-
14
- let!(:promotion) do
15
- promotion = Spree::Promotion.create!(name: "$10 off when you spend more than $100", apply_automatically: true)
16
-
17
- calculator = Spree::Calculator::FlatRate.new
18
- calculator.preferred_amount = 10
19
-
20
- rule = Spree::Promotion::Rules::ItemTotal.create
21
- rule.preferred_amount = 100
22
- rule.save
23
-
24
- promotion.rules << rule
25
-
26
- action = Spree::Promotion::Actions::CreateAdjustment.create
27
- action.calculator = calculator
28
- action.save
29
-
30
- promotion.actions << action
31
- end
32
-
33
- context "on the cart page" do
34
- before do
35
- visit spree.root_path
36
- click_link product.name
37
- click_button "add-to-cart-button"
38
- end
39
-
40
- it "automatically applies the promotion once the order crosses the threshold" do
41
- fill_in "order_line_items_attributes_0_quantity", with: 10
42
- click_button "Update"
43
- expect(page).to have_content("Promotion ($10 off when you spend more than $100) -$10.00", normalize_ws: true)
44
- fill_in "order_line_items_attributes_0_quantity", with: 1
45
- click_button "Update"
46
- expect(page).not_to have_content("Promotion ($10 off when you spend more than $100) -$10.00", normalize_ws: true)
47
- end
48
- end
49
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'products', type: :feature, caching: true do
6
- let!(:product) { create(:product) }
7
- let!(:product2) { create(:product) }
8
- let!(:taxonomy) { create(:taxonomy) }
9
- let!(:taxon) { create(:taxon, taxonomy: taxonomy) }
10
-
11
- before do
12
- product2.update_column(:updated_at, 1.day.ago)
13
- # warm up the cache
14
- visit spree.root_path
15
-
16
- clear_cache_events
17
- end
18
-
19
- it "reads from cache upon a second viewing" do
20
- visit spree.root_path
21
- expect(cache_writes.count).to eq(0)
22
- end
23
-
24
- it "busts the cache when a product is updated" do
25
- product.update_column(:updated_at, 1.day.from_now)
26
- visit spree.root_path
27
- expect(cache_writes.count).to eq(2)
28
- end
29
-
30
- it "busts the cache when all products are soft-deleted" do
31
- product.discard
32
- product2.discard
33
- visit spree.root_path
34
- expect(cache_writes.count).to eq(1)
35
- end
36
-
37
- it "busts the cache when the newest product is soft-deleted" do
38
- product.discard
39
- visit spree.root_path
40
- expect(cache_writes.count).to eq(1)
41
- end
42
-
43
- it "busts the cache when an older product is soft-deleted" do
44
- product2.discard
45
- visit spree.root_path
46
- expect(cache_writes.count).to eq(1)
47
- end
48
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'taxons', type: :feature, caching: true do
6
- let!(:taxonomy) { create(:taxonomy) }
7
- let!(:taxon) { create(:taxon, taxonomy: taxonomy) }
8
-
9
- before do
10
- # warm up the cache
11
- visit spree.root_path
12
-
13
- clear_cache_events
14
- end
15
-
16
- it "busts the cache when max_level_in_taxons_menu conf changes" do
17
- stub_spree_preferences(max_level_in_taxons_menu: 5)
18
- visit spree.root_path
19
- expect(cache_writes.count).to eq(1)
20
- end
21
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Cart", type: :feature, inaccessible: true do
6
- before { create(:store) }
7
-
8
- it "shows cart icon on non-cart pages" do
9
- visit spree.root_path
10
- expect(page).to have_selector("li#link-to-cart a", visible: true)
11
- end
12
-
13
- it "prevents double clicking the remove button on cart", js: true do
14
- @product = create(:product, name: "RoR Mug")
15
-
16
- visit spree.root_path
17
- click_link "RoR Mug"
18
- click_button "add-to-cart-button"
19
-
20
- # prevent form submit to verify button is disabled
21
- page.execute_script("$('#update-cart').submit(function(){return false;})")
22
-
23
- expect(page).not_to have_selector('button#update-button[disabled]')
24
- page.find(:css, '.delete img').click
25
- expect(page).to have_selector('button#update-button[disabled]')
26
- end
27
-
28
- # Regression test for https://github.com/spree/spree/issues/2006
29
- it "does not error out with a 404 when GET'ing to /orders/populate" do
30
- visit '/orders/populate'
31
- within(".error") do
32
- expect(page).to have_content(I18n.t('spree.populate_get_error'))
33
- end
34
- end
35
-
36
- it 'allows you to remove an item from the cart', js: true do
37
- create(:product, name: "RoR Mug")
38
- visit spree.root_path
39
- click_link "RoR Mug"
40
- click_button "add-to-cart-button"
41
- find('.cart-item-delete .delete').click
42
- expect(page).not_to have_content("Line items quantity must be an integer")
43
- expect(page).not_to have_content("RoR Mug")
44
- expect(page).to have_content("Your cart is empty")
45
-
46
- within "#link-to-cart" do
47
- expect(page).to have_content("EMPTY")
48
- end
49
- end
50
-
51
- it 'allows you to empty the cart', js: true do
52
- create(:product, name: "RoR Mug")
53
- visit spree.root_path
54
- click_link "RoR Mug"
55
- click_button "add-to-cart-button"
56
-
57
- expect(page).to have_content("RoR Mug")
58
- click_on "Empty Cart"
59
- expect(page).to have_content("Your cart is empty")
60
-
61
- within "#link-to-cart" do
62
- expect(page).to have_content("EMPTY")
63
- end
64
- end
65
-
66
- # regression for https://github.com/spree/spree/issues/2276
67
- context "product contains variants but no option values" do
68
- let(:variant) { create(:variant) }
69
- let(:product) { variant.product }
70
-
71
- before { variant.option_values.destroy_all }
72
-
73
- it "still adds product to cart", inaccessible: true do
74
- visit spree.product_path(product)
75
- click_button "add-to-cart-button"
76
-
77
- visit spree.cart_path
78
- expect(page).to have_content(product.name)
79
- end
80
- end
81
- it "should have a surrounding element with data-hook='cart_container'" do
82
- visit spree.cart_path
83
- expect(page).to have_selector("div[data-hook='cart_container']")
84
- end
85
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Checkout confirm page submission", type: :feature do
6
- include_context 'checkout setup'
7
-
8
- context "when the product from the order is not backorderable but has enough stock quantity" do
9
- let(:user) { create(:user) }
10
-
11
- let(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:payment) }
12
- let(:order_product) { order.products.first }
13
- let(:order_stock_item) { order_product.stock_items.first }
14
-
15
- before do
16
- order_stock_item.update! backorderable: false
17
- order_stock_item.set_count_on_hand(1)
18
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
19
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
20
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
21
- end
22
-
23
- context 'when there are not other backorderable stock locations' do
24
- context 'when the customer is on the confirm page and the availabilty drops to zero' do
25
- before do
26
- visit spree.checkout_state_path(:confirm)
27
- order_stock_item.set_count_on_hand(0)
28
- end
29
-
30
- it 'redirects to cart page and shows an unavailable product message' do
31
- click_button "Place Order"
32
- expect(page).to have_content "#{order_product.name} became unavailable"
33
- expect(page).to have_current_path spree.cart_path
34
- end
35
- end
36
- end
37
-
38
- context 'when there is another backorderable stock location' do
39
- before do
40
- create :stock_location, backorderable_default: true, default: false
41
- end
42
-
43
- context 'when the customer is on the confirm page and the availabilty drops to zero' do
44
- before do
45
- visit spree.checkout_state_path(:confirm)
46
- order_stock_item.set_count_on_hand(0)
47
- end
48
-
49
- it "redirects to the address checkout page and shows an availability changed message" do
50
- click_button "Place Order"
51
- error_message = "Quantity selected of #{order_product.name} is not available. Still, items may be available from another stock location, please try again."
52
- expect(page).to have_content error_message
53
- expect(page).to have_current_path spree.checkout_state_path(:address)
54
- end
55
-
56
- it "can still complete the order using the backorderable stock location by restarting the checkout" do
57
- click_button "Place Order"
58
- expect(page).to have_current_path spree.checkout_state_path(:address)
59
- click_button "Save and Continue"
60
- expect(page).to have_current_path spree.checkout_state_path(:delivery)
61
- click_button "Save and Continue"
62
- expect(page).to have_current_path spree.checkout_state_path(:payment)
63
- click_button "Save and Continue"
64
- expect(page).to have_current_path spree.checkout_state_path(:confirm)
65
- click_button "Place Order"
66
- expect(page).to have_content 'Your order has been processed successfully'
67
- end
68
- end
69
- end
70
- end
71
- end