solidus_backend 2.7.4 → 2.8.0

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.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -8
  3. data/app/assets/images/favicon.ico +0 -0
  4. data/app/assets/javascripts/spree/backend.js +0 -2
  5. data/app/assets/javascripts/spree/backend/adjustments.js +1 -1
  6. data/app/assets/javascripts/spree/backend/components/tooltips.js +21 -17
  7. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +1 -1
  8. data/app/assets/javascripts/spree/backend/product_picker.js +1 -1
  9. data/app/assets/javascripts/spree/backend/shipments.js +6 -1
  10. data/app/assets/javascripts/spree/backend/stock_management.js +9 -0
  11. data/app/assets/javascripts/spree/backend/store_credits.js +18 -2
  12. data/app/assets/javascripts/spree/backend/taxons.js +1 -1
  13. data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +24 -25
  14. data/app/assets/javascripts/spree/backend/user_picker.js +1 -1
  15. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +1 -1
  16. data/app/assets/javascripts/spree/backend/views/order/customer_select.js +1 -1
  17. data/app/assets/javascripts/spree/backend/views/order/summary.js +2 -2
  18. data/app/assets/javascripts/spree/backend/views/stock/add_stock_item.js +15 -4
  19. data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +30 -10
  20. data/app/assets/stylesheets/spree/backend/globals/_functions.scss +1 -2
  21. data/app/assets/stylesheets/spree/backend/sections/_orders.scss +8 -0
  22. data/app/assets/stylesheets/spree/backend/sections/_stock_management.scss +77 -2
  23. data/app/assets/stylesheets/spree/backend/spree_admin.scss +0 -1
  24. data/app/controllers/spree/admin/cancellations_controller.rb +2 -2
  25. data/app/controllers/spree/admin/locale_controller.rb +1 -1
  26. data/app/controllers/spree/admin/orders/customer_details_controller.rb +8 -1
  27. data/app/controllers/spree/admin/orders_controller.rb +1 -11
  28. data/app/controllers/spree/admin/products_controller.rb +10 -6
  29. data/app/controllers/spree/admin/promotion_codes_controller.rb +19 -1
  30. data/app/controllers/spree/admin/promotions_controller.rb +1 -1
  31. data/app/controllers/spree/admin/reimbursements_controller.rb +7 -2
  32. data/app/controllers/spree/admin/resource_controller.rb +1 -0
  33. data/app/controllers/spree/admin/store_credit_reasons_controller.rb +8 -0
  34. data/app/controllers/spree/admin/store_credits_controller.rb +11 -11
  35. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  36. data/app/models/spree/backend_configuration.rb +38 -21
  37. data/app/views/spree/admin/cancellations/index.html.erb +3 -1
  38. data/app/views/spree/admin/images/_image_row.html.erb +1 -1
  39. data/app/views/spree/admin/images/edit.html.erb +3 -3
  40. data/app/views/spree/admin/images/index.html.erb +2 -2
  41. data/app/views/spree/admin/log_entries/index.html.erb +2 -2
  42. data/app/views/spree/admin/orders/_carton_manifest.html.erb +3 -1
  43. data/app/views/spree/admin/orders/_shipment_manifest.html.erb +3 -1
  44. data/app/views/spree/admin/orders/confirm/_line_items.html.erb +3 -2
  45. data/app/views/spree/admin/orders/confirm/_shipment_manifest.html.erb +3 -1
  46. data/app/views/spree/admin/orders/index.html.erb +1 -1
  47. data/app/views/spree/admin/products/_form.html.erb +7 -7
  48. data/app/views/spree/admin/products/edit.html.erb +5 -0
  49. data/app/views/spree/admin/products/index.html.erb +3 -1
  50. data/app/views/spree/admin/promotion_categories/index.html.erb +1 -1
  51. data/app/views/spree/admin/promotion_code_batches/index.html.erb +1 -1
  52. data/app/views/spree/admin/promotion_codes/index.html.erb +5 -1
  53. data/app/views/spree/admin/promotion_codes/new.html.erb +31 -0
  54. data/app/views/spree/admin/promotions/_actions.html.erb +1 -1
  55. data/app/views/spree/admin/promotions/_activations_edit.html.erb +1 -1
  56. data/app/views/spree/admin/promotions/_form.html.erb +4 -3
  57. data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
  58. data/app/views/spree/admin/promotions/edit.html.erb +3 -1
  59. data/app/views/spree/admin/refunds/new.html.erb +1 -1
  60. data/app/views/spree/admin/shared/_address_form.html.erb +10 -3
  61. data/app/views/spree/admin/shared/_edit_resource_links.html.erb +1 -1
  62. data/app/views/spree/admin/shared/_head.html.erb +1 -0
  63. data/app/views/spree/admin/shared/_image.html.erb +2 -2
  64. data/app/views/spree/admin/shared/_product_sub_menu.html.erb +1 -1
  65. data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +4 -0
  66. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +3 -3
  67. data/app/views/spree/admin/shared/_tabs.html.erb +3 -2
  68. data/app/views/spree/admin/shared/_variant_search.html.erb +1 -1
  69. data/app/views/spree/admin/stock_items/_stock_management.html.erb +56 -38
  70. data/app/views/spree/admin/stock_locations/_form.html.erb +133 -121
  71. data/app/views/spree/admin/stock_locations/edit.html.erb +4 -2
  72. data/app/views/spree/admin/store_credit_reasons/edit.html.erb +15 -0
  73. data/app/views/spree/admin/store_credit_reasons/index.html.erb +56 -0
  74. data/app/views/spree/admin/store_credit_reasons/new.html.erb +18 -0
  75. data/app/views/spree/admin/store_credit_reasons/shared/_form.html.erb +15 -0
  76. data/app/views/spree/admin/store_credits/_store_credit_reason_field.html.erb +7 -0
  77. data/app/views/spree/admin/store_credits/edit_amount.html.erb +1 -1
  78. data/app/views/spree/admin/store_credits/edit_validity.html.erb +1 -1
  79. data/app/views/spree/admin/store_credits/show.html.erb +2 -2
  80. data/app/views/spree/admin/users/items.html.erb +3 -1
  81. data/app/views/spree/admin/users/orders.html.erb +1 -1
  82. data/config/routes.rb +2 -8
  83. data/lib/spree/backend.rb +1 -1
  84. data/solidus_backend.gemspec +3 -4
  85. data/spec/controllers/spree/admin/base_controller_spec.rb +1 -1
  86. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +7 -3
  87. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +50 -2
  88. data/spec/controllers/spree/admin/orders_controller_spec.rb +23 -11
  89. data/spec/controllers/spree/admin/payments_controller_spec.rb +1 -1
  90. data/spec/controllers/spree/admin/products_controller_spec.rb +72 -0
  91. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +13 -1
  92. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +11 -0
  93. data/spec/controllers/spree/admin/resource_controller_spec.rb +22 -0
  94. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +1 -1
  95. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +7 -7
  96. data/spec/features/admin/configuration/payment_methods_spec.rb +2 -2
  97. data/spec/features/admin/configuration/shipping_methods_spec.rb +2 -2
  98. data/spec/features/admin/homepage_spec.rb +1 -6
  99. data/spec/features/admin/orders/listing_spec.rb +1 -1
  100. data/spec/features/admin/orders/new_order_spec.rb +117 -0
  101. data/spec/features/admin/orders/new_refund_spec.rb +35 -0
  102. data/spec/features/admin/orders/order_details_spec.rb +2 -2
  103. data/spec/features/admin/orders/payments_spec.rb +2 -2
  104. data/spec/features/admin/orders/return_payment_state_spec.rb +3 -0
  105. data/spec/features/admin/orders/shipments_spec.rb +28 -0
  106. data/spec/features/admin/products/products_spec.rb +1 -1
  107. data/spec/features/admin/products/stock_management_spec.rb +10 -13
  108. data/spec/features/admin/promotion_adjustments_spec.rb +12 -12
  109. data/spec/features/admin/promotions/option_value_rule_spec.rb +2 -2
  110. data/spec/features/admin/promotions/product_rule_spec.rb +1 -1
  111. data/spec/features/admin/promotions/tiered_calculator_spec.rb +1 -1
  112. data/spec/features/admin/promotions/user_rule_spec.rb +2 -2
  113. data/spec/features/admin/reimbursements_spec.rb +1 -1
  114. data/spec/features/admin/store_credits_spec.rb +51 -2
  115. data/spec/features/admin/taxons_spec.rb +35 -0
  116. data/spec/features/admin/users_spec.rb +22 -11
  117. data/spec/helpers/admin/navigation_helper_spec.rb +4 -2
  118. data/spec/helpers/admin/store_credit_events_helper_spec.rb +2 -2
  119. data/spec/javascripts/spec_helper.js +2 -0
  120. data/spec/models/spree/backend_configuration/menu_item_spec.rb +17 -0
  121. data/spec/models/spree/backend_configuration_spec.rb +22 -0
  122. data/spec/spec_helper.rb +1 -0
  123. data/spec/support/feature/order_feature_helper.rb +1 -1
  124. data/spec/views/spree/admin/shared/navigation_footer_spec.rb +1 -1
  125. data/vendor/assets/javascripts/solidus_admin/select2_locales/select2_locale_en-US.js +10 -0
  126. metadata +26 -34
  127. data/app/controllers/spree/admin/reports_controller.rb +0 -82
  128. data/app/views/spree/admin/reports/index.html.erb +0 -19
  129. data/app/views/spree/admin/reports/sales_total.html.erb +0 -35
  130. data/app/views/spree/admin/shared/_report_order_criteria.html.erb +0 -19
  131. data/app/views/spree/admin/store_credits/_update_reason_field.html.erb +0 -7
  132. data/spec/controllers/spree/admin/reports_controller_spec.rb +0 -133
  133. data/spec/features/admin/reports_spec.rb +0 -63
