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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 310fa3a7c2ffb353cad6a3c0079333d95c073943e0abc47fab729f5540adc33d
4
- data.tar.gz: 450b021d8e2016edcc7b0a0a219437077a41e9d0336cef670ddbf5ab1cdea3d6
3
+ metadata.gz: ce7f908d3872005dd581845445d085019bd2a9386418024ac13c0a80b07182cb
4
+ data.tar.gz: 1e99aabbf189a2731f6bdf656312e30c66fa683d2246d679a2ae825003857fce
5
5
  SHA512:
6
- metadata.gz: dd6a633f4cb60280996525a0baf5dfeb26de2a8b6b09ccd8764b3ae875a6f7ed1ce9042de398fe71e55f86b5e5a8fb7eec451e830d04f907409227651eeb23fa
7
- data.tar.gz: d58fb10140bcef216ae59b79ce1cb53237c7d8b19556dc5dc7cde72fa36d0bc7d37ad8815cc7b7c595145447f66f9d9cef5b0b6b23b8d3a84e39b71eb482f1b5
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: 3 0;
967
- width: 100%;
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
- if update_params = massaged_params[:order]
91
- update_params.permit(permitted_checkout_attributes)
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
- # We currently allow update requests without any parameters in them.
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 => e
63
- @order.errors.add(:base, e.record.errors.full_messages.join(", "))
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 |v|
37
- Pathname.new(v).relative_path_from(source_dir).to_s.include?(@options['only'])
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 { |k, v|
42
- if v.class == Array
43
- build_query(v.map { |x| ["#{k}[]", x] })
41
+ params.map { |key, value|
42
+ if value.class == Array
43
+ build_query(value.map { |parameter| ["#{key}[]", parameter] })
44
44
  else
45
- k + "=" + Rack::Utils.escape(v)
45
+ key + "=" + Rack::Utils.escape(value)
46
46
  end
47
47
  }.join("&")
48
48
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.require_path = 'lib'
19
19
  s.requirements << 'none'
20
20
 
21
- s.required_ruby_version = '>= 2.2.2'
21
+ s.required_ruby_version = '>= 2.4.0'
22
22
  s.required_rubygems_version = '>= 1.8.23'
23
23
 
24
24
  s.add_dependency 'solidus_api', s.version
@@ -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
- post :update, params: { state: 'address' }
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
- it "doesn't set shipping address on the order" do
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.0.beta1
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: 2019-09-19 00:00:00.000000000 Z
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.0.beta1
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.0.beta1
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.0.beta1
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.0.beta1
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.2.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.0.6
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: []