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,758 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Checkout", type: :feature, inaccessible: true do
6
- include_context 'checkout setup'
7
-
8
- context "visitor makes checkout as guest without registration" do
9
- before(:each) do
10
- stock_location.stock_items.update_all(count_on_hand: 1)
11
- end
12
-
13
- context "defaults to use billing address" do
14
- before do
15
- add_mug_to_cart
16
- Spree::Order.last.update_column(:email, "test@example.com")
17
- click_button "Checkout"
18
- end
19
-
20
- it "should default checkbox to checked", inaccessible: true do
21
- expect(find('input#order_use_billing')).to be_checked
22
- end
23
-
24
- it "should remain checked when used and visitor steps back to address step", js: true do
25
- fill_in_address
26
- expect(find('input#order_use_billing')).to be_checked
27
- end
28
- end
29
-
30
- # Regression test for https://github.com/spree/spree/issues/4079
31
- context "persists state when on address page" do
32
- before do
33
- add_mug_to_cart
34
- click_button "Checkout"
35
- end
36
-
37
- specify do
38
- expect(Spree::Order.count).to eq(1)
39
- expect(Spree::Order.last.state).to eq("address")
40
- end
41
- end
42
-
43
- # Regression test for https://github.com/spree/spree/issues/1596
44
- context "full checkout" do
45
- before do
46
- shipping_method.calculator.update!(preferred_amount: 10)
47
- mug.shipping_category = shipping_method.shipping_categories.first
48
- mug.save!
49
- end
50
-
51
- it "does not break the per-item shipping method calculator", js: true do
52
- add_mug_to_cart
53
- click_button "Checkout"
54
-
55
- fill_in "order_email", with: "test@example.com"
56
- fill_in_address
57
-
58
- click_button "Save and Continue"
59
- expect(page).not_to have_content("undefined method `promotion'")
60
- click_button "Save and Continue"
61
- expect(page).to have_content("Shipping total: $10.00")
62
- end
63
- end
64
-
65
- # Regression test for https://github.com/spree/spree/issues/4306
66
- context "free shipping" do
67
- before do
68
- add_mug_to_cart
69
- click_button "Checkout"
70
- end
71
-
72
- it "should not show 'Free Shipping' when there are no shipments" do
73
- within("#checkout-summary") do
74
- expect(page).to_not have_content('Free Shipping')
75
- end
76
- end
77
- end
78
- end
79
-
80
- context "displays default user addresses on address step" do
81
- before do
82
- stock_location.stock_items.update_all(count_on_hand: 1)
83
- end
84
-
85
- context "when user is logged in" do
86
- let!(:user) do
87
- create(:user, bill_address: saved_bill_address, ship_address: saved_ship_address)
88
- end
89
-
90
- let!(:order) do
91
- order = Spree::Order.create!(
92
- email: "spree@example.com",
93
- store: Spree::Store.first || FactoryBot.create(:store)
94
- )
95
-
96
- order.reload
97
- order.user = user
98
- order.recalculate
99
- order
100
- end
101
-
102
- before do
103
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
104
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
105
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
106
-
107
- add_mug_to_cart
108
- click_button "Checkout"
109
- # We need an order reload here to get newly associated addresses.
110
- # Then we go back to address where we are supposed to be redirected.
111
- order.reload
112
- visit spree.checkout_state_path(:address)
113
- end
114
-
115
- context "when user has default addresses saved" do
116
- let(:saved_bill_address) { create(:address, firstname: 'Bill') }
117
- let(:saved_ship_address) { create(:address, firstname: 'Steve') }
118
-
119
- it "shows the saved addresses" do
120
- within("#billing") do
121
- expect(find_field('First Name').value).to eq 'Bill'
122
- end
123
-
124
- within("#shipping") do
125
- expect(find_field('First Name').value).to eq 'Steve'
126
- end
127
- end
128
- end
129
-
130
- context "when user does not have default addresses saved" do
131
- let(:saved_bill_address) { nil }
132
- let(:saved_ship_address) { nil }
133
-
134
- it 'shows an empty address' do
135
- within("#billing") do
136
- expect(find_field('First Name').value).to be_nil
137
- end
138
-
139
- within("#shipping") do
140
- expect(find_field('First Name').value).to be_nil
141
- end
142
- end
143
- end
144
- end
145
-
146
- context "when user is not logged in" do
147
- context "and proceeds with guest checkout" do
148
- it 'shows empty addresses' do
149
- add_mug_to_cart
150
- click_button "Checkout"
151
-
152
- within("#billing") do
153
- expect(find_field('First Name').value).to be_nil
154
- end
155
-
156
- within("#shipping") do
157
- expect(find_field('First Name').value).to be_nil
158
- end
159
- end
160
- end
161
-
162
- context "and proceeds logging in" do
163
- let!(:user) do
164
- create(:user, bill_address: saved_bill_address, ship_address: saved_ship_address)
165
- end
166
-
167
- before do
168
- add_mug_to_cart
169
- click_button "Checkout"
170
-
171
- # Simulate user login
172
- Spree::Order.last.associate_user!(user)
173
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
174
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
175
-
176
- # Simulate redirect back to address after login
177
- visit spree.checkout_state_path(:address)
178
- end
179
-
180
- context "when does not have saved addresses" do
181
- let(:saved_bill_address) { nil }
182
- let(:saved_ship_address) { nil }
183
-
184
- it 'shows empty addresses' do
185
- within("#billing") do
186
- expect(find_field('First Name').value).to be_nil
187
- end
188
-
189
- within("#shipping") do
190
- expect(find_field('First Name').value).to be_nil
191
- end
192
- end
193
- end
194
-
195
- # Regression test for https://github.com/solidusio/solidus/issues/1811
196
- context "when does have saved addresses" do
197
- let(:saved_bill_address) { create(:address, firstname: 'Bill') }
198
- let(:saved_ship_address) { create(:address, firstname: 'Steve') }
199
-
200
- it 'shows empty addresses' do
201
- within("#billing") do
202
- expect(find_field('First Name').value).to eq 'Bill'
203
- end
204
-
205
- within("#shipping") do
206
- expect(find_field('First Name').value).to eq 'Steve'
207
- end
208
- end
209
- end
210
- end
211
- end
212
- end
213
-
214
- context "when order has only a void payment" do
215
- let(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:payment) }
216
-
217
- before do
218
- user = create(:user)
219
- order.user = user
220
- order.recalculate
221
-
222
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
223
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
224
- end
225
-
226
- it "does not allow successful order submission" do
227
- visit spree.checkout_path
228
- order.payments.first.update state: :void
229
- click_button 'Place Order'
230
- expect(page).to have_current_path spree.checkout_state_path(:payment)
231
- end
232
- end
233
-
234
- # Regression test for https://github.com/spree/spree/issues/2694 and https://github.com/spree/spree/issues/4117
235
- context "doesn't allow bad credit card numbers" do
236
- let!(:payment_method) { create(:credit_card_payment_method) }
237
- before(:each) do
238
- order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
239
-
240
- user = create(:user)
241
- order.user = user
242
- order.recalculate
243
-
244
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
245
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
246
- end
247
-
248
- it "redirects to payment page", inaccessible: true do
249
- visit spree.checkout_state_path(:delivery)
250
- click_button "Save and Continue"
251
- choose "Credit Card"
252
- fill_in "Card Number", with: '123'
253
- fill_in "card_expiry", with: '04 / 20'
254
- fill_in "Card Code", with: '123'
255
- click_button "Save and Continue"
256
- click_button "Place Order"
257
- expect(page).to have_content("Bogus Gateway: Forced failure")
258
- expect(page.current_url).to include("/checkout/payment")
259
- end
260
- end
261
-
262
- context "and likes to double click buttons" do
263
- let!(:user) { create(:user) }
264
-
265
- let!(:order) do
266
- order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
267
-
268
- order.reload
269
- order.user = user
270
- order.recalculate
271
- order
272
- end
273
-
274
- before(:each) do
275
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
276
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
277
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(skip_state_validation?: true)
278
- end
279
-
280
- it "prevents double clicking the payment button on checkout", js: true do
281
- visit spree.checkout_state_path(:payment)
282
-
283
- # prevent form submit to verify button is disabled
284
- page.execute_script("$('#checkout_form_payment').submit(function(){return false;})")
285
-
286
- expect(page).not_to have_selector('input.button[disabled]')
287
- click_button "Save and Continue"
288
- expect(page).to have_selector('input.button[disabled]')
289
- end
290
-
291
- it "prevents double clicking the confirm button on checkout", js: true do
292
- order.payments << create(:payment)
293
- visit spree.checkout_state_path(:confirm)
294
-
295
- # prevent form submit to verify button is disabled
296
- page.execute_script("$('#checkout_form_confirm').submit(function(){return false;})")
297
-
298
- expect(page).not_to have_selector('input.button[disabled]')
299
- click_button "Place Order"
300
- expect(page).to have_selector('input.button[disabled]')
301
- end
302
- end
303
-
304
- context "when several payment methods are available" do
305
- let(:credit_cart_payment) { create(:credit_card_payment_method) }
306
- let(:check_payment) { create(:check_payment_method) }
307
-
308
- after do
309
- Capybara.ignore_hidden_elements = true
310
- end
311
-
312
- before do
313
- Capybara.ignore_hidden_elements = false
314
- order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
315
- allow(order).to receive_messages(available_payment_methods: [check_payment, credit_cart_payment])
316
- order.user = create(:user)
317
- order.recalculate
318
-
319
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
320
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: order.user)
321
-
322
- visit spree.checkout_state_path(:payment)
323
- end
324
-
325
- it "the first payment method should be selected", js: true do
326
- payment_method_css = "#order_payments_attributes__payment_method_id_"
327
- expect(find("#{payment_method_css}#{check_payment.id}")).to be_checked
328
- expect(find("#{payment_method_css}#{credit_cart_payment.id}")).not_to be_checked
329
- end
330
-
331
- it "the fields for the other payment methods should be hidden", js: true do
332
- payment_method_css = "#payment_method_"
333
- expect(find("#{payment_method_css}#{check_payment.id}")).to be_visible
334
- expect(find("#{payment_method_css}#{credit_cart_payment.id}")).not_to be_visible
335
- end
336
- end
337
-
338
- context "user has payment sources", js: true do
339
- before { Spree::PaymentMethod.all.each(&:really_destroy!) }
340
- let!(:bogus) { create(:credit_card_payment_method) }
341
- let(:user) { create(:user) }
342
-
343
- let!(:credit_card) do
344
- create(:credit_card, user_id: user.id, payment_method: bogus, gateway_customer_profile_id: "BGS-WEFWF")
345
- end
346
-
347
- before do
348
- user.wallet.add(credit_card)
349
- order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
350
-
351
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
352
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
353
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
354
-
355
- visit spree.checkout_state_path(:payment)
356
- end
357
-
358
- it "selects first source available and customer moves on" do
359
- expect(find("#use_existing_card_yes")).to be_checked
360
-
361
- click_on "Save and Continue"
362
- click_on "Place Order"
363
- expect(page).to have_current_path(spree.order_path(Spree::Order.last))
364
- expect(page).to have_current_path(spree.order_path(Spree::Order.last))
365
- expect(page).to have_content("Ending in #{credit_card.last_digits}")
366
- end
367
-
368
- it "allows user to enter a new source" do
369
- choose "use_existing_card_no"
370
- fill_in_credit_card
371
-
372
- click_on "Save and Continue"
373
- click_on "Place Order"
374
- expect(page).to have_current_path(spree.order_path(Spree::Order.last))
375
- expect(page).to have_content('Ending in 1111')
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
385
- end
386
-
387
- # regression for https://github.com/spree/spree/issues/2921
388
- context "goes back from payment to add another item", js: true do
389
- let!(:store) { FactoryBot.create(:store) }
390
- let!(:bag) { create(:product, name: "RoR Bag") }
391
-
392
- it "transit nicely through checkout steps again" do
393
- add_mug_to_cart
394
- click_on "Checkout"
395
- fill_in "order_email", with: "test@example.com"
396
- fill_in_address
397
- click_on "Save and Continue"
398
- click_on "Save and Continue"
399
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
400
-
401
- visit spree.root_path
402
- click_link bag.name
403
- click_button "add-to-cart-button"
404
-
405
- click_on "Checkout"
406
- # edit an address field
407
- fill_in "order_bill_address_attributes_firstname", with: "Ryann"
408
- click_on "Save and Continue"
409
- click_on "Save and Continue"
410
- click_on "Save and Continue"
411
- click_on "Place Order"
412
-
413
- expect(page).to have_current_path(spree.order_path(Spree::Order.last))
414
- end
415
- end
416
-
417
- context "from payment step customer goes back to cart", js: true do
418
- before do
419
- add_mug_to_cart
420
- click_on "Checkout"
421
- fill_in "order_email", with: "test@example.com"
422
- fill_in_address
423
- click_on "Save and Continue"
424
- click_on "Save and Continue"
425
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
426
- end
427
-
428
- context "and updates line item quantity and try to reach payment page" do
429
- before do
430
- visit spree.cart_path
431
- within ".cart-item-quantity" do
432
- fill_in first("input")["name"], with: 3
433
- end
434
-
435
- click_on "Update"
436
- end
437
-
438
- it "redirects user back to address step" do
439
- visit spree.checkout_state_path("payment")
440
- expect(page).to have_current_path(spree.checkout_state_path("address"))
441
- end
442
-
443
- it "updates shipments properly through step address -> delivery transitions" do
444
- visit spree.checkout_state_path("payment")
445
- click_on "Save and Continue"
446
- click_on "Save and Continue"
447
-
448
- expect(Spree::InventoryUnit.count).to eq 3
449
- end
450
- end
451
-
452
- context "and adds new product to cart and try to reach payment page" do
453
- let!(:bag) { create(:product, name: "RoR Bag") }
454
-
455
- before do
456
- visit spree.root_path
457
- click_link bag.name
458
- click_button "add-to-cart-button"
459
- end
460
-
461
- it "redirects user back to address step" do
462
- visit spree.checkout_state_path("payment")
463
- expect(page).to have_current_path(spree.checkout_state_path("address"))
464
- end
465
-
466
- it "updates shipments properly through step address -> delivery transitions" do
467
- visit spree.checkout_state_path("payment")
468
- click_on "Save and Continue"
469
- click_on "Save and Continue"
470
-
471
- expect(Spree::InventoryUnit.count).to eq 2
472
- end
473
- end
474
- end
475
-
476
- context "Coupon promotions", js: true do
477
- let!(:promotion) { create(:promotion, name: "Huhuhu", code: "huhu") }
478
- let!(:calculator) { Spree::Calculator::FlatPercentItemTotal.create(preferred_flat_percent: "10") }
479
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(calculator: calculator) }
480
-
481
- before do
482
- promotion.actions << action
483
-
484
- add_mug_to_cart
485
- click_on "Checkout"
486
-
487
- fill_in "order_email", with: "test@example.com"
488
- fill_in_address
489
- click_on "Save and Continue"
490
-
491
- click_on "Save and Continue"
492
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
493
- end
494
-
495
- it "applies them & refreshes the page on user clicking the Apply Code button" do
496
- fill_in "Coupon Code", with: promotion.codes.first.value
497
- click_on "Apply Code"
498
-
499
- expect(page).to have_content(promotion.name)
500
- expect(page).to have_content("-$2.00")
501
- end
502
-
503
- context "with invalid coupon" do
504
- it "doesnt apply the promotion" do
505
- fill_in "Coupon Code", with: 'invalid'
506
- click_on "Apply Code"
507
-
508
- expect(page).to have_content(I18n.t('spree.coupon_code_not_found'))
509
- end
510
- end
511
-
512
- context "doesn't fill in coupon code input" do
513
- it "advances just fine" do
514
- click_on "Save and Continue"
515
- expect(page).to have_current_path(spree.checkout_state_path("confirm"))
516
- end
517
- end
518
- end
519
-
520
- context "order has only payment step", js: true do
521
- before do
522
- create(:credit_card_payment_method)
523
- @old_checkout_flow = Spree::Order.checkout_flow
524
- Spree::Order.class_eval do
525
- checkout_flow do
526
- go_to_state :payment
527
- go_to_state :confirm
528
- end
529
- end
530
-
531
- allow_any_instance_of(Spree::Order).to receive_messages email: "spree@commerce.com"
532
-
533
- add_mug_to_cart
534
- click_on "Checkout"
535
- end
536
-
537
- after do
538
- Spree::Order.checkout_flow(&@old_checkout_flow)
539
- end
540
-
541
- it "goes right payment step and place order just fine" do
542
- expect(page).to have_current_path(spree.checkout_state_path('payment'))
543
-
544
- choose "Credit Card"
545
- fill_in_credit_card
546
- click_button "Save and Continue"
547
-
548
- expect(current_path).to eq spree.checkout_state_path('confirm')
549
- click_button "Place Order"
550
- end
551
- end
552
-
553
- context "save my address" do
554
- before do
555
- stock_location.stock_items.update_all(count_on_hand: 1)
556
- add_mug_to_cart
557
- end
558
-
559
- context 'as a guest' do
560
- before do
561
- Spree::Order.last.update_column(:email, "test@example.com")
562
- click_button "Checkout"
563
- end
564
-
565
- it 'should not be displayed' do
566
- expect(page).to_not have_css("[data-hook=save_user_address]")
567
- end
568
- end
569
-
570
- context 'as a User' do
571
- before do
572
- user = create(:user)
573
- Spree::Order.last.update_column :user_id, user.id
574
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
575
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
576
- click_button "Checkout"
577
- end
578
-
579
- it 'should be displayed' do
580
- expect(page).to have_css("[data-hook=save_user_address]")
581
- end
582
- end
583
- end
584
-
585
- context "when order is completed" do
586
- let!(:user) { create(:user) }
587
- let!(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:delivery) }
588
-
589
- before(:each) do
590
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
591
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
592
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
593
-
594
- visit spree.checkout_state_path(:delivery)
595
- click_button "Save and Continue"
596
- click_button "Save and Continue"
597
- click_button "Place Order"
598
- end
599
-
600
- it "displays a thank you message" do
601
- expect(page).to have_content(I18n.t('spree.thank_you_for_your_order'), normalize_ws: true)
602
- end
603
-
604
- it "does not display a thank you message on that order future visits" do
605
- visit spree.order_path(order)
606
- expect(page).to_not have_content(I18n.t('spree.thank_you_for_your_order'))
607
- end
608
- end
609
-
610
- context "with attempted XSS", js: true do
611
- shared_examples "safe from XSS" do
612
- # We need a country with states required but no states so that we have
613
- # access to the state_name input
614
- let!(:canada) { create(:country, name: 'Canada', iso: "CA", states_required: true) }
615
- before do
616
- canada.states.destroy_all
617
- zone.members.create!(zoneable: canada)
618
- end
619
-
620
- it "displays the entered state name without evaluating" do
621
- add_mug_to_cart
622
- visit spree.checkout_state_path(:address)
623
- fill_in_address
624
-
625
- state_name_css = "order_bill_address_attributes_state_name"
626
-
627
- select "Canada", from: "order_bill_address_attributes_country_id"
628
- fill_in 'Customer E-Mail', with: 'test@example.com'
629
- fill_in state_name_css, with: xss_string
630
- fill_in "Zip", with: "H0H0H0"
631
-
632
- click_on 'Save and Continue'
633
- visit spree.checkout_state_path(:address)
634
-
635
- expect(page).to have_field(state_name_css, with: xss_string)
636
- end
637
- end
638
-
639
- let(:xss_string) { %(<script>throw("XSS")</script>) }
640
- include_examples "safe from XSS"
641
-
642
- context "escaped XSS string" do
643
- let(:xss_string) { '\x27\x3e\x3cscript\x3ethrow(\x27XSS\x27)\x3c/script\x3e' }
644
- include_examples "safe from XSS"
645
- end
646
- end
647
-
648
- context "using credit card" do
649
- let!(:payment_method) { create(:credit_card_payment_method) }
650
-
651
- # Regression test for https://github.com/solidusio/solidus/issues/1421
652
- it "works with card number 1", js: true do
653
- add_mug_to_cart
654
-
655
- click_on "Checkout"
656
- fill_in "order_email", with: "test@example.com"
657
- fill_in_address
658
- click_on "Save and Continue"
659
- click_on "Save and Continue"
660
-
661
- fill_in_credit_card(number: "1")
662
- click_on "Save and Continue"
663
-
664
- expect(page).to have_current_path("/checkout/confirm")
665
- end
666
-
667
- it "works with card number 4111111111111111", js: true do
668
- add_mug_to_cart
669
-
670
- click_on "Checkout"
671
- fill_in "order_email", with: "test@example.com"
672
- fill_in_address
673
- click_on "Save and Continue"
674
- click_on "Save and Continue"
675
-
676
- fill_in_credit_card
677
- click_on "Save and Continue"
678
-
679
- expect(page).to have_current_path("/checkout/confirm")
680
- end
681
- end
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
-
734
- def fill_in_credit_card(number: "4111 1111 1111 1111")
735
- fill_in "Name on card", with: 'Mary Doe'
736
- fill_in_with_force "Card Number", with: number
737
- fill_in_with_force "Expiration", with: "12 / 24"
738
- fill_in "Card Code", with: "123"
739
- end
740
-
741
- def fill_in_address
742
- address = "order_bill_address_attributes"
743
- fill_in "#{address}_firstname", with: "Ryan"
744
- fill_in "#{address}_lastname", with: "Bigg"
745
- fill_in "#{address}_address1", with: "143 Swan Street"
746
- fill_in "#{address}_city", with: "Richmond"
747
- select "United States of America", from: "#{address}_country_id"
748
- select "Alabama", from: "#{address}_state_id"
749
- fill_in "#{address}_zipcode", with: "12345"
750
- fill_in "#{address}_phone", with: "(555) 555-5555"
751
- end
752
-
753
- def add_mug_to_cart
754
- visit spree.root_path
755
- click_link mug.name
756
- click_button "add-to-cart-button"
757
- end
758
- end