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,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'Stores', type: :feature do
6
- stub_authorization!
7
-
8
- context 'when adding a store' do
9
- before { visit spree.new_admin_store_path }
10
-
11
- it 'admin should be able to set the default_currency' do
12
- expect(find('#store_default_currency').value).to eq ''
13
-
14
- fill_in 'store_name', with: 'Solidus Store'
15
- fill_in 'store_code', with: 'solidus'
16
- fill_in 'store_url', with: 'example.solidus.io'
17
- fill_in 'store_mail_from_address', with: 'from@solidus.io'
18
- select 'EUR', from: 'store_default_currency'
19
- click_button 'Create'
20
-
21
- @store = Spree::Store.last
22
-
23
- expect(@store.default_currency).to eq 'EUR'
24
- end
25
- end
26
-
27
- context 'when editing a store' do
28
- let(:store) { create :store, default_currency: 'AUD' }
29
- before { visit spree.edit_admin_store_path(store) }
30
-
31
- it 'admin should be able to change the default_currency' do
32
- select 'EUR', from: 'store_default_currency'
33
- click_button 'Update'
34
- expect(store.reload.default_currency).to eq 'EUR'
35
- end
36
- end
37
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Style guide", type: :feature do
6
- stub_authorization!
7
-
8
- it "should render successfully" do
9
- visit "/admin/style_guide"
10
-
11
- # Somewhere in a style guide you'd expect to talk about colors
12
- expect(page).to have_text "Colors"
13
- end
14
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Taxonomies and taxons", type: :feature do
6
- stub_authorization!
7
-
8
- it "admin should be able to edit taxon" do
9
- visit spree.new_admin_taxonomy_path
10
-
11
- fill_in "Name", with: "Hello"
12
- click_button "Create"
13
-
14
- @taxonomy = Spree::Taxonomy.last
15
-
16
- visit spree.edit_admin_taxonomy_taxon_path(@taxonomy, @taxonomy.root.id)
17
-
18
- fill_in "taxon_name", with: "Shirt"
19
- fill_in "taxon_description", with: "Discover our new rails shirts"
20
-
21
- fill_in "permalink_part", with: "shirt-rails"
22
- click_button "Update"
23
- expect(page).to have_content("Taxon \"Shirt\" has been successfully updated!")
24
- end
25
-
26
- it "can view and add to taxon tree", js: true do
27
- taxonomy = create :taxonomy
28
-
29
- visit spree.edit_admin_taxonomy_path(taxonomy)
30
- expect(page).to have_content('Brand')
31
-
32
- click_on('Add taxon')
33
- expect(page).to have_content('New node')
34
-
35
- # Little tricky to select the right taxon. Since the text is technically
36
- # inside the top-level li.
37
- within '#taxonomy_tree li li', text: 'New node' do
38
- click_icon :edit
39
- end
40
-
41
- expect(page).to have_current_path %r{/admin/taxonomies/\d+/taxons/\d+/edit}
42
- end
43
-
44
- context "inside sidebar menu" do
45
- def only_one_selected_tab_inside?(sub_tab_selector, tab_name, tab_path)
46
- within(sub_tab_selector) do
47
- expect(page).to have_selector('.selected', count: 1)
48
-
49
- within('.selected') { expect(page).to have_link(tab_name, href: tab_path) }
50
- end
51
- end
52
-
53
- context "on display taxonomies page", js: true do
54
- it "should be selected only one tab 'Taxonomies' in product sub tabs" do
55
- visit spree.admin_taxonomies_path
56
- only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path)
57
- end
58
- end
59
-
60
- context "on edit taxonomy page", js: true do
61
- it "should be selected only one tab 'Taxonomies' in product sub tabs" do
62
- taxonomy = create :taxonomy
63
-
64
- visit spree.edit_admin_taxonomy_path(taxonomy)
65
- only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path)
66
- end
67
- end
68
-
69
- context "on edit taxonomy's taxon page", js: true do
70
- it "should be selected only one tab 'Taxonomies' in product sub tabs" do
71
- taxonomy = create :taxonomy
72
-
73
- visit spree.edit_admin_taxonomy_taxon_path(taxonomy, taxonomy.root.id)
74
- only_one_selected_tab_inside?('[data-hook=admin_product_sub_tabs]', 'Taxonomies', spree.admin_taxonomies_path)
75
- end
76
- end
77
- end
78
- end
@@ -1,402 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'Users', type: :feature do
6
- stub_authorization!
7
- let!(:country) { create(:country) }
8
- let!(:user_a) { create(:user_with_addresses, email: 'a@example.com') }
9
- let!(:user_b) { create(:user_with_addresses, email: 'b@example.com') }
10
- let!(:admin_role) { create(:role, name: 'admin') }
11
- let!(:user_role) { create(:role, name: 'user') }
12
-
13
- let(:order) { create(:completed_order_with_totals, user: user_a, number: "R123") }
14
-
15
- let(:order_2) do
16
- create(:completed_order_with_totals, user: user_a, number: "R456").tap do |o|
17
- li = o.line_items.last
18
- li.update_column(:price, li.price + 10)
19
- o.recalculate
20
- end
21
- end
22
-
23
- let(:orders) { [order, order_2] }
24
-
25
- shared_examples_for 'a user page' do
26
- it 'has lifetime stats' do
27
- orders
28
- visit current_url # need to refresh after creating the orders for specs that did not require orders
29
- within("#user-lifetime-stats") do
30
- [:total_sales, :num_orders, :average_order_value, :member_since].each do |stat_name|
31
- expect(page).to have_content I18n.t(stat_name, scope: 'spree')
32
- end
33
- expect(page).to have_content(order.total + order_2.total)
34
- expect(page).to have_content orders.count
35
- expect(page).to have_content(orders.sum(&:total) / orders.count)
36
- expect(page).to have_content I18n.l(user_a.created_at.to_date)
37
- end
38
- end
39
-
40
- it 'can go back to the users list' do
41
- expect(page).to have_link Spree::LegacyUser.model_name.human(count: Spree::I18N_GENERIC_PLURAL), href: spree.admin_users_path
42
- end
43
-
44
- it 'can navigate to the account page' do
45
- expect(page).to have_link I18n.t("spree.admin.user.account"), href: spree.edit_admin_user_path(user_a)
46
- end
47
-
48
- it 'can navigate to the order history' do
49
- expect(page).to have_link I18n.t("spree.admin.user.order_history"), href: spree.orders_admin_user_path(user_a)
50
- end
51
-
52
- it 'can navigate to the items purchased' do
53
- expect(page).to have_link I18n.t("spree.admin.user.items"), href: spree.items_admin_user_path(user_a)
54
- end
55
- end
56
-
57
- shared_examples_for 'a sortable attribute' do
58
- before { click_link sort_link }
59
-
60
- it "can sort asc" do
61
- within_table(table_id) do
62
- expect(page).to have_selector '.sort_link.asc'
63
- expect(page).to have_text text_match_1
64
- expect(page).to have_text text_match_2
65
- expect(text_match_1).to appear_before text_match_2
66
- end
67
- end
68
-
69
- it "can sort desc" do
70
- within_table(table_id) do
71
- # Ransack adds a ▲ to the sort link. With exact match Capybara is not able to find that link
72
- click_link sort_link, exact: false
73
- end
74
-
75
- within_table(table_id) do
76
- expect(page).to have_selector '.sort_link.desc'
77
- expect(page).to have_text text_match_1
78
- expect(page).to have_text text_match_2
79
- expect(text_match_2).to appear_before text_match_1
80
- end
81
- end
82
- end
83
-
84
- before do
85
- visit spree.admin_path
86
- click_link 'Users'
87
- end
88
-
89
- context 'users index' do
90
- context "email" do
91
- it_behaves_like "a sortable attribute" do
92
- let(:text_match_1) { user_a.email }
93
- let(:text_match_2) { user_b.email }
94
- let(:table_id) { "listing_users" }
95
- let(:sort_link) { "users_email_title" }
96
- end
97
- end
98
-
99
- it 'displays the correct results for a user search by email' do
100
- fill_in 'q_email_cont', with: user_a.email
101
- click_button 'Search'
102
- within_table('listing_users') do
103
- expect(page).to have_text user_a.email
104
- expect(page).not_to have_text user_b.email
105
- end
106
- end
107
-
108
- context "member since" do
109
- before do
110
- user_a.update_column(:created_at, 2.weeks.ago)
111
- end
112
-
113
- it_behaves_like "a sortable attribute" do
114
- let(:text_match_1) { user_a.email }
115
- let(:text_match_2) { user_b.email }
116
- let(:table_id) { "listing_users" }
117
- let(:sort_link) { I18n.t('spree.member_since') }
118
- end
119
-
120
- it 'displays the correct results for a user search by creation date' do
121
- fill_in 'q_created_at_lt', with: 1.week.ago
122
- click_button 'Search'
123
- within_table('listing_users') do
124
- expect(page).to have_text user_a.email
125
- expect(page).not_to have_text user_b.email
126
- end
127
- end
128
- end
129
-
130
- context 'with users having roles' do
131
- before do
132
- user_a.spree_roles << admin_role
133
- user_b.spree_roles << user_role
134
- end
135
-
136
- it 'displays the correct results for a user search by role' do
137
- select 'admin', from: Spree.user_class.human_attribute_name(:spree_roles)
138
- click_button 'Search'
139
- within_table('listing_users') do
140
- expect(page).to have_text user_a.email
141
- expect(page).not_to have_text user_b.email
142
- end
143
- end
144
- end
145
- end
146
-
147
- context 'editing users' do
148
- before { click_link user_a.email }
149
-
150
- it_behaves_like 'a user page'
151
-
152
- it 'can edit the user email' do
153
- fill_in 'user_email', with: 'a@example.com99'
154
- click_button 'Update'
155
-
156
- expect(user_a.reload.email).to eq 'a@example.com99'
157
- expect(page).to have_text 'Account updated'
158
- expect(page).to have_field('user_email', with: 'a@example.com99')
159
- end
160
-
161
- it 'can edit the user password' do
162
- fill_in 'user_password', with: 'welcome'
163
- fill_in 'user_password_confirmation', with: 'welcome'
164
- click_button 'Update'
165
-
166
- expect(page).to have_text 'Account updated'
167
- end
168
-
169
- it 'can edit user roles' do
170
- click_link 'Account'
171
-
172
- check 'user_spree_role_admin'
173
- click_button 'Update'
174
- expect(page).to have_text 'Account updated'
175
- expect(find_field('user_spree_role_admin')).to be_checked
176
- end
177
-
178
- it 'can delete user roles' do
179
- user_a.spree_roles << Spree::Role.create(name: "dummy")
180
- click_link 'Account'
181
-
182
- user_a.spree_roles.each do |role|
183
- uncheck "user_spree_role_#{role.name}"
184
- end
185
-
186
- click_button 'Update'
187
- expect(page).to have_text 'Account updated'
188
- expect(find_field('user_spree_role_dummy')).not_to be_checked
189
- expect(user_a.reload.spree_roles).to be_empty
190
- end
191
-
192
- it 'can edit user shipping address' do
193
- click_link "Addresses"
194
-
195
- within("#admin_user_edit_addresses") do
196
- fill_in "user_ship_address_attributes_address1", with: "1313 Mockingbird Ln"
197
- click_button 'Update'
198
- expect(page).to have_field('user_ship_address_attributes_address1', with: "1313 Mockingbird Ln")
199
- end
200
-
201
- expect(user_a.reload.ship_address.address1).to eq "1313 Mockingbird Ln"
202
- end
203
-
204
- it 'can edit user billing address' do
205
- click_link "Addresses"
206
-
207
- within("#admin_user_edit_addresses") do
208
- fill_in "user_bill_address_attributes_address1", with: "1313 Mockingbird Ln"
209
- click_button 'Update'
210
- expect(page).to have_field('user_bill_address_attributes_address1', with: "1313 Mockingbird Ln")
211
- end
212
-
213
- expect(user_a.reload.bill_address.address1).to eq "1313 Mockingbird Ln"
214
- end
215
-
216
- context 'invalid entry' do
217
- around do |example|
218
- ::AlwaysInvalidUser = Class.new(Spree.user_class) do
219
- validate :always_invalid_email
220
- def always_invalid_email
221
- errors.add(:email, "is invalid")
222
- end
223
- end
224
- orig_class = Spree.user_class
225
- Spree.user_class = "AlwaysInvalidUser"
226
-
227
- example.run
228
-
229
- Spree.user_class = orig_class.name
230
- Object.send(:remove_const, "AlwaysInvalidUser")
231
- end
232
-
233
- it 'should show validation errors' do
234
- fill_in 'user_email', with: 'something'
235
- click_button 'Update'
236
-
237
- within('#errorExplanation') do
238
- expect(page).to have_content("Email is invalid")
239
- end
240
-
241
- within('.flash.error') do
242
- expect(page).to have_content("Email is invalid")
243
- end
244
- end
245
- end
246
-
247
- context 'no api key exists' do
248
- it 'can generate a new api key' do
249
- within("#admin_user_edit_api_key") do
250
- expect(user_a.spree_api_key).to be_blank
251
- click_button "Generate API key"
252
- end
253
-
254
- expect(user_a.reload.spree_api_key).to be_present
255
-
256
- expect(page).to have_content('Key: (hidden)')
257
- end
258
- end
259
-
260
- context 'an api key exists' do
261
- before do
262
- user_a.generate_spree_api_key!
263
- expect(user_a.reload.spree_api_key).to be_present
264
- visit current_path
265
- end
266
-
267
- it 'can clear an api key' do
268
- expect(page).to have_css('#current-api-key')
269
-
270
- click_button "Clear key"
271
-
272
- expect(page).to have_no_css('#current-api-key')
273
-
274
- expect(user_a.reload.spree_api_key).to be_blank
275
- end
276
-
277
- it 'can regenerate an api key' do
278
- old_key = user_a.spree_api_key
279
-
280
- within("#admin_user_edit_api_key") do
281
- click_button "Regenerate key"
282
- end
283
-
284
- expect(user_a.reload.spree_api_key).to be_present
285
- expect(user_a.reload.spree_api_key).not_to eq old_key
286
-
287
- expect(page).to have_content('Key: (hidden)')
288
- end
289
- end
290
- end
291
-
292
- context 'deleting users' do
293
- let!(:an_user) { create(:user_with_addresses, email: 'an_user@example.com') }
294
- let!(:order) { create(:completed_order_with_totals, user_id: an_user.id) }
295
-
296
- context 'if an user has placed orders' do
297
- before do
298
- visit spree.admin_path
299
- click_link 'Users'
300
- end
301
-
302
- it "can't be deleted" do
303
- within "#spree_user_#{an_user.id}" do
304
- expect(page).not_to have_selector('.fa-trash')
305
- end
306
- end
307
- end
308
- end
309
-
310
- context 'order history with sorting' do
311
- before do
312
- orders
313
- click_link user_a.email
314
- within(".tabs") { click_link I18n.t("spree.admin.user.order_history") }
315
- end
316
-
317
- it_behaves_like 'a user page'
318
-
319
- context "completed_at" do
320
- it_behaves_like "a sortable attribute" do
321
- let(:text_match_1) { I18n.l(order.completed_at.to_date) }
322
- let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
323
- let(:table_id) { "listing_orders" }
324
- let(:sort_link) { "orders_completed_at_title" }
325
- end
326
- end
327
-
328
- context :number do
329
- it_behaves_like "a sortable attribute" do
330
- let(:text_match_1) { order.number }
331
- let(:text_match_2) { order_2.number }
332
- let(:table_id) { "listing_orders" }
333
- let(:sort_link) { "orders_number_title" }
334
- end
335
- end
336
-
337
- context :total do
338
- it_behaves_like "a sortable attribute" do
339
- # Since Spree::Money renders each piece of the total in it's own span,
340
- # we are just checking the dollar total matches. Mainly due to how
341
- # RSpec matcher appear_before works since it can't index the broken up total.
342
- let(:text_match_1) { order.total.to_i.to_s }
343
- let(:text_match_2) { order_2.total.to_i.to_s }
344
- let(:table_id) { "listing_orders" }
345
- let(:sort_link) { "orders_total_title" }
346
- end
347
- end
348
-
349
- context "state" do
350
- let(:text_match_1) { "Complete" }
351
- let(:text_match_2) { "Complete" }
352
- let(:table_id) { "listing_orders" }
353
- let(:sort_link) { "orders_#{attr}_title" }
354
- end
355
- end
356
-
357
- context 'items purchased with sorting' do
358
- before do
359
- orders
360
- click_link user_a.email
361
- within(".tabs") { click_link I18n.t("spree.admin.user.items") }
362
- end
363
-
364
- it_behaves_like 'a user page'
365
-
366
- context "completed_at" do
367
- it_behaves_like "a sortable attribute" do
368
- let(:text_match_1) { I18n.l(order.completed_at.to_date) }
369
- let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
370
- let(:table_id) { "listing_items" }
371
- let(:sort_link) { "orders_completed_at_title" }
372
- end
373
- end
374
-
375
- context "number" do
376
- let(:text_match_1) { "R123" }
377
- let(:text_match_2) { "R456" }
378
- let(:table_id) { "listing_items" }
379
- let(:sort_link) { "orders_#{attr}_title" }
380
- end
381
-
382
- context "state" do
383
- let(:text_match_1) { "Complete" }
384
- let(:text_match_2) { "Complete" }
385
- let(:table_id) { "listing_items" }
386
- let(:sort_link) { "orders_#{attr}_title" }
387
- end
388
-
389
- it "has item attributes" do
390
- items = order.line_items | order_2.line_items
391
- expect(page).to have_table 'listing_items'
392
- within_table('listing_items') do
393
- items.each do |item|
394
- expect(page).to have_selector(".item-name", text: item.product.name)
395
- expect(page).to have_selector(".item-price", text: item.single_money.to_html(html_wrap: false))
396
- expect(page).to have_selector(".item-quantity", text: item.quantity)
397
- expect(page).to have_selector(".item-total", text: item.money.to_html(html_wrap: false))
398
- end
399
- end
400
- end
401
- end
402
- end