@@ -32,6 +32,13 @@ describe Spree::Admin::WidgetsController, type: :controller do
32
32
  model do
33
33
  acts_as_list
34
34
  validates :name, presence: true
35
+ before_destroy :check_destroy_constraints
36
+
37
+ def check_destroy_constraints
38
+ return unless name == 'undestroyable'
39
+ errors.add :base, "You can't destroy undestroyable things!"
40
+ throw(:abort)
41
+ end
35
42
  end
36
43
  end
37
44
 
@@ -146,6 +153,21 @@ describe Spree::Admin::WidgetsController, type: :controller do
146
153
  it 'destroys the resource' do
147
154
  expect { subject }.to change { Widget.count }.from(1).to(0)
148
155
  end
156
+
157
+ context 'failure' do
158
+ let(:widget) { Widget.create!(name: 'undestroyable') }
159
+ let(:params) { { id: widget.id } }
160
+
161
+ context 'js format' do
162
+ subject { delete :destroy, params: params, format: 'js' }
163
+
164
+ it 'responds with error message' do
165
+ subject
166
+ expect(response).to be_unprocessable
167
+ expect(response.body).to eq assigns(:widget).errors.full_messages.join(', ')
168
+ end
169
+ end
170
+ end
149
171
  end
150
172
 
151
173
  describe '#update_positions' do
