solidus_backend 2.10.1 → 2.11.2

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 (233) 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 +1 -1
  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/stores/_form.html.erb +6 -0
  110. data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
  111. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
  112. data/app/views/spree/admin/users/_form.html.erb +2 -2
  113. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  114. data/app/views/spree/admin/users/edit.html.erb +4 -4
  115. data/app/views/spree/admin/users/items.html.erb +5 -3
  116. data/app/views/spree/admin/users/orders.html.erb +5 -3
  117. data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
  118. data/app/views/spree/admin/variants/index.html.erb +2 -2
  119. data/config/initializers/form_builder.rb +2 -2
  120. data/lib/spree/backend/engine.rb +0 -2
  121. data/lib/spree/backend_configuration.rb +14 -1
  122. data/solidus_backend.gemspec +4 -4
  123. metadata +24 -123
  124. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
  125. data/script/rails +0 -10
  126. data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
  127. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
  128. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
  129. data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
  130. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
  131. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
  132. data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
  133. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
  134. data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
  135. data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
  136. data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
  137. data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
  138. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
  139. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
  140. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
  141. data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
  142. data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
  143. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
  144. data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -201
  145. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
  146. data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
  147. data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
  148. data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
  149. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
  150. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
  151. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
  152. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
  153. data/spec/controllers/spree/admin/users_controller_spec.rb +0 -287
  154. data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
  155. data/spec/features/admin/configuration/payment_methods_spec.rb +0 -176
  156. data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -126
  157. data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
  158. data/spec/features/admin/configuration/store_spec.rb +0 -62
  159. data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
  160. data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
  161. data/spec/features/admin/configuration/taxonomies_spec.rb +0 -61
  162. data/spec/features/admin/configuration/zones_spec.rb +0 -41
  163. data/spec/features/admin/homepage_spec.rb +0 -86
  164. data/spec/features/admin/javascript_format_money_spec.rb +0 -22
  165. data/spec/features/admin/locale_spec.rb +0 -34
  166. data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
  167. data/spec/features/admin/orders/adjustments_spec.rb +0 -130
  168. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
  169. data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
  170. data/spec/features/admin/orders/customer_details_spec.rb +0 -203
  171. data/spec/features/admin/orders/customer_returns_spec.rb +0 -41
  172. data/spec/features/admin/orders/line_items_spec.rb +0 -52
  173. data/spec/features/admin/orders/listing_spec.rb +0 -186
  174. data/spec/features/admin/orders/log_entries_spec.rb +0 -56
  175. data/spec/features/admin/orders/new_order_spec.rb +0 -379
  176. data/spec/features/admin/orders/new_refund_spec.rb +0 -35
  177. data/spec/features/admin/orders/order_details_spec.rb +0 -591
  178. data/spec/features/admin/orders/payments_spec.rb +0 -330
  179. data/spec/features/admin/orders/return_authorizations_spec.rb +0 -56
  180. data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
  181. data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
  182. data/spec/features/admin/orders/shipments_spec.rb +0 -145
  183. data/spec/features/admin/payments/store_credits_spec.rb +0 -23
  184. data/spec/features/admin/products/edit/images_spec.rb +0 -76
  185. data/spec/features/admin/products/edit/products_spec.rb +0 -92
  186. data/spec/features/admin/products/edit/taxons_spec.rb +0 -57
  187. data/spec/features/admin/products/edit/variants_spec.rb +0 -63
  188. data/spec/features/admin/products/option_types_spec.rb +0 -116
  189. data/spec/features/admin/products/pricing_spec.rb +0 -127
  190. data/spec/features/admin/products/products_spec.rb +0 -348
  191. data/spec/features/admin/products/properties_spec.rb +0 -141
  192. data/spec/features/admin/products/stock_management_spec.rb +0 -101
  193. data/spec/features/admin/products/variant_spec.rb +0 -89
  194. data/spec/features/admin/promotion_adjustments_spec.rb +0 -286
  195. data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
  196. data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
  197. data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
  198. data/spec/features/admin/promotions/promotion_code_batches_spec.rb +0 -37
  199. data/spec/features/admin/promotions/promotion_code_spec.rb +0 -31
  200. data/spec/features/admin/promotions/promotion_spec.rb +0 -52
  201. data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
  202. data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
  203. data/spec/features/admin/reimbursements_spec.rb +0 -18
  204. data/spec/features/admin/store_credits_spec.rb +0 -132
  205. data/spec/features/admin/stores_spec.rb +0 -37
  206. data/spec/features/admin/style_guide_spec.rb +0 -14
  207. data/spec/features/admin/taxons_spec.rb +0 -90
  208. data/spec/features/admin/users_spec.rb +0 -412
  209. data/spec/fixtures/files/ror_ringer.jpeg +0 -0
  210. data/spec/helpers/admin/base_helper_spec.rb +0 -49
  211. data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
  212. data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
  213. data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
  214. data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
  215. data/spec/javascripts/fixtures/_boot.html.erb +0 -8
  216. data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
  217. data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
  218. data/spec/javascripts/format_money_spec.js +0 -48
  219. data/spec/javascripts/spec_helper.js +0 -13
  220. data/spec/javascripts/support/show_errors.js +0 -8
  221. data/spec/javascripts/support/with_translations.js +0 -11
  222. data/spec/javascripts/translation_spec.js +0 -58
  223. data/spec/javascripts/views/number_with_currency_spec.js +0 -72
  224. data/spec/lib/spree/backend_configuration/menu_item_spec.rb +0 -17
  225. data/spec/lib/spree/backend_configuration_spec.rb +0 -22
  226. data/spec/spec_helper.rb +0 -123
  227. data/spec/support/appear_before_matcher.rb +0 -10
  228. data/spec/support/feature/base_feature_helper.rb +0 -17
  229. data/spec/support/feature/order_feature_helper.rb +0 -27
  230. data/spec/teaspoon_env.rb +0 -51
  231. data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
  232. data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
  233. 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