solidus_backend 2.10.2 → 2.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend.js +4 -1
  3. data/app/assets/javascripts/spree/backend/adjustments.js +1 -1
  4. data/app/assets/javascripts/spree/backend/admin.js +18 -29
  5. data/app/assets/javascripts/spree/backend/collections/states.js +1 -1
  6. data/app/assets/javascripts/spree/backend/components/selectable_table.js +5 -0
  7. data/app/assets/javascripts/spree/backend/components/selectable_table/return_items.js +5 -0
  8. data/app/assets/javascripts/spree/backend/components/selectable_table/summary.js +7 -0
  9. data/app/assets/javascripts/spree/backend/components/sortable_table.js +31 -25
  10. data/app/assets/javascripts/spree/backend/models/order.js +3 -3
  11. data/app/assets/javascripts/spree/backend/models/payment.js +1 -1
  12. data/app/assets/javascripts/spree/backend/models/shipment.js +1 -1
  13. data/app/assets/javascripts/spree/backend/models/stock_item.js +1 -1
  14. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +2 -2
  15. data/app/assets/javascripts/spree/backend/option_value_picker.js +2 -2
  16. data/app/assets/javascripts/spree/backend/product_picker.js +2 -2
  17. data/app/assets/javascripts/spree/backend/routes.js +40 -21
  18. data/app/assets/javascripts/spree/backend/shipments.js +5 -5
  19. data/app/assets/javascripts/spree/backend/shipping_methods/stock_locations_picker.js +18 -0
  20. data/app/assets/javascripts/spree/backend/stock_management.js +4 -2
  21. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +2 -2
  22. data/app/assets/javascripts/spree/backend/taxons.js +3 -3
  23. data/app/assets/javascripts/spree/backend/templates/index.js +2 -0
  24. data/app/assets/javascripts/spree/backend/templates/orders/customer_details/autocomplete.hbs +2 -2
  25. data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +5 -1
  26. data/app/assets/javascripts/spree/backend/templates/tables/return_item_sum_amount.hbs +7 -0
  27. data/app/assets/javascripts/spree/backend/templates/tables/selectable_label.hbs +6 -0
  28. data/app/assets/javascripts/spree/backend/user_picker.js +3 -4
  29. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +2 -2
  30. data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +2 -2
  31. data/app/assets/javascripts/spree/backend/views/index.js +4 -0
  32. data/app/assets/javascripts/spree/backend/views/order/address.js +1 -1
  33. data/app/assets/javascripts/spree/backend/views/order/customer_select.js +2 -3
  34. data/app/assets/javascripts/spree/backend/views/order/details_adjustments.js +4 -1
  35. data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +4 -0
  36. data/app/assets/javascripts/spree/backend/views/tables/return_items.js +9 -0
  37. data/app/assets/javascripts/spree/backend/views/tables/selectable_table.js +70 -0
  38. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/sum_return_item_amount.js +32 -0
  39. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/summary.js +45 -0
  40. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +4 -5
  41. data/app/assets/stylesheets/spree/backend/sections/_orders.scss +5 -1
  42. data/app/assets/stylesheets/spree/backend/sections/_style_guide.scss +4 -0
  43. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -0
  44. data/app/controllers/spree/admin/base_controller.rb +6 -0
  45. data/app/controllers/spree/admin/cancellations_controller.rb +2 -0
  46. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -4
  47. data/app/controllers/spree/admin/images_controller.rb +2 -1
  48. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -0
  49. data/app/controllers/spree/admin/orders_controller.rb +7 -2
  50. data/app/controllers/spree/admin/payments_controller.rb +3 -1
  51. data/app/controllers/spree/admin/product_properties_controller.rb +1 -1
  52. data/app/controllers/spree/admin/products_controller.rb +18 -24
  53. data/app/controllers/spree/admin/promotion_codes_controller.rb +9 -4
  54. data/app/controllers/spree/admin/refunds_controller.rb +20 -0
  55. data/app/controllers/spree/admin/resource_controller.rb +27 -7
  56. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  57. data/app/controllers/spree/admin/root_controller.rb +1 -1
  58. data/app/controllers/spree/admin/search_controller.rb +1 -2
  59. data/app/controllers/spree/admin/stock_items_controller.rb +6 -5
  60. data/app/controllers/spree/admin/stock_locations_controller.rb +4 -0
  61. data/app/controllers/spree/admin/stock_movements_controller.rb +7 -0
  62. data/app/controllers/spree/admin/taxons_controller.rb +12 -1
  63. data/app/controllers/spree/admin/users/api_key_controller.rb +29 -0
  64. data/app/controllers/spree/admin/users_controller.rb +37 -20
  65. data/app/controllers/spree/admin/variants_controller.rb +4 -2
  66. data/app/controllers/spree/admin/zones_controller.rb +1 -1
  67. data/app/helpers/spree/admin/base_helper.rb +4 -0
  68. data/app/helpers/spree/admin/customer_returns_helper.rb +1 -1
  69. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  70. data/app/helpers/spree/admin/orders_helper.rb +8 -4
  71. data/app/helpers/spree/admin/stock_movements_helper.rb +8 -4
  72. data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +2 -3
  73. data/app/views/spree/admin/images/index.html.erb +25 -21
  74. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +8 -1
  75. data/app/views/spree/admin/option_types/edit.html.erb +3 -1
  76. data/app/views/spree/admin/orders/customer_details/_form.html.erb +13 -13
  77. data/app/views/spree/admin/orders/index.html.erb +23 -13
  78. data/app/views/spree/admin/payment_methods/_form.html.erb +7 -2
  79. data/app/views/spree/admin/payments/index.html.erb +3 -1
  80. data/app/views/spree/admin/prices/_master_variant_table.html.erb +3 -3
  81. data/app/views/spree/admin/prices/_table.html.erb +3 -3
  82. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +7 -2
  83. data/app/views/spree/admin/product_properties/index.html.erb +14 -2
  84. data/app/views/spree/admin/products/_form.html.erb +13 -2
  85. data/app/views/spree/admin/products/index.html.erb +2 -2
  86. data/app/views/spree/admin/promotion_codes/index.html.erb +1 -1
  87. data/app/views/spree/admin/promotions/_actions.html.erb +1 -1
  88. data/app/views/spree/admin/promotions/_activations_new.html.erb +1 -1
  89. data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
  90. data/app/views/spree/admin/promotions/edit.html.erb +2 -2
  91. data/app/views/spree/admin/promotions/index.html.erb +12 -5
  92. data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -10
  93. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  94. data/app/views/spree/admin/search/users.json.jbuilder +15 -1
  95. data/app/views/spree/admin/shared/_address.html.erb +6 -6
  96. data/app/views/spree/admin/shared/_address_form.html.erb +15 -8
  97. data/app/views/spree/admin/shared/_order_submenu.html.erb +4 -4
  98. data/app/views/spree/admin/shared/_payments_tabs.html.erb +1 -1
  99. data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +5 -5
  100. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +6 -6
  101. data/app/views/spree/admin/shared/_shipping_tabs.html.erb +3 -3
  102. data/app/views/spree/admin/shared/_taxes_tabs.html.erb +2 -2
  103. data/app/views/spree/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  104. data/app/views/spree/admin/shipping_methods/_form.html.erb +18 -0
  105. data/app/views/spree/admin/stock_items/_stock_management.html.erb +1 -1
  106. data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
  107. data/app/views/spree/admin/stock_locations/index.html.erb +3 -1
  108. data/app/views/spree/admin/stock_movements/index.html.erb +30 -1
  109. data/app/views/spree/admin/store_credits/index.html.erb +1 -1
  110. data/app/views/spree/admin/stores/_form.html.erb +6 -0
  111. data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
  112. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
  113. data/app/views/spree/admin/users/_form.html.erb +2 -2
  114. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  115. data/app/views/spree/admin/users/edit.html.erb +4 -4
  116. data/app/views/spree/admin/users/items.html.erb +5 -3
  117. data/app/views/spree/admin/users/orders.html.erb +5 -3
  118. data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
  119. data/app/views/spree/admin/variants/index.html.erb +2 -2
  120. data/config/initializers/form_builder.rb +2 -2
  121. data/lib/spree/backend/engine.rb +0 -2
  122. data/lib/spree/backend_configuration.rb +14 -1
  123. data/solidus_backend.gemspec +4 -4
  124. metadata +24 -123
  125. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
  126. data/script/rails +0 -10
  127. data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
  128. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
  129. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
  130. data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
  131. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
  132. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
  133. data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
  134. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
  135. data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
  136. data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
  137. data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
  138. data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
  139. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
  140. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
  141. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
  142. data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
  143. data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
  144. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
  145. data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -201
  146. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
  147. data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
  148. data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
  149. data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
  150. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
  151. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
  152. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
  153. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
  154. data/spec/controllers/spree/admin/users_controller_spec.rb +0 -287
  155. data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
  156. data/spec/features/admin/configuration/payment_methods_spec.rb +0 -176
  157. data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -126
  158. data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
  159. data/spec/features/admin/configuration/store_spec.rb +0 -62
  160. data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
  161. data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
  162. data/spec/features/admin/configuration/taxonomies_spec.rb +0 -61
  163. data/spec/features/admin/configuration/zones_spec.rb +0 -41
  164. data/spec/features/admin/homepage_spec.rb +0 -86
  165. data/spec/features/admin/javascript_format_money_spec.rb +0 -22
  166. data/spec/features/admin/locale_spec.rb +0 -34
  167. data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
  168. data/spec/features/admin/orders/adjustments_spec.rb +0 -130
  169. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
  170. data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
  171. data/spec/features/admin/orders/customer_details_spec.rb +0 -203
  172. data/spec/features/admin/orders/customer_returns_spec.rb +0 -41
  173. data/spec/features/admin/orders/line_items_spec.rb +0 -52
  174. data/spec/features/admin/orders/listing_spec.rb +0 -186
  175. data/spec/features/admin/orders/log_entries_spec.rb +0 -56
  176. data/spec/features/admin/orders/new_order_spec.rb +0 -379
  177. data/spec/features/admin/orders/new_refund_spec.rb +0 -35
  178. data/spec/features/admin/orders/order_details_spec.rb +0 -591
  179. data/spec/features/admin/orders/payments_spec.rb +0 -330
  180. data/spec/features/admin/orders/return_authorizations_spec.rb +0 -56
  181. data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
  182. data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
  183. data/spec/features/admin/orders/shipments_spec.rb +0 -145
  184. data/spec/features/admin/payments/store_credits_spec.rb +0 -23
  185. data/spec/features/admin/products/edit/images_spec.rb +0 -76
  186. data/spec/features/admin/products/edit/products_spec.rb +0 -92
  187. data/spec/features/admin/products/edit/taxons_spec.rb +0 -57
  188. data/spec/features/admin/products/edit/variants_spec.rb +0 -63
  189. data/spec/features/admin/products/option_types_spec.rb +0 -116
  190. data/spec/features/admin/products/pricing_spec.rb +0 -127
  191. data/spec/features/admin/products/products_spec.rb +0 -348
  192. data/spec/features/admin/products/properties_spec.rb +0 -141
  193. data/spec/features/admin/products/stock_management_spec.rb +0 -101
  194. data/spec/features/admin/products/variant_spec.rb +0 -89
  195. data/spec/features/admin/promotion_adjustments_spec.rb +0 -286
  196. data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
  197. data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
  198. data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
  199. data/spec/features/admin/promotions/promotion_code_batches_spec.rb +0 -37
  200. data/spec/features/admin/promotions/promotion_code_spec.rb +0 -31
  201. data/spec/features/admin/promotions/promotion_spec.rb +0 -52
  202. data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
  203. data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
  204. data/spec/features/admin/reimbursements_spec.rb +0 -18
  205. data/spec/features/admin/store_credits_spec.rb +0 -132
  206. data/spec/features/admin/stores_spec.rb +0 -37
  207. data/spec/features/admin/style_guide_spec.rb +0 -14
  208. data/spec/features/admin/taxons_spec.rb +0 -90
  209. data/spec/features/admin/users_spec.rb +0 -412
  210. data/spec/fixtures/files/ror_ringer.jpeg +0 -0
  211. data/spec/helpers/admin/base_helper_spec.rb +0 -49
  212. data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
  213. data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
  214. data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
  215. data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
  216. data/spec/javascripts/fixtures/_boot.html.erb +0 -8
  217. data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
  218. data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
  219. data/spec/javascripts/format_money_spec.js +0 -48
  220. data/spec/javascripts/spec_helper.js +0 -13
  221. data/spec/javascripts/support/show_errors.js +0 -8
  222. data/spec/javascripts/support/with_translations.js +0 -11
  223. data/spec/javascripts/translation_spec.js +0 -58
  224. data/spec/javascripts/views/number_with_currency_spec.js +0 -72
  225. data/spec/lib/spree/backend_configuration/menu_item_spec.rb +0 -17
  226. data/spec/lib/spree/backend_configuration_spec.rb +0 -22
  227. data/spec/spec_helper.rb +0 -123
  228. data/spec/support/appear_before_matcher.rb +0 -10
  229. data/spec/support/feature/base_feature_helper.rb +0 -17
  230. data/spec/support/feature/order_feature_helper.rb +0 -27
  231. data/spec/teaspoon_env.rb +0 -51
  232. data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
  233. data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
  234. data/spec/views/spree/admin/shared/navigation_footer_spec.rb +0 -67
