solidus_frontend 2.10.0.beta1 → 2.10.5
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.
- 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: []
|