solidus_frontend 2.10.0 → 2.11.1

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 +26 -10
  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 +13 -56
  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 -581
  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 -750
  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,750 +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
- end
378
-
379
- # regression for https://github.com/spree/spree/issues/2921
380
- context "goes back from payment to add another item", js: true do
381
- let!(:store) { FactoryBot.create(:store) }
382
- let!(:bag) { create(:product, name: "RoR Bag") }
383
-
384
- it "transit nicely through checkout steps again" do
385
- add_mug_to_cart
386
- click_on "Checkout"
387
- fill_in "order_email", with: "test@example.com"
388
- fill_in_address
389
- click_on "Save and Continue"
390
- click_on "Save and Continue"
391
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
392
-
393
- visit spree.root_path
394
- click_link bag.name
395
- click_button "add-to-cart-button"
396
-
397
- click_on "Checkout"
398
- # edit an address field
399
- fill_in "order_bill_address_attributes_firstname", with: "Ryann"
400
- click_on "Save and Continue"
401
- click_on "Save and Continue"
402
- click_on "Save and Continue"
403
- click_on "Place Order"
404
-
405
- expect(page).to have_current_path(spree.order_path(Spree::Order.last))
406
- end
407
- end
408
-
409
- context "from payment step customer goes back to cart", js: true do
410
- before do
411
- add_mug_to_cart
412
- click_on "Checkout"
413
- fill_in "order_email", with: "test@example.com"
414
- fill_in_address
415
- click_on "Save and Continue"
416
- click_on "Save and Continue"
417
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
418
- end
419
-
420
- context "and updates line item quantity and try to reach payment page" do
421
- before do
422
- visit spree.cart_path
423
- within ".cart-item-quantity" do
424
- fill_in first("input")["name"], with: 3
425
- end
426
-
427
- click_on "Update"
428
- end
429
-
430
- it "redirects user back to address step" do
431
- visit spree.checkout_state_path("payment")
432
- expect(page).to have_current_path(spree.checkout_state_path("address"))
433
- end
434
-
435
- it "updates shipments properly through step address -> delivery transitions" do
436
- visit spree.checkout_state_path("payment")
437
- click_on "Save and Continue"
438
- click_on "Save and Continue"
439
-
440
- expect(Spree::InventoryUnit.count).to eq 3
441
- end
442
- end
443
-
444
- context "and adds new product to cart and try to reach payment page" do
445
- let!(:bag) { create(:product, name: "RoR Bag") }
446
-
447
- before do
448
- visit spree.root_path
449
- click_link bag.name
450
- click_button "add-to-cart-button"
451
- end
452
-
453
- it "redirects user back to address step" do
454
- visit spree.checkout_state_path("payment")
455
- expect(page).to have_current_path(spree.checkout_state_path("address"))
456
- end
457
-
458
- it "updates shipments properly through step address -> delivery transitions" do
459
- visit spree.checkout_state_path("payment")
460
- click_on "Save and Continue"
461
- click_on "Save and Continue"
462
-
463
- expect(Spree::InventoryUnit.count).to eq 2
464
- end
465
- end
466
- end
467
-
468
- context "Coupon promotions", js: true do
469
- let!(:promotion) { create(:promotion, name: "Huhuhu", code: "huhu") }
470
- let!(:calculator) { Spree::Calculator::FlatPercentItemTotal.create(preferred_flat_percent: "10") }
471
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(calculator: calculator) }
472
-
473
- before do
474
- promotion.actions << action
475
-
476
- add_mug_to_cart
477
- click_on "Checkout"
478
-
479
- fill_in "order_email", with: "test@example.com"
480
- fill_in_address
481
- click_on "Save and Continue"
482
-
483
- click_on "Save and Continue"
484
- expect(page).to have_current_path(spree.checkout_state_path("payment"))
485
- end
486
-
487
- it "applies them & refreshes the page on user clicking the Apply Code button" do
488
- fill_in "Coupon Code", with: promotion.codes.first.value
489
- click_on "Apply Code"
490
-
491
- expect(page).to have_content(promotion.name)
492
- expect(page).to have_content("-$2.00")
493
- end
494
-
495
- context "with invalid coupon" do
496
- it "doesnt apply the promotion" do
497
- fill_in "Coupon Code", with: 'invalid'
498
- click_on "Apply Code"
499
-
500
- expect(page).to have_content(I18n.t('spree.coupon_code_not_found'))
501
- end
502
- end
503
-
504
- context "doesn't fill in coupon code input" do
505
- it "advances just fine" do
506
- click_on "Save and Continue"
507
- expect(page).to have_current_path(spree.checkout_state_path("confirm"))
508
- end
509
- end
510
- end
511
-
512
- context "order has only payment step", js: true do
513
- before do
514
- create(:credit_card_payment_method)
515
- @old_checkout_flow = Spree::Order.checkout_flow
516
- Spree::Order.class_eval do
517
- checkout_flow do
518
- go_to_state :payment
519
- go_to_state :confirm
520
- end
521
- end
522
-
523
- allow_any_instance_of(Spree::Order).to receive_messages email: "spree@commerce.com"
524
-
525
- add_mug_to_cart
526
- click_on "Checkout"
527
- end
528
-
529
- after do
530
- Spree::Order.checkout_flow(&@old_checkout_flow)
531
- end
532
-
533
- it "goes right payment step and place order just fine" do
534
- expect(page).to have_current_path(spree.checkout_state_path('payment'))
535
-
536
- choose "Credit Card"
537
- fill_in_credit_card
538
- click_button "Save and Continue"
539
-
540
- expect(current_path).to eq spree.checkout_state_path('confirm')
541
- click_button "Place Order"
542
- end
543
- end
544
-
545
- context "save my address" do
546
- before do
547
- stock_location.stock_items.update_all(count_on_hand: 1)
548
- add_mug_to_cart
549
- end
550
-
551
- context 'as a guest' do
552
- before do
553
- Spree::Order.last.update_column(:email, "test@example.com")
554
- click_button "Checkout"
555
- end
556
-
557
- it 'should not be displayed' do
558
- expect(page).to_not have_css("[data-hook=save_user_address]")
559
- end
560
- end
561
-
562
- context 'as a User' do
563
- before do
564
- user = create(:user)
565
- Spree::Order.last.update_column :user_id, user.id
566
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
567
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
568
- click_button "Checkout"
569
- end
570
-
571
- it 'should be displayed' do
572
- expect(page).to have_css("[data-hook=save_user_address]")
573
- end
574
- end
575
- end
576
-
577
- context "when order is completed" do
578
- let!(:user) { create(:user) }
579
- let!(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:delivery) }
580
-
581
- before(:each) do
582
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
583
- allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
584
- allow_any_instance_of(Spree::OrdersController).to receive_messages(try_spree_current_user: user)
585
-
586
- visit spree.checkout_state_path(:delivery)
587
- click_button "Save and Continue"
588
- click_button "Save and Continue"
589
- click_button "Place Order"
590
- end
591
-
592
- it "displays a thank you message" do
593
- expect(page).to have_content(I18n.t('spree.thank_you_for_your_order'), normalize_ws: true)
594
- end
595
-
596
- it "does not display a thank you message on that order future visits" do
597
- visit spree.order_path(order)
598
- expect(page).to_not have_content(I18n.t('spree.thank_you_for_your_order'))
599
- end
600
- end
601
-
602
- context "with attempted XSS", js: true do
603
- shared_examples "safe from XSS" do
604
- # We need a country with states required but no states so that we have
605
- # access to the state_name input
606
- let!(:canada) { create(:country, name: 'Canada', iso: "CA", states_required: true) }
607
- before do
608
- canada.states.destroy_all
609
- zone.members.create!(zoneable: canada)
610
- end
611
-
612
- it "displays the entered state name without evaluating" do
613
- add_mug_to_cart
614
- visit spree.checkout_state_path(:address)
615
- fill_in_address
616
-
617
- state_name_css = "order_bill_address_attributes_state_name"
618
-
619
- select "Canada", from: "order_bill_address_attributes_country_id"
620
- fill_in 'Customer E-Mail', with: 'test@example.com'
621
- fill_in state_name_css, with: xss_string
622
- fill_in "Zip", with: "H0H0H0"
623
-
624
- click_on 'Save and Continue'
625
- visit spree.checkout_state_path(:address)
626
-
627
- expect(page).to have_field(state_name_css, with: xss_string)
628
- end
629
- end
630
-
631
- let(:xss_string) { %(<script>throw("XSS")</script>) }
632
- include_examples "safe from XSS"
633
-
634
- context "escaped XSS string" do
635
- let(:xss_string) { '\x27\x3e\x3cscript\x3ethrow(\x27XSS\x27)\x3c/script\x3e' }
636
- include_examples "safe from XSS"
637
- end
638
- end
639
-
640
- context "using credit card" do
641
- let!(:payment_method) { create(:credit_card_payment_method) }
642
-
643
- # Regression test for https://github.com/solidusio/solidus/issues/1421
644
- it "works with card number 1", js: true do
645
- add_mug_to_cart
646
-
647
- click_on "Checkout"
648
- fill_in "order_email", with: "test@example.com"
649
- fill_in_address
650
- click_on "Save and Continue"
651
- click_on "Save and Continue"
652
-
653
- fill_in_credit_card(number: "1")
654
- click_on "Save and Continue"
655
-
656
- expect(page).to have_current_path("/checkout/confirm")
657
- end
658
-
659
- it "works with card number 4111111111111111", js: true do
660
- add_mug_to_cart
661
-
662
- click_on "Checkout"
663
- fill_in "order_email", with: "test@example.com"
664
- fill_in_address
665
- click_on "Save and Continue"
666
- click_on "Save and Continue"
667
-
668
- fill_in_credit_card
669
- click_on "Save and Continue"
670
-
671
- expect(page).to have_current_path("/checkout/confirm")
672
- end
673
- end
674
-
675
- # Regression test for: https://github.com/solidusio/solidus/issues/2998
676
- context 'when two shipping categories are available' do
677
- let!(:first_category) { create(:shipping_category) }
678
- let!(:second_category) { create(:shipping_category) }
679
-
680
- let!(:first_shipping_method) do
681
- create(:shipping_method,
682
- shipping_categories: [first_category],
683
- stores: [store])
684
- end
685
-
686
- let!(:second_shipping_method) do
687
- create(:shipping_method,
688
- shipping_categories: [second_category],
689
- stores: [store])
690
- end
691
-
692
- context 'assigned to two different products' do
693
- let!(:first_product) do
694
- create(:product,
695
- name: 'First product',
696
- shipping_category: first_category)
697
- end
698
-
699
- let!(:second_product) do
700
- create(:product,
701
- name: 'Second product',
702
- shipping_category: second_category)
703
- end
704
-
705
- before do
706
- stock_location.stock_items.update_all(count_on_hand: 10)
707
- end
708
-
709
- it 'transitions successfully to the delivery step', js: true do
710
- visit spree.product_path(first_product)
711
- click_button 'add-to-cart-button'
712
- visit spree.product_path(second_product)
713
- click_button 'add-to-cart-button'
714
-
715
- click_button 'Checkout'
716
-
717
- fill_in_address
718
- fill_in 'order_email', with: 'test@example.com'
719
- click_button 'Save and Continue'
720
-
721
- expect(Spree::Order.last.state).to eq('delivery')
722
- end
723
- end
724
- end
725
-
726
- def fill_in_credit_card(number: "4111 1111 1111 1111")
727
- fill_in "Name on card", with: 'Mary Doe'
728
- fill_in_with_force "Card Number", with: number
729
- fill_in_with_force "Expiration", with: "12 / 24"
730
- fill_in "Card Code", with: "123"
731
- end
732
-
733
- def fill_in_address
734
- address = "order_bill_address_attributes"
735
- fill_in "#{address}_firstname", with: "Ryan"
736
- fill_in "#{address}_lastname", with: "Bigg"
737
- fill_in "#{address}_address1", with: "143 Swan Street"
738
- fill_in "#{address}_city", with: "Richmond"
739
- select "United States of America", from: "#{address}_country_id"
740
- select "Alabama", from: "#{address}_state_id"
741
- fill_in "#{address}_zipcode", with: "12345"
742
- fill_in "#{address}_phone", with: "(555) 555-5555"
743
- end
744
-
745
- def add_mug_to_cart
746
- visit spree.root_path
747
- click_link mug.name
748
- click_button "add-to-cart-button"
749
- end
750
- end