solidus_frontend 2.10.0.beta1 → 2.10.5
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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/spree/frontend/screen.css.scss +3 -3
- data/app/controllers/spree/checkout_controller.rb +21 -5
- data/app/controllers/spree/orders_controller.rb +6 -2
- data/lib/generators/solidus/views/override_generator.rb +3 -2
- data/lib/spree/frontend/middleware/seo_assist.rb +4 -4
- data/solidus_frontend.gemspec +1 -1
- data/spec/controllers/spree/checkout_controller_spec.rb +41 -12
- data/spec/controllers/spree/orders_controller_spec.rb +25 -0
- data/spec/features/checkout_spec.rb +59 -0
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce7f908d3872005dd581845445d085019bd2a9386418024ac13c0a80b07182cb
|
4
|
+
data.tar.gz: 1e99aabbf189a2731f6bdf656312e30c66fa683d2246d679a2ae825003857fce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a731ec7c6b6919a6a45b4c4774eaad542eb9b81a175f3bec58835cedb357da13c3db0c98b142ab123ef50d6825deb84a44ee407986599ee03dbee0aad1e0a2df
|
7
|
+
data.tar.gz: 20a84b9001b6f4de3a8ed97e817d2ce942eb7111d3619505de4d721ca3eb46fe24cb7c034e0d3daf24216b2f078fd76754710dcb2523b38d376bdbbc01f98b0f
|
@@ -963,8 +963,8 @@ p[data-hook="use_billing"] {
|
|
963
963
|
}
|
964
964
|
|
965
965
|
input[type="text"] {
|
966
|
-
flex:
|
967
|
-
width:
|
966
|
+
flex: 1 auto;
|
967
|
+
width: 50%;
|
968
968
|
margin-right: 5px;
|
969
969
|
}
|
970
970
|
|
@@ -1268,7 +1268,7 @@ table.order-summary {
|
|
1268
1268
|
// # Logo
|
1269
1269
|
#logo {
|
1270
1270
|
padding: 20px 0;
|
1271
|
-
|
1271
|
+
|
1272
1272
|
> a {
|
1273
1273
|
display: inline-block;
|
1274
1274
|
}
|
@@ -17,7 +17,7 @@ module Spree
|
|
17
17
|
|
18
18
|
before_action :associate_user
|
19
19
|
before_action :check_authorization
|
20
|
-
before_action :apply_coupon_code
|
20
|
+
before_action :apply_coupon_code, only: [:update]
|
21
21
|
|
22
22
|
before_action :setup_for_current_state, only: [:edit, :update]
|
23
23
|
|
@@ -87,11 +87,23 @@ module Spree
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def update_params
|
90
|
-
|
91
|
-
|
90
|
+
case params[:state].to_sym
|
91
|
+
when :address
|
92
|
+
massaged_params.require(:order).permit(
|
93
|
+
permitted_checkout_address_attributes
|
94
|
+
)
|
95
|
+
when :delivery
|
96
|
+
massaged_params.require(:order).permit(
|
97
|
+
permitted_checkout_delivery_attributes
|
98
|
+
)
|
99
|
+
when :payment
|
100
|
+
massaged_params.require(:order).permit(
|
101
|
+
permitted_checkout_payment_attributes
|
102
|
+
)
|
92
103
|
else
|
93
|
-
|
94
|
-
|
104
|
+
massaged_params.fetch(:order, {}).permit(
|
105
|
+
permitted_checkout_confirm_attributes
|
106
|
+
)
|
95
107
|
end
|
96
108
|
end
|
97
109
|
|
@@ -137,6 +149,10 @@ module Spree
|
|
137
149
|
redirect_to(spree.cart_path) && return unless @order
|
138
150
|
end
|
139
151
|
|
152
|
+
# Allow the customer to only go back or stay on the current state
|
153
|
+
# when trying to change it via params[:state]. It's not allowed to
|
154
|
+
# jump forward and skip states (unless #skip_state_validation? is
|
155
|
+
# truthy).
|
140
156
|
def set_state_if_present
|
141
157
|
if params[:state]
|
142
158
|
redirect_to checkout_state_path(@order.state) if @order.can_go_to_state?(params[:state]) && !skip_state_validation?
|
@@ -42,6 +42,10 @@ module Spree
|
|
42
42
|
@order = current_order || Spree::Order.incomplete.find_or_initialize_by(guest_token: cookies.signed[:guest_token])
|
43
43
|
authorize! :read, @order, cookies.signed[:guest_token]
|
44
44
|
associate_user
|
45
|
+
if params[:id] && @order.number != params[:id]
|
46
|
+
flash[:error] = t('spree.cannot_edit_orders')
|
47
|
+
redirect_to cart_path
|
48
|
+
end
|
45
49
|
end
|
46
50
|
|
47
51
|
# Adds a new item to the order (creating a new order if none already exists)
|
@@ -59,8 +63,8 @@ module Spree
|
|
59
63
|
|
60
64
|
begin
|
61
65
|
@line_item = @order.contents.add(variant, quantity)
|
62
|
-
rescue ActiveRecord::RecordInvalid =>
|
63
|
-
@order.errors.add(:base,
|
66
|
+
rescue ActiveRecord::RecordInvalid => error
|
67
|
+
@order.errors.add(:base, error.record.errors.full_messages.join(", "))
|
64
68
|
end
|
65
69
|
|
66
70
|
respond_with(@order) do |format|
|
@@ -24,6 +24,7 @@ module Solidus
|
|
24
24
|
def copy_views
|
25
25
|
views_to_copy.each do |file|
|
26
26
|
next if File.directory?(file)
|
27
|
+
|
27
28
|
dest_file = Pathname.new(file).relative_path_from(source_dir)
|
28
29
|
copy_file file, Rails.root.join('app', 'views', 'spree', dest_file)
|
29
30
|
end
|
@@ -33,8 +34,8 @@ module Solidus
|
|
33
34
|
|
34
35
|
def views_to_copy
|
35
36
|
if @options['only']
|
36
|
-
VIEWS.select do |
|
37
|
-
Pathname.new(
|
37
|
+
VIEWS.select do |view|
|
38
|
+
Pathname.new(view).relative_path_from(source_dir).to_s.include?(@options['only'])
|
38
39
|
end
|
39
40
|
else
|
40
41
|
VIEWS
|
@@ -38,11 +38,11 @@ module Spree
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def build_query(params)
|
41
|
-
params.map { |
|
42
|
-
if
|
43
|
-
build_query(
|
41
|
+
params.map { |key, value|
|
42
|
+
if value.class == Array
|
43
|
+
build_query(value.map { |parameter| ["#{key}[]", parameter] })
|
44
44
|
else
|
45
|
-
|
45
|
+
key + "=" + Rack::Utils.escape(value)
|
46
46
|
end
|
47
47
|
}.join("&")
|
48
48
|
end
|
data/solidus_frontend.gemspec
CHANGED
@@ -68,7 +68,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
68
68
|
it 'should check if the user is authorized for :edit' do
|
69
69
|
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
70
70
|
request.cookie_jar.signed[:guest_token] = token
|
71
|
-
post :update, params: { state: 'address' }
|
71
|
+
post :update, params: { state: 'address', order: { bill_address_attributes: address_params } }
|
72
72
|
end
|
73
73
|
|
74
74
|
context "save successful" do
|
@@ -96,7 +96,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should assign order" do
|
99
|
-
post :update, params: { state: "address" }
|
99
|
+
post :update, params: { state: "address", order: { bill_address_attributes: address_params } }
|
100
100
|
expect(assigns[:order]).not_to be_nil
|
101
101
|
end
|
102
102
|
|
@@ -271,6 +271,31 @@ describe Spree::CheckoutController, type: :controller do
|
|
271
271
|
expect(order.payments).to be_empty
|
272
272
|
end
|
273
273
|
end
|
274
|
+
|
275
|
+
context 'trying to change the address' do
|
276
|
+
let(:params) do
|
277
|
+
{
|
278
|
+
state: 'payment',
|
279
|
+
order: {
|
280
|
+
payments_attributes: [
|
281
|
+
{
|
282
|
+
payment_method_id: payment_method.id.to_s,
|
283
|
+
source_attributes: attributes_for(:credit_card)
|
284
|
+
}
|
285
|
+
],
|
286
|
+
ship_address_attributes: {
|
287
|
+
zipcode: 'TEST'
|
288
|
+
}
|
289
|
+
}
|
290
|
+
}
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'does not change the address' do
|
294
|
+
expect do
|
295
|
+
post :update, params: params
|
296
|
+
end.not_to change { order.reload.ship_address.zipcode }
|
297
|
+
end
|
298
|
+
end
|
274
299
|
end
|
275
300
|
|
276
301
|
context "when in the confirm state" do
|
@@ -310,16 +335,18 @@ describe Spree::CheckoutController, type: :controller do
|
|
310
335
|
end
|
311
336
|
|
312
337
|
it "should not assign order" do
|
313
|
-
post :update, params: { state: "address", email: ''
|
338
|
+
post :update, params: { state: "address", order: { email: ''} }
|
314
339
|
expect(assigns[:order]).not_to be_nil
|
315
340
|
end
|
316
341
|
|
317
342
|
it "should not change the order state" do
|
318
|
-
|
343
|
+
expect do
|
344
|
+
post :update, params: { state: 'address', order: { bill_address_attributes: address_params } }
|
345
|
+
end.not_to change { order.reload.state }
|
319
346
|
end
|
320
347
|
|
321
348
|
it "should render the edit template" do
|
322
|
-
post :update, params: { state: 'address' }
|
349
|
+
post :update, params: { state: 'address', order: { bill_address_attributes: address_params } }
|
323
350
|
expect(response).to render_template :edit
|
324
351
|
end
|
325
352
|
end
|
@@ -342,7 +369,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
342
369
|
before do
|
343
370
|
order.update! user: user
|
344
371
|
allow(order).to receive(:next).and_raise(Spree::Core::GatewayError.new("Invalid something or other."))
|
345
|
-
post :update, params: { state: "address" }
|
372
|
+
post :update, params: { state: "address", order: { bill_address_attributes: address_params } }
|
346
373
|
end
|
347
374
|
|
348
375
|
it "should render the edit template and display exception message" do
|
@@ -373,7 +400,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
373
400
|
end
|
374
401
|
|
375
402
|
it "due to the order having errors" do
|
376
|
-
put :update, params: { state: order.state, order: {} }
|
403
|
+
put :update, params: { state: order.state, order: { bill_address_attributes: address_params } }
|
377
404
|
expect(flash[:error]).to eq("Base error\nAdjustments error")
|
378
405
|
expect(response).to redirect_to(spree.checkout_state_path('address'))
|
379
406
|
end
|
@@ -387,7 +414,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
387
414
|
end
|
388
415
|
|
389
416
|
it "due to no available shipping rates for any of the shipments" do
|
390
|
-
put :update, params: { state: "address", order: {} }
|
417
|
+
put :update, params: { state: "address", order: { bill_address_attributes: address_params } }
|
391
418
|
expect(flash[:error]).to eq(I18n.t('spree.items_cannot_be_shipped'))
|
392
419
|
expect(response).to redirect_to(spree.checkout_state_path('address'))
|
393
420
|
end
|
@@ -437,7 +464,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
437
464
|
end
|
438
465
|
|
439
466
|
it "redirects the customer to the cart page with an error message" do
|
440
|
-
put :update, params: { state: order.state, order: {} }
|
467
|
+
put :update, params: { state: order.state, order: { bill_address_attributes: address_params } }
|
441
468
|
expect(flash[:error]).to eq(I18n.t('spree.insufficient_stock_for_order'))
|
442
469
|
expect(response).to redirect_to(spree.cart_path)
|
443
470
|
end
|
@@ -494,9 +521,11 @@ describe Spree::CheckoutController, type: :controller do
|
|
494
521
|
allow(controller).to receive_messages check_authorization: true
|
495
522
|
end
|
496
523
|
|
497
|
-
|
524
|
+
# This does not test whether the shipping address is set via params.
|
525
|
+
# It only tests whether it is set in the before action.
|
526
|
+
it "doesn't set a default shipping address on the order" do
|
498
527
|
expect(order).to_not receive(:ship_address=)
|
499
|
-
post :update, params: { state: order.state }
|
528
|
+
post :update, params: { state: order.state, order: { bill_address_attributes: address_params } }
|
500
529
|
end
|
501
530
|
|
502
531
|
it "doesn't remove unshippable items before payment" do
|
@@ -511,7 +540,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
511
540
|
allow(controller).to receive_messages check_authorization: true
|
512
541
|
|
513
542
|
expect {
|
514
|
-
post :update, params: { state: "payment" }
|
543
|
+
post :update, params: { state: "payment", order: { email: "johndoe@example.com"} }
|
515
544
|
}.to change { order.line_items.to_a.size }.from(1).to(0)
|
516
545
|
end
|
517
546
|
|
@@ -102,6 +102,31 @@ describe Spree::OrdersController, type: :controller do
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
context '#edit' do
|
106
|
+
before do
|
107
|
+
allow(controller).to receive :authorize!
|
108
|
+
allow(controller).to receive_messages current_order: order
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should render cart' do
|
112
|
+
get :edit, params: { id: order.number }
|
113
|
+
|
114
|
+
expect(flash[:error]).to be_nil
|
115
|
+
expect(response).to be_ok
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'with another order number than the current_order' do
|
119
|
+
let(:other_order) { create(:completed_order_with_totals) }
|
120
|
+
|
121
|
+
it 'should display error message' do
|
122
|
+
get :edit, params: { id: other_order.number }
|
123
|
+
|
124
|
+
expect(flash[:error]).to eq "You may only edit your current shopping cart."
|
125
|
+
expect(response).to redirect_to cart_path
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
105
130
|
context "#update" do
|
106
131
|
context "with authorization" do
|
107
132
|
before do
|
@@ -374,6 +374,14 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
374
374
|
expect(page).to have_current_path(spree.order_path(Spree::Order.last))
|
375
375
|
expect(page).to have_content('Ending in 1111')
|
376
376
|
end
|
377
|
+
|
378
|
+
it "allows user to save a billing address associated to the credit card" do
|
379
|
+
choose "use_existing_card_no"
|
380
|
+
fill_in_credit_card
|
381
|
+
|
382
|
+
click_on "Save and Continue"
|
383
|
+
expect(Spree::CreditCard.last.address).to be_present
|
384
|
+
end
|
377
385
|
end
|
378
386
|
|
379
387
|
# regression for https://github.com/spree/spree/issues/2921
|
@@ -672,6 +680,57 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
672
680
|
end
|
673
681
|
end
|
674
682
|
|
683
|
+
# Regression test for: https://github.com/solidusio/solidus/issues/2998
|
684
|
+
context 'when two shipping categories are available' do
|
685
|
+
let!(:first_category) { create(:shipping_category) }
|
686
|
+
let!(:second_category) { create(:shipping_category) }
|
687
|
+
|
688
|
+
let!(:first_shipping_method) do
|
689
|
+
create(:shipping_method,
|
690
|
+
shipping_categories: [first_category],
|
691
|
+
stores: [store])
|
692
|
+
end
|
693
|
+
|
694
|
+
let!(:second_shipping_method) do
|
695
|
+
create(:shipping_method,
|
696
|
+
shipping_categories: [second_category],
|
697
|
+
stores: [store])
|
698
|
+
end
|
699
|
+
|
700
|
+
context 'assigned to two different products' do
|
701
|
+
let!(:first_product) do
|
702
|
+
create(:product,
|
703
|
+
name: 'First product',
|
704
|
+
shipping_category: first_category)
|
705
|
+
end
|
706
|
+
|
707
|
+
let!(:second_product) do
|
708
|
+
create(:product,
|
709
|
+
name: 'Second product',
|
710
|
+
shipping_category: second_category)
|
711
|
+
end
|
712
|
+
|
713
|
+
before do
|
714
|
+
stock_location.stock_items.update_all(count_on_hand: 10)
|
715
|
+
end
|
716
|
+
|
717
|
+
it 'transitions successfully to the delivery step', js: true do
|
718
|
+
visit spree.product_path(first_product)
|
719
|
+
click_button 'add-to-cart-button'
|
720
|
+
visit spree.product_path(second_product)
|
721
|
+
click_button 'add-to-cart-button'
|
722
|
+
|
723
|
+
click_button 'Checkout'
|
724
|
+
|
725
|
+
fill_in_address
|
726
|
+
fill_in 'order_email', with: 'test@example.com'
|
727
|
+
click_button 'Save and Continue'
|
728
|
+
|
729
|
+
expect(Spree::Order.last.state).to eq('delivery')
|
730
|
+
end
|
731
|
+
end
|
732
|
+
end
|
733
|
+
|
675
734
|
def fill_in_credit_card(number: "4111 1111 1111 1111")
|
676
735
|
fill_in "Name on card", with: 'Mary Doe'
|
677
736
|
fill_in_with_force "Card Number", with: number
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidus_frontend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.10.
|
4
|
+
version: 2.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: solidus_api
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.10.
|
19
|
+
version: 2.10.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.10.
|
26
|
+
version: 2.10.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: solidus_core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.10.
|
33
|
+
version: 2.10.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.10.
|
40
|
+
version: 2.10.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: canonical-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -331,7 +331,7 @@ homepage: http://solidus.io/
|
|
331
331
|
licenses:
|
332
332
|
- BSD-3-Clause
|
333
333
|
metadata: {}
|
334
|
-
post_install_message:
|
334
|
+
post_install_message:
|
335
335
|
rdoc_options: []
|
336
336
|
require_paths:
|
337
337
|
- lib
|
@@ -339,7 +339,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
339
339
|
requirements:
|
340
340
|
- - ">="
|
341
341
|
- !ruby/object:Gem::Version
|
342
|
-
version: 2.
|
342
|
+
version: 2.4.0
|
343
343
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
344
344
|
requirements:
|
345
345
|
- - ">="
|
@@ -347,8 +347,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
347
347
|
version: 1.8.23
|
348
348
|
requirements:
|
349
349
|
- none
|
350
|
-
rubygems_version: 3.
|
351
|
-
signing_key:
|
350
|
+
rubygems_version: 3.1.4
|
351
|
+
signing_key:
|
352
352
|
specification_version: 4
|
353
353
|
summary: Cart and storefront for the Solidus e-commerce project.
|
354
354
|
test_files: []
|