@@ -1,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
@@ -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,90 +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
-
79
- scenario "Removes attachments from taxon" do
80
- taxon = create(:taxon)
81
- taxon.update(icon: File.new(file_fixture('ror_ringer.jpeg')))
82
-
83
- visit spree.edit_admin_taxonomy_taxon_path(taxon.taxonomy, taxon.id)
84
- within('#taxon_icon_field') do
85
- click_on 'Remove'
86
- end
87
-
88
- expect(page).to have_content("Icon has been successfully removed!")
89
- end
90
- end
@@ -1,412 +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 user roles' do
162
- click_link 'Account'
163
-
164
- check 'user_spree_role_admin'
165
- click_button 'Update'
166
- expect(page).to have_text 'Account updated'
167
- expect(find_field('user_spree_role_admin')).to be_checked
168
- end
169
-
170
- it 'can delete user roles' do
171
- user_a.spree_roles << Spree::Role.create(name: "dummy")
172
- click_link 'Account'
173
-
174
- user_a.spree_roles.each do |role|
175
- uncheck "user_spree_role_#{role.name}"
176
- end
177
-
178
- click_button 'Update'
179
- expect(page).to have_text 'Account updated'
180
- expect(find_field('user_spree_role_dummy')).not_to be_checked
181
- expect(user_a.reload.spree_roles).to be_empty
182
- end
183
-
184
- it 'can edit user shipping address' do
185
- click_link "Addresses"
186
-
187
- within("#admin_user_edit_addresses") do
188
- fill_in "user_ship_address_attributes_address1", with: "1313 Mockingbird Ln"
189
- click_button 'Update'
190
- expect(page).to have_field('user_ship_address_attributes_address1', with: "1313 Mockingbird Ln")
191
- end
192
-
193
- expect(user_a.reload.ship_address.address1).to eq "1313 Mockingbird Ln"
194
- end
195
-
196
- it 'can edit user billing address' do
197
- click_link "Addresses"
198
-
199
- within("#admin_user_edit_addresses") do
200
- fill_in "user_bill_address_attributes_address1", with: "1313 Mockingbird Ln"
201
- click_button 'Update'
202
- expect(page).to have_field('user_bill_address_attributes_address1', with: "1313 Mockingbird Ln")
203
- end
204
-
205
- expect(user_a.reload.bill_address.address1).to eq "1313 Mockingbird Ln"
206
- end
207
-
208
- it 'can edit the user password' do
209
- fill_in 'user_password', with: 'welcome'
210
- fill_in 'user_password_confirmation', with: 'welcome'
211
- click_button 'Update'
212
-
213
- expect(page).to have_text 'Account updated'
214
- end
215
-
216
- context 'without password permissions' do
217
- custom_authorization! do |_user|
218
- cannot [:update_password], Spree.user_class
219
- end
220
-
221
- it 'cannot edit the user password' do
222
- expect(page).to_not have_text 'Password'
223
- end
224
- end
225
-
226
- context 'invalid entry' do
227
- around do |example|
228
- ::AlwaysInvalidUser = Class.new(Spree.user_class) do
229
- validate :always_invalid_email
230
- def always_invalid_email
231
- errors.add(:email, "is invalid")
232
- end
233
- end
234
- orig_class = Spree.user_class
235
- Spree.user_class = "AlwaysInvalidUser"
236
-
237
- example.run
238
-
239
- Spree.user_class = orig_class.name
240
- Object.send(:remove_const, "AlwaysInvalidUser")
241
- end
242
-
243
- it 'should show validation errors' do
244
- fill_in 'user_email', with: 'something'
245
- click_button 'Update'
246
-
247
- within('#errorExplanation') do
248
- expect(page).to have_content("Email is invalid")
249
- end
250
-
251
- within('.flash.error') do
252
- expect(page).to have_content("Email is invalid")
253
- end
254
- end
255
- end
256
-
257
- context 'no api key exists' do
258
- it 'can generate a new api key' do
259
- within("#admin_user_edit_api_key") do
260
- expect(user_a.spree_api_key).to be_blank
261
- click_button "Generate API key"
262
- end
263
-
264
- expect(user_a.reload.spree_api_key).to be_present
265
-
266
- expect(page).to have_content('Key: (hidden)')
267
- end
268
- end
269
-
270
- context 'an api key exists' do
271
- before do
272
- user_a.generate_spree_api_key!
273
- expect(user_a.reload.spree_api_key).to be_present
274
- visit current_path
275
- end
276
-
277
- it 'can clear an api key' do
278
- expect(page).to have_css('#current-api-key')
279
-
280
- click_button "Clear key"
281
-
282
- expect(page).to have_no_css('#current-api-key')
283
-
284
- expect(user_a.reload.spree_api_key).to be_blank
285
- end
286
-
287
- it 'can regenerate an api key' do
288
- old_key = user_a.spree_api_key
289
-
290
- within("#admin_user_edit_api_key") do
291
- click_button "Regenerate key"
292
- end
293
-
294
- expect(user_a.reload.spree_api_key).to be_present
295
- expect(user_a.reload.spree_api_key).not_to eq old_key
296
-
297
- expect(page).to have_content('Key: (hidden)')
298
- end
299
- end
300
- end
301
-
302
- context 'deleting users' do
303
- let!(:an_user) { create(:user_with_addresses, email: 'an_user@example.com') }
304
- let!(:order) { create(:completed_order_with_totals, user_id: an_user.id) }
305
-
306
- context 'if an user has placed orders' do
307
- before do
308
- visit spree.admin_path
309
- click_link 'Users'
310
- end
311
-
312
- it "can't be deleted" do
313
- within "#spree_user_#{an_user.id}" do
314
- expect(page).not_to have_selector('.fa-trash')
315
- end
316
- end
317
- end
318
- end
319
-
320
- context 'order history with sorting' do
321
- before do
322
- orders
323
- click_link user_a.email
324
- within(".tabs") { click_link I18n.t("spree.admin.user.order_history") }
325
- end
326
-
327
- it_behaves_like 'a user page'
328
-
329
- context "completed_at" do
330
- it_behaves_like "a sortable attribute" do
331
- let(:text_match_1) { I18n.l(order.completed_at.to_date) }
332
- let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
333
- let(:table_id) { "listing_orders" }
334
- let(:sort_link) { "orders_completed_at_title" }
335
- end
336
- end
337
-
338
- context :number do
339
- it_behaves_like "a sortable attribute" do
340
- let(:text_match_1) { order.number }
341
- let(:text_match_2) { order_2.number }
342
- let(:table_id) { "listing_orders" }
343
- let(:sort_link) { "orders_number_title" }
344
- end
345
- end
346
-
347
- context :total do
348
- it_behaves_like "a sortable attribute" do
349
- # Since Spree::Money renders each piece of the total in it's own span,
350
- # we are just checking the dollar total matches. Mainly due to how
351
- # RSpec matcher appear_before works since it can't index the broken up total.
352
- let(:text_match_1) { order.total.to_i.to_s }
353
- let(:text_match_2) { order_2.total.to_i.to_s }
354
- let(:table_id) { "listing_orders" }
355
- let(:sort_link) { "orders_total_title" }
356
- end
357
- end
358
-
359
- context "state" do
360
- let(:text_match_1) { "Complete" }
361
- let(:text_match_2) { "Complete" }
362
- let(:table_id) { "listing_orders" }
363
- let(:sort_link) { "orders_#{attr}_title" }
364
- end
365
- end
366
-
367
- context 'items purchased with sorting' do
368
- before do
369
- orders
370
- click_link user_a.email
371
- within(".tabs") { click_link I18n.t("spree.admin.user.items") }
372
- end
373
-
374
- it_behaves_like 'a user page'
375
-
376
- context "completed_at" do
377
- it_behaves_like "a sortable attribute" do
378
- let(:text_match_1) { I18n.l(order.completed_at.to_date) }
379
- let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
380
- let(:table_id) { "listing_items" }
381
- let(:sort_link) { "orders_completed_at_title" }
382
- end
383
- end
384
-
385
- context "number" do
386
- let(:text_match_1) { "R123" }
387
- let(:text_match_2) { "R456" }
388
- let(:table_id) { "listing_items" }
389
- let(:sort_link) { "orders_#{attr}_title" }
390
- end
391
-
392
- context "state" do
393
- let(:text_match_1) { "Complete" }
394
- let(:text_match_2) { "Complete" }
395
- let(:table_id) { "listing_items" }
396
- let(:sort_link) { "orders_#{attr}_title" }
397
- end
398
-
399
- it "has item attributes" do
400
- items = order.line_items | order_2.line_items
401
- expect(page).to have_table 'listing_items'
402
- within_table('listing_items') do
403
- items.each do |item|
404
- expect(page).to have_selector(".item-name", text: item.product.name)
405
- expect(page).to have_selector(".item-price", text: item.single_money.to_html(html_wrap: false))
406
- expect(page).to have_selector(".item-quantity", text: item.quantity)
407
- expect(page).to have_selector(".item-total", text: item.money.to_html(html_wrap: false))
408
- end
409
- end
410
- end
411
- end
412
- end