solidus_backend 2.9.6 → 2.11.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 (270) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend.js +5 -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/admin_nav.js +24 -0
  7. data/app/assets/javascripts/spree/backend/components/selectable_table.js +5 -0
  8. data/app/assets/javascripts/spree/backend/components/selectable_table/return_items.js +5 -0
  9. data/app/assets/javascripts/spree/backend/components/selectable_table/summary.js +7 -0
  10. data/app/assets/javascripts/spree/backend/components/sortable_table.js +31 -25
  11. data/app/assets/javascripts/spree/backend/components/tabs.js +1 -1
  12. data/app/assets/javascripts/spree/backend/models/order.js +11 -2
  13. data/app/assets/javascripts/spree/backend/models/payment.js +1 -1
  14. data/app/assets/javascripts/spree/backend/models/shipment.js +1 -1
  15. data/app/assets/javascripts/spree/backend/models/stock_item.js +1 -1
  16. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +2 -2
  17. data/app/assets/javascripts/spree/backend/option_value_picker.js +2 -2
  18. data/app/assets/javascripts/spree/backend/orders/cart.js +6 -0
  19. data/app/assets/javascripts/spree/backend/product_picker.js +2 -2
  20. data/app/assets/javascripts/spree/backend/routes.js +40 -21
  21. data/app/assets/javascripts/spree/backend/shipments.js +5 -67
  22. data/app/assets/javascripts/spree/backend/shipping_methods/stock_locations_picker.js +18 -0
  23. data/app/assets/javascripts/spree/backend/stock_management.js +4 -2
  24. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +2 -2
  25. data/app/assets/javascripts/spree/backend/taxons.js +3 -3
  26. data/app/assets/javascripts/spree/backend/templates/index.js +2 -1
  27. data/app/assets/javascripts/spree/backend/templates/orders/customer_details/autocomplete.hbs +2 -2
  28. data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +5 -1
  29. data/app/assets/javascripts/spree/backend/templates/tables/return_item_sum_amount.hbs +7 -0
  30. data/app/assets/javascripts/spree/backend/templates/tables/selectable_label.hbs +6 -0
  31. data/app/assets/javascripts/spree/backend/user_picker.js +3 -4
  32. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +2 -2
  33. data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +29 -0
  34. data/app/assets/javascripts/spree/backend/views/cart/line_item_table.js +5 -0
  35. data/app/assets/javascripts/spree/backend/views/index.js +5 -0
  36. data/app/assets/javascripts/spree/backend/views/order/address.js +8 -6
  37. data/app/assets/javascripts/spree/backend/views/order/customer_select.js +2 -3
  38. data/app/assets/javascripts/spree/backend/views/order/details_adjustments.js +4 -1
  39. data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +4 -0
  40. data/app/assets/javascripts/spree/backend/views/tables/return_items.js +9 -0
  41. data/app/assets/javascripts/spree/backend/views/tables/selectable_table.js +70 -0
  42. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/sum_return_item_amount.js +32 -0
  43. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/summary.js +45 -0
  44. data/app/assets/stylesheets/spree/backend/_bootstrap_custom.scss +2 -0
  45. data/app/assets/stylesheets/spree/backend/components/_breadcrumb.scss +3 -3
  46. data/app/assets/stylesheets/spree/backend/components/_messages.scss +4 -0
  47. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +181 -49
  48. data/app/assets/stylesheets/spree/backend/globals/{_mixins.css → _mixins.scss} +0 -0
  49. data/app/assets/stylesheets/spree/backend/globals/_variables.scss +2 -0
  50. data/app/assets/stylesheets/spree/backend/sections/_orders.scss +5 -1
  51. data/app/assets/stylesheets/spree/backend/sections/_style_guide.scss +4 -0
  52. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -0
  53. data/app/assets/stylesheets/spree/backend/shared/_header.scss +5 -1
  54. data/app/assets/stylesheets/spree/backend/shared/_layout.scss +0 -9
  55. data/app/controllers/spree/admin/adjustments_controller.rb +1 -1
  56. data/app/controllers/spree/admin/base_controller.rb +7 -1
  57. data/app/controllers/spree/admin/cancellations_controller.rb +2 -0
  58. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -4
  59. data/app/controllers/spree/admin/images_controller.rb +2 -1
  60. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -0
  61. data/app/controllers/spree/admin/orders_controller.rb +9 -4
  62. data/app/controllers/spree/admin/payment_methods_controller.rb +4 -4
  63. data/app/controllers/spree/admin/payments_controller.rb +5 -3
  64. data/app/controllers/spree/admin/product_properties_controller.rb +2 -2
  65. data/app/controllers/spree/admin/products_controller.rb +19 -25
  66. data/app/controllers/spree/admin/promotion_codes_controller.rb +9 -4
  67. data/app/controllers/spree/admin/refunds_controller.rb +19 -0
  68. data/app/controllers/spree/admin/resource_controller.rb +39 -10
  69. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  70. data/app/controllers/spree/admin/root_controller.rb +1 -1
  71. data/app/controllers/spree/admin/search_controller.rb +1 -2
  72. data/app/controllers/spree/admin/stock_items_controller.rb +6 -5
  73. data/app/controllers/spree/admin/stock_locations_controller.rb +4 -0
  74. data/app/controllers/spree/admin/stock_movements_controller.rb +7 -0
  75. data/app/controllers/spree/admin/style_guide_controller.rb +1 -1
  76. data/app/controllers/spree/admin/taxons/attachment_controller.rb +20 -0
  77. data/app/controllers/spree/admin/taxons_controller.rb +12 -1
  78. data/app/controllers/spree/admin/users/api_key_controller.rb +29 -0
  79. data/app/controllers/spree/admin/users_controller.rb +43 -22
  80. data/app/controllers/spree/admin/variants_controller.rb +4 -2
  81. data/app/controllers/spree/admin/zones_controller.rb +1 -1
  82. data/app/helpers/spree/admin/base_helper.rb +4 -0
  83. data/app/helpers/spree/admin/customer_returns_helper.rb +1 -1
  84. data/app/helpers/spree/admin/navigation_helper.rb +4 -3
  85. data/app/helpers/spree/admin/orders_helper.rb +8 -4
  86. data/app/helpers/spree/admin/stock_movements_helper.rb +8 -4
  87. data/app/helpers/spree/promotion_rules_helper.rb +1 -1
  88. data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +2 -3
  89. data/app/views/spree/admin/customer_returns/new.html.erb +1 -1
  90. data/app/views/spree/admin/images/index.html.erb +25 -21
  91. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +8 -1
  92. data/app/views/spree/admin/option_types/edit.html.erb +4 -2
  93. data/app/views/spree/admin/orders/_line_items_edit_form.html.erb +1 -0
  94. data/app/views/spree/admin/orders/customer_details/_form.html.erb +13 -13
  95. data/app/views/spree/admin/orders/edit.html.erb +3 -4
  96. data/app/views/spree/admin/orders/index.html.erb +23 -13
  97. data/app/views/spree/admin/payment_methods/_form.html.erb +7 -2
  98. data/app/views/spree/admin/payment_methods/new.html.erb +1 -1
  99. data/app/views/spree/admin/payments/index.html.erb +3 -1
  100. data/app/views/spree/admin/prices/_master_variant_table.html.erb +41 -41
  101. data/app/views/spree/admin/prices/_table.html.erb +3 -3
  102. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +7 -2
  103. data/app/views/spree/admin/product_properties/index.html.erb +14 -2
  104. data/app/views/spree/admin/products/_form.html.erb +13 -2
  105. data/app/views/spree/admin/products/index.html.erb +1 -1
  106. data/app/views/spree/admin/promotion_code_batches/new.html.erb +1 -1
  107. data/app/views/spree/admin/promotion_codes/index.html.erb +1 -1
  108. data/app/views/spree/admin/promotion_codes/new.html.erb +1 -1
  109. data/app/views/spree/admin/promotions/_actions.html.erb +2 -1
  110. data/app/views/spree/admin/promotions/_activations_new.html.erb +1 -1
  111. data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
  112. data/app/views/spree/admin/promotions/edit.html.erb +2 -2
  113. data/app/views/spree/admin/promotions/index.html.erb +13 -6
  114. data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -10
  115. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  116. data/app/views/spree/admin/return_authorizations/new.html.erb +1 -1
  117. data/app/views/spree/admin/search/users.json.jbuilder +15 -1
  118. data/app/views/spree/admin/shared/_address.html.erb +6 -6
  119. data/app/views/spree/admin/shared/_address_form.html.erb +15 -8
  120. data/app/views/spree/admin/shared/_calculator_fields.html.erb +5 -0
  121. data/app/views/spree/admin/shared/_navigation.html.erb +3 -0
  122. data/app/views/spree/admin/shared/_new_resource_links.html.erb +1 -1
  123. data/app/views/spree/admin/shared/_order_submenu.html.erb +6 -6
  124. data/app/views/spree/admin/shared/_payments_tabs.html.erb +1 -1
  125. data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +5 -5
  126. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +7 -7
  127. data/app/views/spree/admin/shared/_shipping_tabs.html.erb +3 -3
  128. data/app/views/spree/admin/shared/_taxes_tabs.html.erb +2 -2
  129. data/app/views/spree/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  130. data/app/views/spree/admin/shipping_methods/_form.html.erb +19 -1
  131. data/app/views/spree/admin/stock_items/_stock_management.html.erb +1 -1
  132. data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
  133. data/app/views/spree/admin/stock_locations/index.html.erb +4 -2
  134. data/app/views/spree/admin/stock_movements/index.html.erb +30 -1
  135. data/app/views/spree/admin/store_credit_reasons/index.html.erb +1 -1
  136. data/app/views/spree/admin/store_credits/index.html.erb +1 -1
  137. data/app/views/spree/admin/stores/_form.html.erb +6 -0
  138. data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
  139. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
  140. data/app/views/spree/admin/tax_rates/_form.html.erb +1 -1
  141. data/app/views/spree/admin/taxonomies/new.html.erb +1 -1
  142. data/app/views/spree/admin/taxons/_form.html.erb +1 -5
  143. data/app/views/spree/admin/taxons/attachment_forms/_paperclip.html.erb +16 -0
  144. data/app/views/spree/admin/users/_form.html.erb +14 -12
  145. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  146. data/app/views/spree/admin/users/edit.html.erb +5 -6
  147. data/app/views/spree/admin/users/items.html.erb +5 -3
  148. data/app/views/spree/admin/users/orders.html.erb +5 -3
  149. data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
  150. data/app/views/spree/admin/variants/index.html.erb +2 -2
  151. data/app/views/spree/layouts/admin.html.erb +1 -2
  152. data/config/initializers/form_builder.rb +2 -2
  153. data/config/routes.rb +4 -6
  154. data/lib/spree/backend.rb +1 -0
  155. data/lib/spree/backend/config.rb +9 -0
  156. data/lib/spree/backend/engine.rb +5 -5
  157. data/{app/models → lib}/spree/backend_configuration.rb +19 -3
  158. data/solidus_backend.gemspec +5 -4
  159. data/vendor/assets/stylesheets/solidus_admin/bootstrap/_variables.scss +1 -1
  160. metadata +44 -124
  161. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
  162. data/app/assets/javascripts/spree/backend/templates/variants/autocomplete_stock.hbs +0 -56
  163. data/app/views/spree/admin/orders/_add_product.html.erb +0 -12
  164. data/script/rails +0 -10
  165. data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
  166. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
  167. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
  168. data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
  169. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
  170. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
  171. data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
  172. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
  173. data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
  174. data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
  175. data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
  176. data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
  177. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
  178. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
  179. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
  180. data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
  181. data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
  182. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
  183. data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -190
  184. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
  185. data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
  186. data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
  187. data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
  188. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
  189. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
  190. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
  191. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
  192. data/spec/controllers/spree/admin/users_controller_spec.rb +0 -264
  193. data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
  194. data/spec/features/admin/configuration/payment_methods_spec.rb +0 -167
  195. data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -114
  196. data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
  197. data/spec/features/admin/configuration/store_spec.rb +0 -62
  198. data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
  199. data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
  200. data/spec/features/admin/configuration/taxonomies_spec.rb +0 -54
  201. data/spec/features/admin/configuration/zones_spec.rb +0 -41
  202. data/spec/features/admin/homepage_spec.rb +0 -86
  203. data/spec/features/admin/javascript_format_money_spec.rb +0 -22
  204. data/spec/features/admin/locale_spec.rb +0 -34
  205. data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
  206. data/spec/features/admin/orders/adjustments_spec.rb +0 -130
  207. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
  208. data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
  209. data/spec/features/admin/orders/customer_details_spec.rb +0 -204
  210. data/spec/features/admin/orders/customer_returns_spec.rb +0 -28
  211. data/spec/features/admin/orders/line_items_spec.rb +0 -52
  212. data/spec/features/admin/orders/listing_spec.rb +0 -186
  213. data/spec/features/admin/orders/log_entries_spec.rb +0 -56
  214. data/spec/features/admin/orders/new_order_spec.rb +0 -331
  215. data/spec/features/admin/orders/new_refund_spec.rb +0 -35
  216. data/spec/features/admin/orders/order_details_spec.rb +0 -581
  217. data/spec/features/admin/orders/payments_spec.rb +0 -330
  218. data/spec/features/admin/orders/return_authorizations_spec.rb +0 -27
  219. data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
  220. data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
  221. data/spec/features/admin/orders/shipments_spec.rb +0 -145
  222. data/spec/features/admin/payments/store_credits_spec.rb +0 -23
  223. data/spec/features/admin/products/edit/images_spec.rb +0 -76
  224. data/spec/features/admin/products/edit/products_spec.rb +0 -92
  225. data/spec/features/admin/products/edit/taxons_spec.rb +0 -51
  226. data/spec/features/admin/products/edit/variants_spec.rb +0 -63
  227. data/spec/features/admin/products/option_types_spec.rb +0 -116
  228. data/spec/features/admin/products/pricing_spec.rb +0 -127
  229. data/spec/features/admin/products/products_spec.rb +0 -336
  230. data/spec/features/admin/products/properties_spec.rb +0 -141
  231. data/spec/features/admin/products/stock_management_spec.rb +0 -101
  232. data/spec/features/admin/products/variant_spec.rb +0 -89
  233. data/spec/features/admin/promotion_adjustments_spec.rb +0 -277
  234. data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
  235. data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
  236. data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
  237. data/spec/features/admin/promotions/promotion_spec.rb +0 -52
  238. data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
  239. data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
  240. data/spec/features/admin/reimbursements_spec.rb +0 -18
  241. data/spec/features/admin/store_credits_spec.rb +0 -132
  242. data/spec/features/admin/stores_spec.rb +0 -37
  243. data/spec/features/admin/style_guide_spec.rb +0 -14
  244. data/spec/features/admin/taxons_spec.rb +0 -78
  245. data/spec/features/admin/users_spec.rb +0 -402
  246. data/spec/helpers/admin/base_helper_spec.rb +0 -49
  247. data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
  248. data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
  249. data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
  250. data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
  251. data/spec/javascripts/fixtures/_boot.html.erb +0 -8
  252. data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
  253. data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
  254. data/spec/javascripts/format_money_spec.js +0 -48
  255. data/spec/javascripts/spec_helper.js +0 -13
  256. data/spec/javascripts/support/show_errors.js +0 -8
  257. data/spec/javascripts/support/with_translations.js +0 -11
  258. data/spec/javascripts/translation_spec.js +0 -58
  259. data/spec/javascripts/views/number_with_currency_spec.js +0 -72
  260. data/spec/models/spree/backend_configuration/menu_item_spec.rb +0 -17
  261. data/spec/models/spree/backend_configuration_spec.rb +0 -22
  262. data/spec/spec_helper.rb +0 -122
  263. data/spec/support/appear_before_matcher.rb +0 -10
  264. data/spec/support/feature/base_feature_helper.rb +0 -12
  265. data/spec/support/feature/order_feature_helper.rb +0 -27
  266. data/spec/support/ror_ringer.jpeg +0 -0
  267. data/spec/teaspoon_env.rb +0 -51
  268. data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
  269. data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
  270. data/spec/views/spree/admin/shared/navigation_footer_spec.rb +0 -67
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- feature 'Promotion with option value rule' do
6
- stub_authorization!
7
-
8
- given(:variant) { create :variant }
9
- given!(:product) { variant.product }
10
- given!(:option_value) { variant.option_values.first }
11
-
12
- given(:promotion) { create :promotion }
13
-
14
- background do
15
- visit spree.edit_admin_promotion_path(promotion)
16
- end
17
-
18
- scenario "adding an option value rule", js: true do
19
- select "Option Value(s)", from: "Discount Rules"
20
- within("#rules_container") { click_button "Add" }
21
-
22
- within("#rules_container .promotion-block") do
23
- expect(page).to have_content("Product")
24
- expect(page).to have_content("Option Values")
25
-
26
- click_button "Add"
27
- end
28
-
29
- within('.promo-rule-option-value') do
30
- targetted_select2_search product.name, from: '.js-promo-rule-option-value-product-select'
31
- targetted_select2_search option_value.name, from: '.js-promo-rule-option-value-option-values-select'
32
- end
33
-
34
- within('#rules_container') { click_button "Update" }
35
-
36
- expect(page).to have_content("has been successfully updated")
37
-
38
- first_rule = promotion.rules.reload.first
39
- expect(first_rule.class).to eq Spree::Promotion::Rules::OptionValue
40
- expect(first_rule.preferred_eligible_values).to eq Hash[product.id => [option_value.id]]
41
- end
42
-
43
- context "with an attempted XSS" do
44
- let(:xss_string) { %(<script>throw("XSS")</script>) }
45
- before do
46
- option_value.update!(name: xss_string)
47
- end
48
- scenario "adding an option value rule", js: true do
49
- select "Option Value(s)", from: "Discount Rules"
50
- within("#rules_container") { click_button "Add" }
51
-
52
- within("#rules_container .promotion-block") do
53
- click_button "Add"
54
- end
55
-
56
- within('.promo-rule-option-value') do
57
- targetted_select2_search product.name, from: '.js-promo-rule-option-value-product-select'
58
- targetted_select2_search option_value.name, from: '.js-promo-rule-option-value-option-values-select'
59
- end
60
- end
61
- end
62
-
63
- context "with an existing option value rule" do
64
- given(:variant1) { create :variant }
65
- given(:variant2) { create :variant }
66
- background do
67
- rule = Spree::Promotion::Rules::OptionValue.new
68
- rule.promotion = promotion
69
- rule.preferred_eligible_values = Hash[
70
- variant1.product_id => variant1.option_values.pluck(:id),
71
- variant2.product_id => variant2.option_values.pluck(:id)
72
- ]
73
- rule.save!
74
-
75
- visit spree.edit_admin_promotion_path(promotion)
76
- end
77
-
78
- scenario "deleting a product", js: true do
79
- expect(page).to have_css('.promo-rule-option-value', count: 2)
80
- all('.promo-rule-option-value')[1].find('.remove').click
81
-
82
- within('#rules_container') { click_button "Update" }
83
-
84
- expect(page).to have_content("has been successfully updated")
85
-
86
- first_rule = promotion.rules.reload.first
87
- expect(first_rule.preferred_eligible_values).to eq Hash[variant1.product_id => variant1.option_values.pluck(:id)]
88
- end
89
- end
90
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- feature 'Promotion with product rule', js: true do
6
- stub_authorization!
7
-
8
- given!(:product) { create :product, name: "BlamCo Mac & Cheese", sku: "PRODUCT_SKU" }
9
- given!(:variant) { create :variant, sku: "VARIANT_SKU", product: product }
10
- given!(:option_value) { variant.option_values.first }
11
-
12
- given(:promotion) { create :promotion }
13
-
14
- def add_promotion_rule_of_type(type)
15
- select type, from: "Discount Rules"
16
- within("#rules_container") { click_button "Add" }
17
- end
18
-
19
- background do
20
- visit spree.edit_admin_promotion_path(promotion)
21
- add_promotion_rule_of_type("Product(s)")
22
- end
23
-
24
- it "can select by product sku" do
25
- select2_search product.name, from: "Choose products", search: "PRODUCT_SKU"
26
- end
27
-
28
- it "can select by variant sku" do
29
- select2_search product.name, from: "Choose products", search: "VARIANT_SKU"
30
- end
31
-
32
- it "can select by product name" do
33
- select2_search product.name, from: "Choose products"
34
- end
35
- end
@@ -1,83 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Promotion Categories', type: :feature do
4
- stub_authorization!
5
-
6
- context "index" do
7
- before do
8
- create(:promotion_category, name: 'name1', code: 'code1')
9
- create(:promotion_category, name: 'name2', code: 'code2')
10
- visit spree.admin_promotion_categories_path
11
- end
12
-
13
- context "listing promotion categories" do
14
- it "should list the existing promotion categories" do
15
- within_row(1) do
16
- expect(column_text(1)).to eq("name1")
17
- expect(column_text(2)).to eq("code1")
18
- end
19
-
20
- within_row(2) do
21
- expect(column_text(1)).to eq("name2")
22
- expect(column_text(2)).to eq("code2")
23
- end
24
- end
25
- end
26
- end
27
-
28
- context "create" do
29
- before do
30
- visit spree.admin_promotion_categories_path
31
- click_on "New Promotion Category"
32
- end
33
-
34
- it "should allow an admin to create a new promotion category" do
35
- fill_in "promotion_category_name", with: "promotion test"
36
- fill_in "promotion_category_code", with: "prtest"
37
- click_button "Create"
38
- expect(page).to have_content("successfully created!")
39
- end
40
-
41
- it "should not allow admin to create promotion category when invalid data" do
42
- fill_in "promotion_category_name", with: ""
43
- fill_in "promotion_category_code", with: "prtest"
44
- click_button "Create"
45
- expect(page).to have_content("Name can't be blank")
46
- end
47
- end
48
-
49
- context "edit" do
50
- before(:each) do
51
- create(:promotion_category, name: 'name1')
52
- visit spree.admin_promotion_categories_path
53
- within_row(1) { click_icon :edit }
54
- end
55
-
56
- it "should allow an admin to edit an existing promotion category" do
57
- fill_in "promotion_category_name", with: "name 99"
58
- click_button "Update"
59
- expect(page).to have_content("successfully updated!")
60
- expect(page).to have_content("name 99")
61
- end
62
-
63
- it "should show validation errors" do
64
- fill_in "promotion_category_name", with: ""
65
- click_button "Update"
66
- expect(page).to have_content("Name can't be blank")
67
- end
68
- end
69
-
70
- context "delete" do
71
- before(:each) do
72
- create(:promotion_category, name: 'name1')
73
- visit spree.admin_promotion_categories_path
74
- end
75
-
76
- it "should allow an admin to delete an existing promotion category", js: true do
77
- accept_alert do
78
- click_icon :trash
79
- end
80
- expect(page).to have_content("successfully removed!")
81
- end
82
- end
83
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- feature 'Promotions' do
6
- stub_authorization!
7
-
8
- context 'index' do
9
- context 'when no promotions' do
10
- scenario 'shows no promotions found message' do
11
- visit spree.admin_promotions_path
12
- expect(page).to have_content('No Promotions found.')
13
- end
14
- end
15
-
16
- context 'when promotion is active' do
17
- given!(:promotion) { create :promotion }
18
-
19
- scenario 'promotion status is active' do
20
- visit spree.admin_promotions_path
21
-
22
- within_row(1) do
23
- expect(column_text(3)).to eq("Active")
24
- end
25
- end
26
- end
27
-
28
- context 'when promotion is in the future' do
29
- given!(:promotion) { create :promotion, starts_at: 1.day.after }
30
-
31
- scenario 'promotion status is not started' do
32
- visit spree.admin_promotions_path
33
-
34
- within_row(1) do
35
- expect(column_text(3)).to eq("Not started")
36
- end
37
- end
38
- end
39
-
40
- context 'when promotion is in the past' do
41
- given!(:promotion) { create :promotion, expires_at: 1.day.ago }
42
-
43
- scenario 'promotion status is expired' do
44
- visit spree.admin_promotions_path
45
-
46
- within_row(1) do
47
- expect(column_text(3)).to eq("Expired")
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- feature "Tiered Calculator Promotions" do
6
- stub_authorization!
7
-
8
- let(:promotion) { create :promotion }
9
-
10
- background do
11
- visit spree.edit_admin_promotion_path(promotion)
12
- end
13
-
14
- scenario "adding a tiered percent calculator", js: true do
15
- select "Create whole-order adjustment", from: "Adjustment type"
16
- within('#action_fields') { click_button "Add" }
17
-
18
- select "Tiered Percent", from: I18n.t('spree.admin.promotions.actions.calculator_label')
19
- within('#actions_container') { click_button "Update" }
20
-
21
- within("#actions_container .settings") do
22
- expect(page).to have_content("Base Percent")
23
- expect(page).to have_content("Tiers")
24
-
25
- page.find('a.button').click
26
- end
27
-
28
- fill_in "Base Percent", with: 5
29
-
30
- within(".tier") do
31
- find("input:last-child").set(100)
32
- find("input:first-child").set(10)
33
- end
34
-
35
- within('#actions_container') { click_button "Update" }
36
-
37
- first_action = promotion.actions.first
38
- expect(first_action.class).to eq Spree::Promotion::Actions::CreateAdjustment
39
-
40
- first_action_calculator = first_action.calculator
41
- expect(first_action_calculator.class).to eq Spree::Calculator::TieredPercent
42
- expect(first_action_calculator.preferred_base_percent).to eq 5
43
- expect(first_action_calculator.preferred_tiers).to eq(BigDecimal(100) => BigDecimal(10))
44
- end
45
-
46
- context "with an existing tiered flat rate calculator" do
47
- let(:promotion) { create :promotion, :with_order_adjustment }
48
-
49
- background do
50
- action = promotion.actions.first
51
-
52
- action.calculator = Spree::Calculator::TieredFlatRate.new
53
- action.calculator.preferred_base_amount = 5
54
- action.calculator.preferred_tiers = { 100 => 10, 200 => 15, 300 => 20 }
55
- action.calculator.save!
56
-
57
- visit spree.edit_admin_promotion_path(promotion)
58
- end
59
-
60
- scenario "deleting a tier", js: true do
61
- within(".tier:nth-child(2)") do
62
- find(".remove").click
63
- end
64
-
65
- within('#actions_container') { click_button "Update" }
66
-
67
- expect(page).to have_text('has been successfully updated!')
68
-
69
- calculator = promotion.actions.first.calculator
70
- expect(calculator.preferred_tiers).to eq({
71
- BigDecimal(100) => 10,
72
- BigDecimal(300) => 20
73
- })
74
- end
75
- end
76
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- feature 'Promotion with user rule', js: true do
6
- stub_authorization!
7
-
8
- given(:promotion) { create :promotion }
9
-
10
- background do
11
- visit spree.edit_admin_promotion_path(promotion)
12
- end
13
-
14
- context "multiple users" do
15
- let!(:user) { create(:user, email: 'foo@example.com') }
16
- let!(:other_user) { create(:user, email: 'bar@example.com') }
17
-
18
- scenario "searching a user" do
19
- select "User", from: "Discount Rules"
20
- within("#rules_container") { click_button "Add" }
21
-
22
- select2_search "foo", from: "Choose users", select: false
23
-
24
- expect(page).to have_content('foo@example.com')
25
- expect(page).not_to have_content('bar@example.com')
26
- end
27
- end
28
-
29
- context "with an attempted XSS" do
30
- let(:xss_string) { %(<script>throw("XSS")</script>) }
31
- given!(:user) { create(:user, email: xss_string) }
32
-
33
- scenario "adding an option value rule" do
34
- select "User", from: "Discount Rules"
35
- within("#rules_container") { click_button "Add" }
36
-
37
- select2_search "<script>", from: "Choose users"
38
-
39
- expect(page).to have_content(xss_string)
40
- end
41
- end
42
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'Promotions', type: :feature do
6
- stub_authorization!
7
- let!(:reimbursement) { create(:reimbursement) }
8
-
9
- it "should display the reimbursements table" do
10
- visit spree.admin_order_reimbursement_path(reimbursement.order, reimbursement)
11
- expect(page).to have_css('table thead tr th', text: 'Product')
12
- expect(page).to have_css('table thead tr th', text: 'Preferred Reimbursement Type')
13
- expect(page).to have_css('table thead tr th', text: 'Reimbursement Type Override')
14
- expect(page).to have_css('table thead tr th', text: 'Exchange For')
15
- expect(page).to have_css('table thead tr th', text: 'Amount Before Sales Tax')
16
- expect(page).to have_css('table thead tr th', text: 'Total')
17
- end
18
- end
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Store credits admin" do
6
- stub_authorization!
7
- let!(:admin_user) { create(:admin_user) }
8
- let!(:store_credit) { create(:store_credit) }
9
- let(:user) { store_credit.user }
10
-
11
- before do
12
- allow(Spree.user_class).to receive(:find_by).
13
- with(hash_including(:id)).
14
- and_return(store_credit.user)
15
- end
16
-
17
- describe "visiting the store credits page" do
18
- before do
19
- visit spree.admin_path
20
- click_link "Users"
21
- end
22
-
23
- it "should be on the store credits page" do
24
- click_link store_credit.user.email
25
- click_link "Store Credit"
26
- expect(page.current_path).to eq spree.admin_user_store_credits_path(store_credit.user)
27
-
28
- store_credit_table = page.find(".sc-table")
29
- expect(store_credit_table).to have_css('tr', count: 1)
30
- expect(store_credit_table).to have_content(Spree::Money.new(store_credit.amount).to_s)
31
- expect(store_credit_table).to have_content(Spree::Money.new(store_credit.amount_used).to_s)
32
- expect(store_credit_table).to have_content(store_credit.category_name)
33
- expect(store_credit_table).to have_content(store_credit.created_by_email)
34
- end
35
- end
36
-
37
- describe "creating store credit" do
38
- before do
39
- visit spree.admin_path
40
- click_link "Users"
41
- click_link store_credit.user.email
42
- click_link "Store Credit"
43
- allow_any_instance_of(Spree::Admin::StoreCreditsController).to receive_messages(try_spree_current_user: admin_user)
44
- end
45
-
46
- it "should create store credit and associate it with the user" do
47
- click_link "Add store credit"
48
- page.fill_in "store_credit_amount", with: "102.00"
49
- select "Exchange", from: "store_credit_category_id"
50
- click_button "Create"
51
-
52
- expect(page.current_path).to eq spree.admin_user_store_credits_path(store_credit.user)
53
- store_credit_table = page.find(".sc-table")
54
- expect(store_credit_table).to have_css('tr', count: 2)
55
- expect(Spree::StoreCredit.count).to eq 2
56
- end
57
- end
58
-
59
- describe "displaying a store credit details page" do
60
- before do
61
- visit spree.admin_path
62
- click_link "Users"
63
- click_link store_credit.user.email
64
- click_link "Store Credit"
65
- page.find(".sc-table td.actions a.fa-edit").click
66
- end
67
-
68
- it "shows the store credit's information" do
69
- within ".content" do
70
- expect(page).to have_content "Credited #{store_credit.display_amount}"
71
- expect(page).to have_content "Created By #{store_credit.created_by.email}"
72
- expect(page).to have_content "Type #{store_credit.category_name}"
73
- expect(page).to have_content 'Store credit history'
74
- end
75
- end
76
-
77
- it "lets edit store credit's memo", js: true do
78
- allow_any_instance_of(Spree::Admin::StoreCreditsController)
79
- .to receive(:try_spree_current_user)
80
- .and_return(admin_user)
81
-
82
- # When there are no errors
83
- within '.store-credit-memo-row' do
84
- click_button 'Edit'
85
- fill_in 'store_credit_memo', with: 'Lottery Won'
86
- click_button 'Save'
87
- expect(page).to have_content "Memo Lottery Won", normalize_ws: true
88
- end
89
- expect(page).to have_content "Store Credit has been successfully updated!"
90
-
91
- # When there are errors
92
- allow_any_instance_of(Spree::StoreCredit).to receive(:save) { false }
93
- allow_any_instance_of(Spree::StoreCredit)
94
- .to receive_message_chain(:errors, :full_messages)
95
- .and_return(["Memo is not valid"])
96
-
97
- within '.store-credit-memo-row' do
98
- find(:css, ".edit-memo").click
99
- fill_in 'store_credit_memo', with: 'Lottery Won Twice'
100
- find(:css, ".save-memo").click
101
- expect(page).to have_content "Memo Lottery Won", normalize_ws: true
102
- expect(page).not_to have_content "Lottery Won Twice"
103
- end
104
- expect(page).to have_content "Unable to update store credit [\"Memo is not valid\"]"
105
- end
106
- end
107
-
108
- describe "updating store credit" do
109
- let(:updated_amount) { "99.0" }
110
- let!(:store_credit_reason) { create(:store_credit_reason) }
111
-
112
- before do
113
- visit spree.admin_path
114
- click_link "Users"
115
- click_link store_credit.user.email
116
- click_link "Store Credit"
117
- allow_any_instance_of(Spree::Admin::StoreCreditsController).to receive_messages(try_spree_current_user: admin_user)
118
- end
119
-
120
- it "updates the store credit's amount" do
121
- page.find(".sc-table td.actions a.fa-edit").click
122
- expect(page).to have_content 'Store credit history'
123
- click_link "Change amount"
124
- expect(page).to have_content 'Editing store credit amount'
125
- page.fill_in 'store_credit_amount', with: updated_amount
126
- page.select store_credit_reason.name, from: 'store_credit_reason_id'
127
- click_button "Update"
128
- expect(page.find('#sc-detail-table')).to have_content "$99.00"
129
- expect(store_credit.reload.amount.to_f).to eq updated_amount.to_f
130
- end
131
- end
132
- end