@@ -13,7 +13,7 @@ module Spree
13
13
  let(:stock_item) { variant.stock_items.first }
14
14
  let!(:user) { create :user }
15
15
 
16
- before { expect(controller).to receive(:spree_current_user).and_return(user) }
16
+ before { expect(controller).to receive(:try_spree_current_user).and_return(user) }
17
17
  before { request.env["HTTP_REFERER"] = "product_admin_page" }
18
18
 
19
19
  subject do
@@ -3,8 +3,8 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  shared_examples "update reason loader" do
6
- it "sets the update_reasons variable to a list of categories sorted by category name " do
7
- expect(assigns(:update_reasons)).to eq [update_reason]
6
+ it "sets the store_credit_reasons variable to a list of categories sorted by category name " do
7
+ expect(assigns(:store_credit_reasons)).to eq [store_credit_reason]
8
8
  end
9
9
  end
10
10
 
@@ -16,11 +16,11 @@ describe Spree::Admin::StoreCreditsController do
16
16
 
17
17
  let!(:b_credit_category) { create(:store_credit_category, name: "B category") }
18
18
  let!(:a_credit_category) { create(:store_credit_category, name: "A category") }
19
- let!(:update_reason) { create(:store_credit_update_reason) }
19
+ let!(:store_credit_reason) { create(:store_credit_reason) }
20
20
 
