solidus_backend 2.10.2 → 2.11.3

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 (234) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend.js +4 -1
  3. data/app/assets/javascripts/spree/backend/adjustments.js +1 -1
  4. data/app/assets/javascripts/spree/backend/admin.js +18 -29
  5. data/app/assets/javascripts/spree/backend/collections/states.js +1 -1
  6. data/app/assets/javascripts/spree/backend/components/selectable_table.js +5 -0
  7. data/app/assets/javascripts/spree/backend/components/selectable_table/return_items.js +5 -0
  8. data/app/assets/javascripts/spree/backend/components/selectable_table/summary.js +7 -0
  9. data/app/assets/javascripts/spree/backend/components/sortable_table.js +31 -25
  10. data/app/assets/javascripts/spree/backend/models/order.js +3 -3
  11. data/app/assets/javascripts/spree/backend/models/payment.js +1 -1
  12. data/app/assets/javascripts/spree/backend/models/shipment.js +1 -1
  13. data/app/assets/javascripts/spree/backend/models/stock_item.js +1 -1
  14. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +2 -2
  15. data/app/assets/javascripts/spree/backend/option_value_picker.js +2 -2
  16. data/app/assets/javascripts/spree/backend/product_picker.js +2 -2
  17. data/app/assets/javascripts/spree/backend/routes.js +40 -21
  18. data/app/assets/javascripts/spree/backend/shipments.js +5 -5
  19. data/app/assets/javascripts/spree/backend/shipping_methods/stock_locations_picker.js +18 -0
  20. data/app/assets/javascripts/spree/backend/stock_management.js +4 -2
  21. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +2 -2
  22. data/app/assets/javascripts/spree/backend/taxons.js +3 -3
  23. data/app/assets/javascripts/spree/backend/templates/index.js +2 -0
  24. data/app/assets/javascripts/spree/backend/templates/orders/customer_details/autocomplete.hbs +2 -2
  25. data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +5 -1
  26. data/app/assets/javascripts/spree/backend/templates/tables/return_item_sum_amount.hbs +7 -0
  27. data/app/assets/javascripts/spree/backend/templates/tables/selectable_label.hbs +6 -0
  28. data/app/assets/javascripts/spree/backend/user_picker.js +3 -4
  29. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +2 -2
  30. data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +2 -2
  31. data/app/assets/javascripts/spree/backend/views/index.js +4 -0
  32. data/app/assets/javascripts/spree/backend/views/order/address.js +1 -1
  33. data/app/assets/javascripts/spree/backend/views/order/customer_select.js +2 -3
  34. data/app/assets/javascripts/spree/backend/views/order/details_adjustments.js +4 -1
  35. data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +4 -0
  36. data/app/assets/javascripts/spree/backend/views/tables/return_items.js +9 -0
  37. data/app/assets/javascripts/spree/backend/views/tables/selectable_table.js +70 -0
  38. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/sum_return_item_amount.js +32 -0
  39. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/summary.js +45 -0
  40. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +4 -5
  41. data/app/assets/stylesheets/spree/backend/sections/_orders.scss +5 -1
  42. data/app/assets/stylesheets/spree/backend/sections/_style_guide.scss +4 -0
  43. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -0
  44. data/app/controllers/spree/admin/base_controller.rb +6 -0
  45. data/app/controllers/spree/admin/cancellations_controller.rb +2 -0
  46. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -4
  47. data/app/controllers/spree/admin/images_controller.rb +2 -1
  48. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -0
  49. data/app/controllers/spree/admin/orders_controller.rb +7 -2
  50. data/app/controllers/spree/admin/payments_controller.rb +3 -1
  51. data/app/controllers/spree/admin/product_properties_controller.rb +1 -1
  52. data/app/controllers/spree/admin/products_controller.rb +18 -24
  53. data/app/controllers/spree/admin/promotion_codes_controller.rb +9 -4
  54. data/app/controllers/spree/admin/refunds_controller.rb +20 -0
  55. data/app/controllers/spree/admin/resource_controller.rb +27 -7
  56. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  57. data/app/controllers/spree/admin/root_controller.rb +1 -1
  58. data/app/controllers/spree/admin/search_controller.rb +1 -2
  59. data/app/controllers/spree/admin/stock_items_controller.rb +6 -5
  60. data/app/controllers/spree/admin/stock_locations_controller.rb +4 -0
  61. data/app/controllers/spree/admin/stock_movements_controller.rb +7 -0
  62. data/app/controllers/spree/admin/taxons_controller.rb +12 -1
  63. data/app/controllers/spree/admin/users/api_key_controller.rb +29 -0
  64. data/app/controllers/spree/admin/users_controller.rb +37 -20
  65. data/app/controllers/spree/admin/variants_controller.rb +4 -2
  66. data/app/controllers/spree/admin/zones_controller.rb +1 -1
  67. data/app/helpers/spree/admin/base_helper.rb +4 -0
  68. data/app/helpers/spree/admin/customer_returns_helper.rb +1 -1
  69. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  70. data/app/helpers/spree/admin/orders_helper.rb +8 -4
  71. data/app/helpers/spree/admin/stock_movements_helper.rb +8 -4
  72. data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +2 -3
  73. data/app/views/spree/admin/images/index.html.erb +25 -21
  74. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +8 -1
  75. data/app/views/spree/admin/option_types/edit.html.erb +3 -1
  76. data/app/views/spree/admin/orders/customer_details/_form.html.erb +13 -13
  77. data/app/views/spree/admin/orders/index.html.erb +23 -13
  78. data/app/views/spree/admin/payment_methods/_form.html.erb +7 -2
  79. data/app/views/spree/admin/payments/index.html.erb +3 -1
  80. data/app/views/spree/admin/prices/_master_variant_table.html.erb +3 -3
  81. data/app/views/spree/admin/prices/_table.html.erb +3 -3
  82. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +7 -2
  83. data/app/views/spree/admin/product_properties/index.html.erb +14 -2
  84. data/app/views/spree/admin/products/_form.html.erb +13 -2
  85. data/app/views/spree/admin/products/index.html.erb +2 -2
  86. data/app/views/spree/admin/promotion_codes/index.html.erb +1 -1
  87. data/app/views/spree/admin/promotions/_actions.html.erb +1 -1
  88. data/app/views/spree/admin/promotions/_activations_new.html.erb +1 -1
  89. data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
  90. data/app/views/spree/admin/promotions/edit.html.erb +2 -2
  91. data/app/views/spree/admin/promotions/index.html.erb +12 -5
  92. data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -10
  93. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  94. data/app/views/spree/admin/search/users.json.jbuilder +15 -1
  95. data/app/views/spree/admin/shared/_address.html.erb +6 -6
  96. data/app/views/spree/admin/shared/_address_form.html.erb +15 -8
  97. data/app/views/spree/admin/shared/_order_submenu.html.erb +4 -4
  98. data/app/views/spree/admin/shared/_payments_tabs.html.erb +1 -1
  99. data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +5 -5
  100. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +6 -6
  101. data/app/views/spree/admin/shared/_shipping_tabs.html.erb +3 -3
  102. data/app/views/spree/admin/shared/_taxes_tabs.html.erb +2 -2
  103. data/app/views/spree/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  104. data/app/views/spree/admin/shipping_methods/_form.html.erb +18 -0
  105. data/app/views/spree/admin/stock_items/_stock_management.html.erb +1 -1
  106. data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
  107. data/app/views/spree/admin/stock_locations/index.html.erb +3 -1
  108. data/app/views/spree/admin/stock_movements/index.html.erb +30 -1
  109. data/app/views/spree/admin/store_credits/index.html.erb +1 -1
  110. data/app/views/spree/admin/stores/_form.html.erb +6 -0
  111. data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
  112. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
  113. data/app/views/spree/admin/users/_form.html.erb +2 -2
  114. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  115. data/app/views/spree/admin/users/edit.html.erb +4 -4
  116. data/app/views/spree/admin/users/items.html.erb +5 -3
  117. data/app/views/spree/admin/users/orders.html.erb +5 -3
  118. data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
  119. data/app/views/spree/admin/variants/index.html.erb +2 -2
  120. data/config/initializers/form_builder.rb +2 -2
  121. data/lib/spree/backend/engine.rb +0 -2
  122. data/lib/spree/backend_configuration.rb +14 -1
  123. data/solidus_backend.gemspec +4 -4
  124. metadata +24 -123
  125. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
  126. data/script/rails +0 -10
  127. data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
  128. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
  129. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
  130. data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
  131. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
  132. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
  133. data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
  134. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
  135. data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
  136. data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
  137. data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
  138. data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
  139. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
  140. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
  141. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
  142. data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
  143. data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
  144. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
  145. data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -201
  146. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
  147. data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
  148. data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
  149. data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
  150. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
  151. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
  152. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
  153. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
  154. data/spec/controllers/spree/admin/users_controller_spec.rb +0 -287
  155. data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
  156. data/spec/features/admin/configuration/payment_methods_spec.rb +0 -176
  157. data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -126
  158. data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
  159. data/spec/features/admin/configuration/store_spec.rb +0 -62
  160. data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
  161. data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
  162. data/spec/features/admin/configuration/taxonomies_spec.rb +0 -61
  163. data/spec/features/admin/configuration/zones_spec.rb +0 -41
  164. data/spec/features/admin/homepage_spec.rb +0 -86
  165. data/spec/features/admin/javascript_format_money_spec.rb +0 -22
  166. data/spec/features/admin/locale_spec.rb +0 -34
  167. data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
  168. data/spec/features/admin/orders/adjustments_spec.rb +0 -130
  169. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
  170. data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
  171. data/spec/features/admin/orders/customer_details_spec.rb +0 -203
  172. data/spec/features/admin/orders/customer_returns_spec.rb +0 -41
  173. data/spec/features/admin/orders/line_items_spec.rb +0 -52
  174. data/spec/features/admin/orders/listing_spec.rb +0 -186
  175. data/spec/features/admin/orders/log_entries_spec.rb +0 -56
  176. data/spec/features/admin/orders/new_order_spec.rb +0 -379
  177. data/spec/features/admin/orders/new_refund_spec.rb +0 -35
  178. data/spec/features/admin/orders/order_details_spec.rb +0 -591
  179. data/spec/features/admin/orders/payments_spec.rb +0 -330
  180. data/spec/features/admin/orders/return_authorizations_spec.rb +0 -56
  181. data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
  182. data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
  183. data/spec/features/admin/orders/shipments_spec.rb +0 -145
  184. data/spec/features/admin/payments/store_credits_spec.rb +0 -23
  185. data/spec/features/admin/products/edit/images_spec.rb +0 -76
  186. data/spec/features/admin/products/edit/products_spec.rb +0 -92
  187. data/spec/features/admin/products/edit/taxons_spec.rb +0 -57
  188. data/spec/features/admin/products/edit/variants_spec.rb +0 -63
  189. data/spec/features/admin/products/option_types_spec.rb +0 -116
  190. data/spec/features/admin/products/pricing_spec.rb +0 -127
  191. data/spec/features/admin/products/products_spec.rb +0 -348
  192. data/spec/features/admin/products/properties_spec.rb +0 -141
  193. data/spec/features/admin/products/stock_management_spec.rb +0 -101
  194. data/spec/features/admin/products/variant_spec.rb +0 -89
  195. data/spec/features/admin/promotion_adjustments_spec.rb +0 -286
  196. data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
  197. data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
  198. data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
  199. data/spec/features/admin/promotions/promotion_code_batches_spec.rb +0 -37
  200. data/spec/features/admin/promotions/promotion_code_spec.rb +0 -31
  201. data/spec/features/admin/promotions/promotion_spec.rb +0 -52
  202. data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
  203. data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
  204. data/spec/features/admin/reimbursements_spec.rb +0 -18
  205. data/spec/features/admin/store_credits_spec.rb +0 -132
  206. data/spec/features/admin/stores_spec.rb +0 -37
  207. data/spec/features/admin/style_guide_spec.rb +0 -14
  208. data/spec/features/admin/taxons_spec.rb +0 -90
  209. data/spec/features/admin/users_spec.rb +0 -412
  210. data/spec/fixtures/files/ror_ringer.jpeg +0 -0
  211. data/spec/helpers/admin/base_helper_spec.rb +0 -49
  212. data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
  213. data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
  214. data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
  215. data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
  216. data/spec/javascripts/fixtures/_boot.html.erb +0 -8
  217. data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
  218. data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
  219. data/spec/javascripts/format_money_spec.js +0 -48
  220. data/spec/javascripts/spec_helper.js +0 -13
  221. data/spec/javascripts/support/show_errors.js +0 -8
  222. data/spec/javascripts/support/with_translations.js +0 -11
  223. data/spec/javascripts/translation_spec.js +0 -58
  224. data/spec/javascripts/views/number_with_currency_spec.js +0 -72
  225. data/spec/lib/spree/backend_configuration/menu_item_spec.rb +0 -17
  226. data/spec/lib/spree/backend_configuration_spec.rb +0 -22
  227. data/spec/spec_helper.rb +0 -123
  228. data/spec/support/appear_before_matcher.rb +0 -10
  229. data/spec/support/feature/base_feature_helper.rb +0 -17
  230. data/spec/support/feature/order_feature_helper.rb +0 -27
  231. data/spec/teaspoon_env.rb +0 -51
  232. data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
  233. data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
  234. data/spec/views/spree/admin/shared/navigation_footer_spec.rb +0 -67
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe Spree::Admin::LocaleController, type: :controller do
6
- stub_authorization!
7
-
8
- before { I18n.backend.store_translations(:fr, {}) }
9
-
10
- after do
11
- I18n.locale = :en
12
- I18n.reload!
13
- end
14
-
15
- context 'switch_to_locale specified' do
16
- let(:json_response) { JSON.parse(response.body, symbolize_names: true) }
17
-
18
- before do
19
- get :set, params: { switch_to_locale: switch_to_locale, format: :json }
20
- end
21
-
22
- context 'available locale' do
23
- let(:switch_to_locale) { 'fr' }
24
-
25
- it 'sets locale and returns the location for the redirect' do
26
- expect(I18n.locale).to eq :fr
27
- expect(session[:admin_locale]).to eq(switch_to_locale)
28
- expect(json_response).
29
- to eq({ locale: switch_to_locale,
30
- location: spree.admin_url(host: 'test.host') })
31
- expect(response).to have_http_status(:ok)
32
- end
33
- end
34
-
35
- context 'unavailable locale' do
36
- let(:switch_to_locale) { 'klingon' }
37
-
38
- it 'does not change locale and returns 404' do
39
- expect(I18n.locale).to eq :en
40
- expect(json_response).to eq({ locale: 'en', })
41
- expect(response).to have_http_status(:not_found)
42
- end
43
- end
44
- end
45
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- # This test exists in this file because in the standard admin/products_controller spec
5
- # There is the stub_authorization call. This call is not triggered for this test because
6
- # the load_resource filter in Spree::Admin::ResourceController is prepended to the filter chain
7
- # this means this call is triggered before the authorize_admin call and in this case
8
- # the load_resource filter halts the request meaning authorize_admin is not called at all.
9
- describe Spree::Admin::ProductsController, type: :controller do
10
- stub_authorization!
11
-
12
- # Regression test for GH https://github.com/spree/spree/issues/538
13
- it "cannot find a non-existent product" do
14
- get :edit, params: { id: "non-existent-product" }
15
- expect(response).to redirect_to(spree.admin_products_path)
16
- expect(flash[:error]).to eql("Product is not found")
17
- end
18
- end
@@ -1,128 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
- require "cancan"
5
-
6
- describe Spree::Admin::Orders::CustomerDetailsController, type: :controller do
7
- context "with authorization" do
8
- stub_authorization!
9
-
10
- context '#edit' do
11
- context 'when order has no shipping nor billing address' do
12
- let(:order) { create(:order, number: "R123456789", ship_address: nil, bill_address: nil) }
13
-
14
- context "with a checkout_zone set as the country of Canada" do
15
- let!(:united_states) { create(:country, iso: 'US', states_required: true) }
16
- let!(:canada) { create(:country, iso: 'CA', states_required: true) }
17
- let!(:checkout_zone) { create(:zone, name: "Checkout Zone", countries: [canada]) }
18
-
19
- before do
20
- stub_spree_preferences(checkout_zone: checkout_zone.name)
21
- end
22
-
23
- context "and default_country_iso of the Canada" do
24
- before do
25
- stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "CA").iso)
26
- end
27
-
28
- it 'defaults the shipping address country to Canada' do
29
- get :edit, params: { order_id: order.number }
30
- expect(assigns(:order).shipping_address.country_id).to eq canada.id
31
- end
32
-
33
- it 'defaults the billing address country to Canada' do
34
- get :edit, params: { order_id: order.number }
35
- expect(assigns(:order).billing_address.country_id).to eq canada.id
36
- end
37
- end
38
-
39
- context "and default_country_iso of the United States" do
40
- before do
41
- stub_spree_preferences(default_country_iso: Spree::Country.find_by!(iso: "US").iso)
42
- end
43
-
44
- it 'defaults the shipping address country to nil' do
45
- get :edit, params: { order_id: order.number }
46
- expect(assigns(:order).shipping_address.country_id).to be_nil
47
- end
48
-
49
- it 'defaults the billing address country to nil' do
50
- get :edit, params: { order_id: order.number }
51
- expect(assigns(:order).billing_address.country_id).to be_nil
52
- end
53
- end
54
- end
55
- end
56
- end
57
-
58
- context "#update" do
59
- let(:order) { create(:order, number: "R123456789") }
60
-
61
- before { allow(Spree::Order).to receive_message_chain(:includes, :find_by!) { order } }
62
-
63
- it "updates + progresses the order" do
64
- expect(order).to receive(:update) { true }
65
- expect(order).to receive(:next) { false }
66
- attributes = { order_id: order.number, order: { email: "" } }
67
- put :update, params: attributes
68
- end
69
-
70
- it "does refresh the shipment rates with all shipping methods" do
71
- expect(order).to receive(:refresh_shipment_rates)
72
- attributes = { order_id: order.number, order: { email: "" } }
73
- put :update, params: attributes
74
- end
75
-
76
- # Regression spec
77
- context 'completed order' do
78
- let(:order) { create(:shipped_order) }
79
- let(:attributes) do
80
- {
81
- order_id: order.number,
82
- guest_checkout: 'false',
83
- user_id: order.user_id,
84
- order: { email: "foo@bar.com" }
85
- }
86
- end
87
-
88
- it 'allows the updating of an email address' do
89
- expect { put :update, params: attributes }.to change { order.reload.email }.to eq 'foo@bar.com'
90
- expect(response).to be_redirect
91
- end
92
- end
93
-
94
- context "false guest checkout param" do
95
- let!(:assigned_user){ create :user }
96
- it "attempts to associate the user" do
97
- attributes = {
98
- order_id: order.number,
99
- user_id: assigned_user.id,
100
- guest_checkout: 'false',
101
- order: { email: "" }
102
- }
103
-
104
- expect {
105
- put :update, params: attributes
106
- }.to change{ order.reload.user }.to(assigned_user)
107
- end
108
- end
109
-
110
- context "not false guest checkout param" do
111
- it "does not attempt to associate the user" do
112
- allow(order).to receive_messages(update: true,
113
- next: false,
114
- refresh_shipment_rates: true)
115
-
116
- attributes = {
117
- order_id: order.number,
118
- order: { email: "foo@example.com" }
119
- }
120
-
121
- expect {
122
- put :update, params: attributes
123
- }.not_to change{ order.reload.user }
124
- end
125
- end
126
- end
127
- end
128
- end
@@ -1,408 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'cancan'
5
-
6
- describe Spree::Admin::OrdersController, type: :controller do
7
- let!(:store) { create(:store) }
8
- context "with authorization" do
9
- stub_authorization!
10
-
11
- before do
12
- request.env["HTTP_REFERER"] = "http://localhost:3000"
13
- end
14
-
15
- let(:order) do
16
- mock_model(
17
- Spree::Order,
18
- completed?: true,
19
- total: 100,
20
- number: 'R123456789',
21
- all_adjustments: adjustments,
22
- ship_address: mock_model(Spree::Address)
23
- )
24
- end
25
-
26
- let(:adjustments) { double('adjustments') }
27
-
28
- before do
29
- allow(Spree::Order).to receive_message_chain(:includes, find_by!: order)
30
- allow(order).to receive_messages(contents: Spree::OrderContents.new(order))
31
- end
32
-
33
- context "#approve" do
34
- it "approves an order" do
35
- expect(order.contents).to receive(:approve).with(user: controller.try_spree_current_user)
36
- put :approve, params: { id: order.number }
37
- expect(flash[:success]).to eq I18n.t('spree.order_approved')
38
- end
39
- end
40
-
41
- context "#cancel" do
42
- it "cancels an order" do
43
- expect(order).to receive(:canceled_by).with(controller.try_spree_current_user)
44
- put :cancel, params: { id: order.number }
45
- expect(flash[:success]).to eq I18n.t('spree.order_canceled')
46
- end
47
- end
48
-
49
- context "#resume" do
50
- it "resumes an order" do
51
- expect(order).to receive(:resume!)
52
- put :resume, params: { id: order.number }
53
- expect(flash[:success]).to eq I18n.t('spree.order_resumed')
54
- end
55
- end
56
-
57
- context "#resend" do
58
- let(:order) { create(:completed_order_with_totals) }
59
- it "resends order email" do
60
- mail_message = double "Mail::Message"
61
- expect(Spree::OrderMailer).to receive(:confirm_email).with(order, true).and_return mail_message
62
- expect(mail_message).to receive :deliver_later
63
- post :resend, params: { id: order.number }
64
- expect(flash[:success]).to eq I18n.t('spree.order_email_resent')
65
- end
66
- end
67
-
68
- context "pagination" do
69
- it "can page through the orders" do
70
- get :index, params: { page: 2, per_page: 10 }
71
- expect(assigns[:orders].offset_value).to eq(10)
72
- expect(assigns[:orders].limit_value).to eq(10)
73
- end
74
- end
75
-
76
- # Test for https://github.com/spree/spree/issues/3346
77
- context "#new" do
78
- let(:user) { create(:user) }
79
- before do
80
- allow(controller).to receive_messages try_spree_current_user: user
81
- end
82
-
83
- it "imports a new order and sets the current user as a creator" do
84
- expect(Spree::Core::Importer::Order).to receive(:import)
85
- .with(nil, hash_including(created_by_id: controller.try_spree_current_user.id))
86
- .and_return(order)
87
- get :new
88
- end
89
-
90
- it "sets frontend_viewable to false" do
91
- expect(Spree::Core::Importer::Order).to receive(:import)
92
- .with(nil, hash_including(frontend_viewable: false ))
93
- .and_return(order)
94
- get :new
95
- end
96
-
97
- it "should associate the order with a store" do
98
- expect(Spree::Core::Importer::Order).to receive(:import)
99
- .with(user, hash_including(store_id: controller.current_store.id))
100
- .and_return(order)
101
- get :new, params: { user_id: user.id }
102
- end
103
-
104
- context "when a user_id is passed as a parameter" do
105
- let(:user) { mock_model(Spree.user_class) }
106
- before { allow(Spree.user_class).to receive_messages find_by: user }
107
-
108
- it "imports a new order and assigns the user to the order" do
109
- expect(Spree::Core::Importer::Order).to receive(:import)
110
- .with(user, hash_including(created_by_id: controller.try_spree_current_user.id))
111
- .and_return(order)
112
- get :new, params: { user_id: user.id }
113
- end
114
- end
115
-
116
- it "should redirect to cart" do
117
- get :new
118
- expect(response).to redirect_to(spree.cart_admin_order_path(Spree::Order.last))
119
- end
120
- end
121
-
122
- # Regression test for https://github.com/spree/spree/issues/3684
123
- # Rendering a form should under no circumstance mutate the order
124
- context "#edit" do
125
- it "does not refresh rates if the order is completed" do
126
- allow(order).to receive_messages completed?: true
127
- expect(order).not_to receive :refresh_shipment_rates
128
- get :edit, params: { id: order.number }
129
- end
130
-
131
- it "does not refresh the rates if the order is incomplete" do
132
- allow(order).to receive_messages completed?: false
133
- expect(order).not_to receive :refresh_shipment_rates
134
- get :edit, params: { id: order.number }
135
- end
136
-
137
- context "when order does not have a ship address" do
138
- before do
139
- allow(order).to receive_messages ship_address: nil
140
- end
141
-
142
- context 'when order_bill_address_used is true' do
143
- before { stub_spree_preferences(order_bill_address_used: true) }
144
-
145
- it "should redirect to the customer details page" do
146
- get :edit, params: { id: order.number }
147
- expect(response).to redirect_to(spree.edit_admin_order_customer_path(order))
148
- end
149
- end
150
-
151
- context 'when order_bill_address_used is false' do
152
- before { stub_spree_preferences(order_bill_address_used: false) }
153
-
154
- it "should redirect to the customer details page" do
155
- get :edit, params: { id: order.number }
156
- expect(response).to redirect_to(spree.edit_admin_order_customer_path(order))
157
- end
158
- end
159
- end
160
- end
161
-
162
- describe '#advance' do
163
- subject do
164
- put :advance, params: { id: order.number }
165
- end
166
-
167
- context 'when incomplete' do
168
- before do
169
- allow(order).to receive(:completed?).and_return(false, true)
170
- allow(order).to receive(:next).and_return(true, false)
171
- end
172
-
173
- context 'when successful' do
174
- before { allow(order).to receive(:can_complete?).and_return(true) }
175
-
176
- it 'messages and redirects' do
177
- subject
178
- expect(flash[:success]).to eq I18n.t('spree.order_ready_for_confirm')
179
- expect(response).to redirect_to(spree.confirm_admin_order_path(order))
180
- end
181
- end
182
-
183
- context 'when unsuccessful' do
184
- before do
185
- allow(order).to receive(:can_complete?).and_return(false)
186
- allow(order).to receive(:errors).and_return(double(full_messages: ['failed']))
187
- end
188
-
189
- it 'messages and redirects' do
190
- subject
191
- expect(flash[:error]).to eq order.errors.full_messages
192
- expect(response).to redirect_to(spree.confirm_admin_order_path(order))
193
- end
194
- end
195
- end
196
-
197
- context 'when already completed' do
198
- before { allow(order).to receive_messages completed?: true }
199
-
200
- it 'messages and redirects' do
201
- subject
202
- expect(flash[:notice]).to eq I18n.t('spree.order_already_completed')
203
- expect(response).to redirect_to(spree.edit_admin_order_path(order))
204
- end
205
- end
206
- end
207
-
208
- context '#confirm' do
209
- subject do
210
- get :confirm, params: { id: order.number }
211
- end
212
-
213
- context 'when in confirm' do
214
- before { allow(order).to receive_messages completed?: false, can_complete?: true }
215
-
216
- it 'renders the confirm page' do
217
- subject
218
- expect(response.status).to eq 200
219
- expect(response).to render_template(:confirm)
220
- end
221
- end
222
-
223
- context 'when before confirm' do
224
- before { allow(order).to receive_messages completed?: false, can_complete?: false }
225
-
226
- it 'renders the confirm_advance template (to allow refreshing of the order)' do
227
- subject
228
- expect(response.status).to eq 200
229
- expect(response).to render_template(:confirm_advance)
230
- end
231
- end
232
-
233
- context 'when already completed' do
234
- before { allow(order).to receive_messages completed?: true }
235
-
236
- it 'redirects to edit' do
237
- subject
238
- expect(response).to redirect_to(spree.edit_admin_order_path(order))
239
- end
240
- end
241
- end
242
-
243
- context "#complete" do
244
- subject do
245
- put :complete, params: { id: order.number }
246
- end
247
-
248
- context 'when successful' do
249
- before { allow(order).to receive(:complete!) }
250
-
251
- it 'completes the order' do
252
- expect(order).to receive(:complete!)
253
- subject
254
- end
255
-
256
- it 'messages and redirects' do
257
- subject
258
- expect(flash[:success]).to eq I18n.t('spree.order_completed')
259
- expect(response).to redirect_to(spree.edit_admin_order_path(order))
260
- end
261
- end
262
-
263
- context 'with an StateMachines::InvalidTransition error' do
264
- let(:order) { create(:order) }
265
-
266
- it 'messages and redirects' do
267
- subject
268
- expect(response).to redirect_to(spree.confirm_admin_order_path(order))
269
- expect(flash[:error].to_s).to include("Cannot transition state via :complete from :cart")
270
- end
271
- end
272
-
273
- context 'insufficient stock to complete the order' do
274
- before do
275
- expect(order).to receive(:complete!).and_raise Spree::Order::InsufficientStock
276
- end
277
-
278
- it 'messages and redirects' do
279
- subject
280
- expect(response).to redirect_to(spree.cart_admin_order_path(order))
281
- expect(flash[:error].to_s).to eq I18n.t('spree.insufficient_stock_for_order')
282
- end
283
- end
284
- end
285
-
286
- # Test for https://github.com/spree/spree/issues/3919
287
- context "search" do
288
- let(:user) { create(:user) }
289
-
290
- before do
291
- allow(controller).to receive_messages try_spree_current_user: user
292
- user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
293
-
294
- create_list(:completed_order_with_totals, 2)
295
- expect(Spree::Order.count).to eq 2
296
- end
297
-
298
- context 'by line_items_variant_id_in' do
299
- it "does not display duplicated results" do
300
- get :index, params: { q: {
301
- line_items_variant_id_in: Spree::Order.first.variants.map(&:id)
302
- } }
303
- expect(assigns[:orders].size).to eq 1
304
- end
305
- end
306
-
307
- context 'by email' do
308
- it "does not display duplicated results" do
309
- get :index, params: { q: {
310
- email_start: Spree::Order.first.email
311
- } }
312
- expect(assigns[:orders].size).to eq 1
313
- expect(assigns[:orders][0].email).to eq(Spree::Order.first.email)
314
- end
315
- end
316
- end
317
-
318
- context "#not_finalized_adjustments" do
319
- let(:order) { create(:order) }
320
- let!(:finalized_adjustment) { create(:adjustment, finalized: true, adjustable: order, order: order) }
321
-
322
- it "changes all the finalized adjustments to unfinalized" do
323
- post :unfinalize_adjustments, params: { id: order.number }
324
- expect(finalized_adjustment.reload.finalized).to eq(false)
325
- end
326
-
327
- it "sets the flash success message" do
328
- post :unfinalize_adjustments, params: { id: order.number }
329
- expect(flash[:success]).to eql('All adjustments successfully unfinalized!')
330
- end
331
-
332
- it "redirects back" do
333
- post :unfinalize_adjustments, params: { id: order.number }
334
- expect(response).to redirect_to(spree.admin_order_adjustments_path(order))
335
- end
336
- end
337
-
338
- context "#finalize_adjustments" do
339
- let(:order) { create(:order) }
340
- let!(:not_finalized_adjustment) { create(:adjustment, finalized: false, adjustable: order, order: order) }
341
-
342
- it "changes all the unfinalized adjustments to finalized" do
343
- post :finalize_adjustments, params: { id: order.number }
344
- expect(not_finalized_adjustment.reload.finalized).to eq(true)
345
- end
346
-
347
- it "sets the flash success message" do
348
- post :finalize_adjustments, params: { id: order.number }
349
- expect(flash[:success]).to eql('All adjustments successfully finalized!')
350
- end
351
-
352
- it "redirects back" do
353
- post :finalize_adjustments, params: { id: order.number }
354
- expect(response).to redirect_to(spree.admin_order_adjustments_path(order))
355
- end
356
- end
357
- end
358
-
359
- context '#authorize_admin' do
360
- let!(:user) { create(:user) }
361
- let!(:order) { create(:completed_order_with_totals, number: 'R987654321') }
362
-
363
- before do
364
- allow(controller).to receive_messages try_spree_current_user: user
365
- end
366
-
367
- it 'should grant access to users with an admin role' do
368
- user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
369
- get :index
370
- expect(response).to render_template :index
371
- end
372
-
373
- it 'should deny access to users without an admin role' do
374
- allow(user).to receive_messages has_spree_role?: false
375
- get :index
376
- expect(response).to redirect_to('/unauthorized')
377
- end
378
-
379
- context 'with only permissions on Order' do
380
- stub_authorization! do |_ability|
381
- can [:admin, :manage], Spree::Order, number: 'R987654321'
382
- end
383
-
384
- it 'should restrict returned order(s) on index when using OrderSpecificAbility' do
385
- number = order.number
386
-
387
- 3.times { create(:completed_order_with_totals) }
388
- expect(Spree::Order.complete.count).to eq 4
389
-
390
- allow(user).to receive_messages has_spree_role?: false
391
- get :index
392
- expect(response).to render_template :index
393
- expect(assigns['orders'].size).to eq 1
394
- expect(assigns['orders'].first.number).to eq number
395
- end
396
- end
397
- end
398
-
399
- context "order number not given" do
400
- stub_authorization!
401
-
402
- it "raise active record not found" do
403
- expect {
404
- get :edit, params: { id: 0 }
405
- }.to raise_error ActiveRecord::RecordNotFound
406
- end
407
- end
408
- end