solidus_frontend 2.10.2 → 2.11.0

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.

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 +12 -55
  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