21
21
  describe "#show" do
22
22
  let!(:store_credit) { create(:store_credit, user: user, category: a_credit_category) }
23
- let!(:event) { create(:store_credit_auth_event, store_credit: store_credit, created_at: 5.days.ago) }
23
+ let!(:event) { create(:store_credit_auth_event, store_credit: store_credit, created_at: 5.days.ago) }
24
24
 
25
25
  before { get :show, params: { user_id: user.id, id: store_credit.id } }
26
26
 
@@ -173,12 +173,12 @@ describe Spree::Admin::StoreCreditsController do
173
173
  describe "#update_amount" do
174
174
  let(:original_amount) { 100.0 }
175
175
  let!(:store_credit) { create(:store_credit, user: user, amount: original_amount) }
176
- let!(:update_reason) { create(:store_credit_update_reason) }
176
+ let!(:store_credit_reason) { create(:store_credit_reason) }
177
177
  let(:parameters) do
178
178
  {
179
179
  user_id: user.id,
180
180
  id: store_credit.id,
181
- update_reason_id: update_reason.id,
181
+ store_credit_reason_id: store_credit_reason.id,
182
182
  store_credit: {
183
183
  amount: updated_amount
184
184
  }
@@ -271,7 +271,7 @@ describe Spree::Admin::StoreCreditsController do
271
271
  {
272
272
  user_id: user.id,
273
273
  id: store_credit.id,
274
- update_reason_id: update_reason.id
274
+ store_credit_reason_id: store_credit_reason.id
275
275
  }
276
276
  end
277
277
 
@@ -21,8 +21,8 @@ describe "Payment Methods", type: :feature do
21
21
  within("table#listing_payment_methods") do
22
22
  expect(all("th")[1].text).to eq("Name")
23
23
  expect(all("th")[2].text).to eq("Type")
24
- expect(all("th")[3].text).to eq("Available to users")
25
- expect(all("th")[4].text).to eq("Available to admin")
24
+ expect(all("th")[3].text).to eq("Available to Users")
25
+ expect(all("th")[4].text).to eq("Available to Admin")
26
26
  expect(all("th")[5].text).to eq("State")
27
27
  end
28
28
 
@@ -18,7 +18,7 @@ describe "Shipping Methods", type: :feature do
18
18
  within_row(1) do
19
19
  expect(column_text(1)).to eq(shipping_method.name)
20
20
  expect(column_text(2)).to eq(zone.name)
21
- expect(column_text(3)).to eq("Flat rate")
21
+ expect(column_text(3)).to eq("Flat Rate")
22
22
  expect(column_text(4)).to eq("Yes")
23
23
  end
24
24
  end
@@ -99,7 +99,7 @@ describe "Shipping Methods", type: :feature do
99
99
  click_icon :edit
100
100
  end
101
101
 
102
- select 'Flexible Rate per package item', from: 'Base Calculator'
102
+ select 'Flexible Rate per Package Item', from: 'Base Calculator'
103
103
 
104
104
  fill_in 'First Item', with: 10
105
105
  fill_in 'Additional Item', with: 20
@@ -23,10 +23,6 @@ describe "Homepage", type: :feature do
23
23
  expect(page).to have_link("Products", href: "/admin/products", count: 2)
24
24
  end
25
25
 
26
- it "should have a link to reports" do
27
- expect(page).to have_link("Reports", href: "/admin/reports")
28
- end
29
-
30
26
  it "should have a link to configuration" do
31
27
  expect(page).to have_link("Settings", href: "/admin/stores")
32
28
  end
@@ -71,7 +67,7 @@ describe "Homepage", type: :feature do
71
67
 
72
68
  context 'as fakedispatch user' do
73
69
  before do
74
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil)
70
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
75
71
  end
