solidus_frontend 2.10.0 → 2.11.1

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.

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