76
72
 
77
73
  custom_authorization! do |_user|
@@ -84,7 +80,6 @@ describe "Homepage", type: :feature do
84
80
  expect(page).to have_link('Orders')
85
81
  expect(page).not_to have_link('Products')
86
82
  expect(page).not_to have_link('Promotions')
87
- expect(page).not_to have_link('Reports')
88
83
  expect(page).not_to have_link('Settings')
89
84
  end
90
85
  end
@@ -47,7 +47,7 @@ describe "Orders Listing", type: :feature, js: true do
47
47
  within_row(1) { expect(page).to have_content("R100") }
48
48
  within_row(2) { expect(page).to have_content("R200") }
49
49
 
50
- click_link "Completed At", exact: false
50
+ click_link "Completed at", exact: false
51
51
 
52
52
  # Completed at desc
53
53
  within_row(1) { expect(page).to have_content("R200") }
@@ -201,6 +201,123 @@ describe "New Order", type: :feature do
201
201
  end
202
202
  end
203
203
 
204
+ context 'with a checkout_zone set as the country of Canada' do
205
+ let!(:canada) { create(:country, iso: 'CA', states_required: true) }
206
+ let!(:canada_state) { create(:state, country: canada) }
207
+ let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', countries: [canada]) }
208
+
209
+ before do
210
+ Spree::Country.update_all(states_required: true)
211
+ Spree::Config.checkout_zone = checkout_zone.name
212
+ end
213
+
214
+ context 'and default_country_iso of the United States' do
215
+ before do
216
+ Spree::Config.default_country_iso = Spree::Country.find_by!(iso: 'US').iso
217
+ end
218
+
219
+ it 'the shipping address country select includes only options for Canada' do
220
+ visit spree.new_admin_order_path
221
+ click_link 'Customer'
222
+ within '#shipping' do
223
+ expect(page).to have_select(
224
+ 'Country',
225
+ options: ['Canada']
226
+ )
227
+ end
228
+ end
229
+
230
+ it 'does not show any shipping address state' do
231
+ visit spree.new_admin_order_path
232
+ click_link 'Customer'
233
+ within '#shipping' do
234
+ expect(page).to have_select(
235
+ 'State',
236
+ disabled: true,
237
+ visible: false,
238
+ options: ['']
239
+ )
240
+ end
241
+ end
242
+
243
+ it 'the billing address country select includes only options for Canada' do
244
+ visit spree.new_admin_order_path
245
+ click_link 'Customer'
246
+ within '#billing' do
247
+ expect(page).to have_select(
248
+ 'Country',
249
+ options: ['Canada']
250
+ )
251
+ end
252
+ end
253
+
254
+ it 'does not show any billing address state' do
255
+ visit spree.new_admin_order_path
256
+ click_link 'Customer'
257
+ within '#billing' do
258
+ expect(page).to have_select(
259
+ 'State',
260
+ disabled: true,
261
+ visible: false,
262
+ options: ['']
263
+ )
264
+ end
265
+ end
266
+ end
267
+
268
+ context 'and default_country_iso of Canada' do
269
+ before do
270
+ Spree::Config.default_country_iso = Spree::Country.find_by!(iso: 'CA').iso
271
+ end
272
+
273
+ it 'defaults the shipping address country to Canada' do
274
+ visit spree.new_admin_order_path
275
+ click_link 'Customer'
276
+ within '#shipping' do
277
+ expect(page).to have_select(
278
+ 'Country',
279
+ selected: 'Canada',
280
+ options: ['Canada']
281
+ )
282
+ end
283
+ end
284
+
285
+ it 'shows relevant shipping address states' do
286
+ visit spree.new_admin_order_path
287
+ click_link 'Customer'
288
+ within '#shipping' do
289
+ expect(page).to have_select(
290
+ 'State',
291
+ options: [''] + canada.states.map(&:name)
292
+ )
293
+ end
294
+ end
295
+
296
+ it 'defaults the billing address country to Canada' do
297
+ visit spree.new_admin_order_path
298
+ click_link 'Customer'
299
+ within '#billing' do
300
+ expect(page).to have_select(
301
+ 'Country',
302
+ selected: 'Canada',
303
+ options: ['Canada']
304
+ )
305
+ end
306
+ end
307
+
308
+ it 'shows relevant billing address states' do
309
+ visit spree.new_admin_order_path
310
+ click_link 'Customer'
311
+ within '#billing' do
312
+ expect(page).to have_select(
313
+ 'State',
314
+ options: [''] + canada.states.map(&:name)
315
+ )
316
+ end
317
+ end
318
+ end
319
+ end
320
+
204
321
  def fill_in_address
205
322
  fill_in "First Name", with: "John 99"
206
323
  fill_in "Last Name", with: "Doe"
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe 'New Refund creation', :js do
6
+ stub_authorization!
7
+
8
+ let(:order) { create :order_ready_to_ship }
9
+ let(:payment) { order.payments.first }
10
+ let(:amount) { '10.99' }
11
+ let!(:reason) { create :refund_reason }
12
+
13
+ it 'creates a new refund' do
14
+ visit spree.new_admin_order_payment_refund_path(order, payment)
15
+ expect(page).not_to have_selector 'td', text: amount
16
+ within '.new_refund' do
17
+ fill_in 'refund_amount', with: amount
18
+ select reason.name, from: 'Reason'
19
+ click_button 'Refund'
20
+ end
21
+ expect(page).to have_content 'Refund has been successfully created!'
22
+ expect(page).to have_selector 'td', text: amount
23
+ end
24
+
25
+ it 'disables the button at submit' do
26
+ visit spree.new_admin_order_payment_refund_path(order, payment)
27
+ page.execute_script "$('form').submit(function(e) { e.preventDefault()})"
28
+ within '.new_refund' do
29
+ fill_in 'refund_amount', with: amount
30
+ select reason.name, from: 'Reason'
31
+ click_button 'Refund'
32
+ expect(find('input[type="submit"]')).to be_disabled
33
+ end
34
+ end
35
+ end
@@ -415,7 +415,7 @@ describe "Order Details", type: :feature, js: true do
415
415
  it 'should not allow a shipment to split stock to itself' do
416
416
  visit spree.edit_admin_order_path(order)
417
417
  within('tr', text: line_item.sku) { click_icon 'arrows-h' }
418
- click_on 'Choose location'
418
+ click_on 'Choose Location'
419
419
  within '.select2-results' do
420
420
  expect(page).to have_content(shipment2.number)
421
421
  expect(page).not_to have_content(shipment1.number)
@@ -499,7 +499,7 @@ describe "Order Details", type: :feature, js: true do
499
499
 
500
500
  context 'with only read permissions' do
501
501
  before do
502
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil)
502
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
503
503
  end
504
504
 
505
505
  custom_authorization! do |_user|
@@ -22,7 +22,7 @@ describe 'Payments', type: :feature do
22
22
  end
23
23
 
24
24
  # Regression tests for https://github.com/spree/spree/issues/1453
25
- context 'with a check payment' do
25
+ context 'with a check payment', js: true do
26
26
  let(:order) { create(:completed_order_with_totals, number: 'R100') }
27
27
  let!(:payment) do
28
28
  create(:payment,
@@ -205,7 +205,7 @@ describe 'Payments', type: :feature do
205
205
  visit spree.admin_order_payments_path(order.reload)
206
206
  end
207
207
 
208
- it "can successfully be created and captured" do
208
+ it "can successfully be created and captured", js: true do
209
209
  click_on 'Update'
210
210
  expect(page).to have_content("Payment has been successfully created!")
211
211
  click_icon(:capture)
@@ -7,9 +7,12 @@ describe "Return payment state spec" do
7
7
 
8
8
  before do
9
9
  Spree::RefundReason.create!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false)
10
+ allow_any_instance_of(Spree::Admin::ReimbursementsController).to receive(:try_spree_current_user).
11
+ and_return(user)
10
12
  end
11
13
 
12
14
  let!(:order) { create(:shipped_order) }
15
+ let(:user) { create(:admin_user) }
13
16
 
14
17
  # Regression test for https://github.com/spree/spree/issues/6229
15
18
  it "refunds and has outstanding_balance of zero", js: true do
@@ -58,6 +58,34 @@ describe "Shipments", type: :feature do
58
58
  end
59
59
  end
60
60
 
61
+ context "destroying a shipment", js: true do
62
+ before do
63
+ visit spree.admin_path
64
+ click_link "Orders"
65
+ within_row(1) do
66
+ click_link "R100"
67
+ end
68
+ end
69
+
70
+ context "when the line item cannot be found" do
71
+ it "shows the proper error message" do
72
+ expect(page).to have_selector '.delete-item'
73
+ order.shipments.first.line_items.each(&:destroy)
74
+ accept_alert { first('.delete-item').click }
75
+ expect(page).to have_content 'The resource you were looking for could not be found.'
76
+ end
77
+ end
78
+
79
+ context "when the shipment has already been shipped" do
80
+ it "shows the proper error message" do
81
+ expect(page).to have_selector '.delete-item'
82
+ order.shipments.first.ship!
83
+ accept_alert { first('.delete-item').click }
84
+ expect(page).to have_content 'Cannot remove items from a shipped shipment'
85
+ end
86
+ end
87
+ end
88
+
61
89
  context "moving variants between shipments", js: true do
62
90
  let!(:order) { create(:completed_order_with_pending_payment, number: "R100", state: "complete", line_items_count: 5) }
63
91
  let!(:la) { create(:stock_location, name: "LA") }
@@ -299,7 +299,7 @@ describe "Products", type: :feature do
299
299
 
300
300
  context 'with only product permissions' do
301
301
  before do
302
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil)
302
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
303
303
  end
304
304
 
305
305
  custom_authorization! do |_user|
@@ -44,31 +44,28 @@ describe "Product Stock", type: :feature do
44
44
  it "can create a positive stock adjustment", js: true do
45
45
  adjust_count_on_hand('14')
46
46
  stock_item.reload
47
- expect(stock_item.count_on_hand).to eq 14
47
+ expect(stock_item.count_on_hand).to eq 24
48
48
  expect(stock_item.stock_movements.count).to eq 1
49
- expect(stock_item.stock_movements.first.quantity).to eq 4
49
+ expect(stock_item.stock_movements.first.quantity).to eq 14
50
50
  end
51
51
 
52
52
  it "can create a negative stock adjustment", js: true do
53
- adjust_count_on_hand('4')
53
+ adjust_count_on_hand('-4')
54
54
  stock_item.reload
55
- expect(stock_item.count_on_hand).to eq 4
55
+ expect(stock_item.count_on_hand).to eq 6
56
56
  expect(stock_item.stock_movements.count).to eq 1
57
- expect(stock_item.stock_movements.first.quantity).to eq(-6)
57
+ expect(stock_item.stock_movements.first.quantity).to eq(-4)
58
58
  end
59
59
 
60
60
  def adjust_count_on_hand(count_on_hand)
61
- within('.variant-stock-items', text: variant.sku) do
62
- within('tr', text: stock_item.stock_location.name) do
63
- click_icon :edit
64
- find(:css, "input[type='number']").set(count_on_hand)
65
- click_icon :check
66
- end
61
+ within("tr#spree_variant_#{variant.id}") do
62
+ find(:css, "input[type='number']").set(count_on_hand)
63
+ click_icon :check
67
64
  end
68
- expect(page).to have_content('Updated successfully')
65
+ expect(page).to have_content('Updated Successfully')
69
66
  end
70
67
 
71
- context "with multiple stock locations" do
68
+ context "with stock locations that don't have stock items for variant yet" do
72
69
  before do
73
70
  create(:stock_location, name: 'Other location', propagate_all_variants: false)
74
71
  end