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,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Option Types", type: :feature do
6
- stub_authorization!
7
-
8
- before(:each) do
9
- visit spree.admin_path
10
- click_nav "Products"
11
- end
12
-
13
- context "listing option types" do
14
- it "should list existing option types" do
15
- create(:option_type, name: "tshirt-color", presentation: "Color")
16
- create(:option_type, name: "tshirt-size", presentation: "Size")
17
-
18
- click_link "Option Types"
19
- within("table#listing_option_types") do
20
- expect(page).to have_content("Color")
21
- expect(page).to have_content("tshirt-color")
22
- expect(page).to have_content("Size")
23
- expect(page).to have_content("tshirt-size")
24
- end
25
- end
26
- end
27
-
28
- context "creating a new option type" do
29
- it "should allow an admin to create a new option type", js: true do
30
- click_link "Option Types"
31
- click_link "new_option_type_link"
32
- expect(page).to have_content("New Option Type")
33
- fill_in "option_type_name", with: "shirt colors"
34
- fill_in "option_type_presentation", with: "colors"
35
- click_button "Create"
36
- expect(page).to have_content("successfully created!")
37
-
38
- page.find('#option_type_option_values_attributes_0_name').set('color')
39
- page.find('#option_type_option_values_attributes_0_presentation').set('black')
40
-
41
- click_button "Update"
42
- expect(page).to have_content("successfully updated!")
43
- end
44
- end
45
-
46
- context "editing an existing option type" do
47
- it "should allow an admin to update an existing option type" do
48
- create(:option_type, name: "tshirt-color", presentation: "Color")
49
- create(:option_type, name: "tshirt-size", presentation: "Size")
50
- click_link "Option Types"
51
- within('table#listing_option_types') do
52
- find('tr', text: 'Size').click_link "Edit"
53
- end
54
- fill_in "option_type_name", with: "foo-size 99"
55
- click_button "Update"
56
- expect(page).to have_content("successfully updated!")
57
- expect(page).to have_content("foo-size 99")
58
- end
59
- end
60
-
61
- # Regression test for https://github.com/spree/spree/issues/2277
62
- it "can remove an option value from an option type", js: true do
63
- option_value = create(:option_value)
64
- click_link "Option Types"
65
- within('table#listing_option_types') { click_icon :edit }
66
- expect(page).to have_title("#{option_value.option_type.name} - Option Types - Products")
67
- expect(page).to have_css("tbody#option_values tr", count: 1)
68
- within("tbody#option_values") do
69
- find('.spree_remove_fields').click
70
- end
71
- # Assert that the field is hidden automatically
72
- expect(page).to have_no_css("tbody#option_values tr")
73
-
74
- # Ensure the DELETE request finishes
75
- expect(page).to have_no_css("#progress")
76
-
77
- # Then assert that on a page refresh that it's still not visible
78
- visit page.current_url
79
- # What *is* visible is a new option value field, with blank values
80
- # Sometimes the page doesn't load before the all check is done
81
- # lazily finding the element gives the page 10 seconds
82
- expect(page).to have_css("tbody#option_values")
83
- all("tbody#option_values tr input", count: 2).each do |input|
84
- expect(input.value).to be_blank
85
- end
86
- end
87
-
88
- # Regression test for https://github.com/spree/spree/issues/3204
89
- it "can remove a non-persisted option value from an option type", js: true do
90
- create(:option_type)
91
- click_link "Option Types"
92
- within('table#listing_option_types') { click_icon :edit }
93
-
94
- expect(page).to have_css("tbody#option_values tr", count: 1)
95
-
96
- # Add a new option type
97
- click_link "Add Option Value"
98
- expect(page).to have_css("tbody#option_values tr", count: 2)
99
-
100
- # Remove default option type
101
- within("tbody#option_values") do
102
- within_row(1) do
103
- find('.fa-trash').click
104
- end
105
- end
106
- # Assert that the field is hidden automatically
107
- expect(page).to have_css("tbody#option_values tr", count: 1)
108
-
109
- # Remove added option type
110
- within("tbody#option_values") do
111
- find('.fa-trash').click
112
- end
113
- # Assert that the field is hidden automatically
114
- expect(page).to have_css("tbody#option_values tr", count: 0)
115
- end
116
- end
@@ -1,127 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'Pricing' do
6
- stub_authorization!
7
-
8
- let(:product) { create(:product) }
9
-
10
- before do
11
- visit spree.edit_admin_product_path(product)
12
- end
13
-
14
- it 'has a Prices tab' do
15
- within(".tabs") do
16
- expect(page).to have_link("Prices")
17
- end
18
- end
19
-
20
- context "in the prices tab" do
21
- let!(:country) { create :country, iso: "DE" }
22
- let(:master_price) { product.master.default_price }
23
- let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "RUB", country_iso: "DE") }
24
-
25
- before do
26
- visit spree.admin_product_prices_path(product)
27
- end
28
-
29
- it 'displays a table with the prices' do
30
- expect(page).to have_content(product.name)
31
- within(".tabs .active") do
32
- expect(page).to have_content("Prices")
33
- end
34
-
35
- within('table.master_prices') do
36
- expect(page).to have_content("$19.99")
37
- expect(page).to have_content("USD")
38
- expect(page).to have_content("34.56 ₽")
39
- expect(page).to have_content("RUB")
40
- expect(page).to have_content("Any Country")
41
- expect(page).to have_content("Germany")
42
- end
43
- end
44
-
45
- context "searching" do
46
- let(:variant) { create(:variant, price: 20) }
47
- let(:product) { variant.product }
48
-
49
- before do
50
- product.master.update(price: 49.99)
51
- end
52
-
53
- it 'has a working table filter' do
54
- expect(page).to have_selector("#table-filter")
55
- within "#table-filter" do
56
- within "fieldset legend" do
57
- expect(page).to have_content("Search")
58
- end
59
- end
60
- select variant.options_text, from: "q_variant_id_eq", exact: false
61
- click_button "Filter Results"
62
- expect(page).to have_content("20")
63
- expect(page).to_not have_content("49.99")
64
- end
65
- end
66
-
67
- context "editing" do
68
- let(:product) { create(:product, price: 123.99) }
69
- let!(:variant) { product.master }
70
- let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "EUR") }
71
-
72
- it 'has a working edit page' do
73
- within "#spree_price_#{product.master.prices.first.id}" do
74
- click_icon :edit
75
- end
76
- expect(page).to have_content("Edit Price")
77
-
78
- within("#price_price_field") do
79
- expect(page).to have_field('price_price', with: '123.99')
80
- end
81
-
82
- fill_in "price_price", with: 999.99
83
- click_button "Update"
84
- expect(page).to have_content("Price has been successfully updated!")
85
- expect(page).to have_content("$999.99")
86
- expect(page).to have_content("€34.56")
87
- end
88
-
89
- it "will not reset the currency to default" do
90
- within "#spree_price_#{other_price.id}" do
91
- click_icon :edit
92
- end
93
- expect(page).to have_content("Edit Price")
94
- expect(page).to_not have_field('price_currency', with: 'USD')
95
- within("#price_price_field") do
96
- expect(page).to have_css('.number-with-currency-addon', text: 'EUR')
97
- end
98
- end
99
- end
100
-
101
- context "deleting", js: true do
102
- let(:product) { create(:product, price: 65.43) }
103
- let!(:variant) { product.master }
104
- let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "EUR") }
105
-
106
- it "will delete the non-default price" do
107
- within "#spree_price_#{other_price.id}" do
108
- accept_alert do
109
- click_icon :trash
110
- end
111
- end
112
- expect(page).to have_content("Price has been successfully removed")
113
- end
114
-
115
- it "does not break when default price is deleted" do
116
- within "#spree_price_#{variant.default_price.id}" do
117
- accept_alert do
118
- click_icon :trash
119
- end
120
- end
121
- expect(page).to have_content("Price has been successfully removed")
122
- visit spree.admin_products_path
123
- expect(page).to have_selector("#spree_product_#{product.id}")
124
- end
125
- end
126
- end
127
- end
@@ -1,336 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Products", type: :feature do
6
- context "as admin user" do
7
- stub_authorization!
8
-
9
- before(:each) do
10
- visit spree.admin_path
11
- end
12
-
13
- def build_option_type_with_values(name, values)
14
- ot = FactoryBot.create(:option_type, name: name)
15
- values.each do |val|
16
- ot.option_values.create(name: val.downcase, presentation: val)
17
- end
18
- ot
19
- end
20
-
21
- context "listing products" do
22
- context "sorting" do
23
- before do
24
- create(:product, name: 'apache baseball cap', price: 10)
25
- create(:product, name: 'zomg shirt', price: 5)
26
- end
27
-
28
- it "should list existing products with correct sorting by name" do
29
- click_nav "Products"
30
- # Name ASC
31
- within_row(1) { expect(page).to have_content('apache baseball cap') }
32
- within_row(2) { expect(page).to have_content("zomg shirt") }
33
-
34
- # Name DESC
35
- click_link "admin_products_listing_name_title"
36
- within_row(1) { expect(page).to have_content("zomg shirt") }
37
- within_row(2) { expect(page).to have_content('apache baseball cap') }
38
- end
39
-
40
- it "should list existing products with correct sorting by price" do
41
- click_nav "Products"
42
-
43
- # Name ASC (default)
44
- within_row(1) { expect(page).to have_content('apache baseball cap') }
45
- within_row(2) { expect(page).to have_content("zomg shirt") }
46
-
47
- # Price DESC
48
- click_link "admin_products_listing_price_title"
49
- within_row(1) { expect(page).to have_content("zomg shirt") }
50
- within_row(2) { expect(page).to have_content('apache baseball cap') }
51
- end
52
- end
53
-
54
- context "currency displaying" do
55
- context "using Russian Rubles" do
56
- before do
57
- stub_spree_preferences(currency: "RUB")
58
- end
59
-
60
- let!(:product) do
61
- create(:product, name: "Just a product", price: 19.99)
62
- end
63
-
64
- # Regression test for https://github.com/spree/spree/issues/2737
65
- context "uses руб as the currency symbol" do
66
- it "on the products listing page" do
67
- visit spree.admin_products_path
68
- within_row(1) { expect(page).to have_content("19.99 ₽") }
69
- end
70
- end
71
- end
72
- end
73
- context "when none of the product prices are in the same currency as the default in the store" do
74
- before do
75
- stub_spree_preferences(currency: "MXN")
76
- end
77
-
78
- let!(:product) do
79
- create(:product, name: "Just a product", price: 19.99)
80
- end
81
-
82
- it 'defaults it to Spree::Config.currency and sets the price as blank' do
83
- stub_spree_preferences(currency: "USD")
84
- visit spree.admin_product_path(product)
85
- within("#product_price_field") do
86
- expect(page).to have_content("USD")
87
- end
88
- end
89
- end
90
- end
91
-
92
- context "searching products" do
93
- it "should be able to search deleted products", js: true do
94
- create(:product, name: 'apache baseball cap', deleted_at: "2011-01-06 18:21:13")
95
- create(:product, name: 'zomg shirt')
96
-
97
- click_nav "Products"
98
- expect(page).to have_content("zomg shirt")
99
- expect(page).not_to have_content("apache baseball cap")
100
- check "Show Deleted"
101
- click_button 'Search'
102
- expect(find('input[name="q[with_deleted]"]')).to be_checked
103
- expect(page).to have_content("zomg shirt")
104
- expect(page).to have_content("apache baseball cap")
105
- uncheck "Show Deleted"
106
- click_button 'Search'
107
- expect(page).to have_content("zomg shirt")
108
- expect(page).not_to have_content("apache baseball cap")
109
- end
110
-
111
- it "should be able to search products by their properties" do
112
- create(:product, name: 'apache baseball cap', sku: "A100")
113
- create(:product, name: 'apache baseball cap2', sku: "B100")
114
- create(:product, name: 'zomg shirt')
115
-
116
- click_nav "Products"
117
- fill_in "Name", with: "ap"
118
- click_button 'Search'
119
- expect(page).to have_content("apache baseball cap")
120
- expect(page).to have_content("apache baseball cap2")
121
- expect(page).not_to have_content("zomg shirt")
122
-
123
- fill_in "SKU", with: "A1"
124
- click_button "Search"
125
- expect(page).to have_content("apache baseball cap")
126
- expect(page).not_to have_content("apache baseball cap2")
127
- expect(page).not_to have_content("zomg shirt")
128
- end
129
-
130
- # Regression test for https://github.com/solidusio/solidus/issues/2016
131
- it "should be able to search and sort by price" do
132
- product = create(:product, name: 'apache baseball cap', sku: "A001")
133
- create(:variant, product: product, sku: "A002")
134
- create(:product, name: 'zomg shirt', sku: "Z001")
135
-
136
- click_nav "Products"
137
- expect(page).to have_content("apache baseball cap")
138
- expect(page).to have_content("zomg shirt")
139
- expect(page).to have_css('#listing_products > tbody > tr', count: 2)
140
-
141
- fill_in "SKU", with: "A"
142
- click_button 'Search'
143
- expect(page).to have_content("apache baseball cap")
144
- expect(page).not_to have_content("zomg shirt")
145
- expect(page).to have_css('#listing_products > tbody > tr', count: 1)
146
-
147
- # Sort by master price
148
- click_on 'Master Price'
149
- expect(page).to have_css('.sort_link.asc', text: 'Master Price')
150
- expect(page).to have_content("apache baseball cap")
151
- expect(page).not_to have_content("zomg shirt")
152
- expect(page).to have_css('#listing_products > tbody > tr', count: 1)
153
- end
154
- end
155
-
156
- context "creating a new product" do
157
- before(:each) do
158
- @shipping_category = create(:shipping_category)
159
- click_nav "Products"
160
- click_on "New Product"
161
- end
162
-
163
- it "should allow an admin to create a new product", js: true do
164
- fill_in "product_name", with: "Baseball Cap"
165
- fill_in "product_sku", with: "B100"
166
- fill_in "product_price", with: "100"
167
- fill_in "product_available_on", with: "2012/01/24"
168
- select @shipping_category.name, from: "product_shipping_category_id"
169
- click_button "Create"
170
- expect(page).to have_content("successfully created!")
171
- click_button "Update"
172
- expect(page).to have_content("successfully updated!")
173
- end
174
-
175
- it "should show validation errors", js: false do
176
- fill_in "product_name", with: "Baseball Cap"
177
- fill_in "product_sku", with: "B100"
178
- fill_in "product_price", with: "100"
179
- click_button "Create"
180
- expect(page).to have_content("Shipping category can't be blank")
181
- end
182
-
183
- context "using a locale with a different decimal format " do
184
- before do
185
- # change English locale’s separator and delimiter to match 19,99 format
186
- I18n.backend.store_translations(:en,
187
- number: {
188
- currency: {
189
- format: {
190
- separator: ",",
191
- delimiter: "."
192
- }
193
- }
194
- })
195
- end
196
-
197
- after do
198
- # revert changes to English locale
199
- I18n.backend.store_translations(:en,
200
- number: {
201
- currency: {
202
- format: {
203
- separator: ".",
204
- delimiter: ","
205
- }
206
- }
207
- })
208
- end
209
-
210
- it "should show localized price value on validation errors", js: true do
211
- fill_in "Name", with: " "
212
- select @shipping_category.name, from: "product_shipping_category_id"
213
- fill_in "product_price", with: "19,99"
214
- click_button "Create"
215
- expect(page).to have_content("Name can't be blank")
216
- expect(page).to have_field('product_price', with: '19,99')
217
- end
218
- end
219
-
220
- # Regression test for https://github.com/spree/spree/issues/2097
221
- it "can set the count on hand to a null value", js: true do
222
- fill_in "product_name", with: "Baseball Cap"
223
- fill_in "product_price", with: "100"
224
- select @shipping_category.name, from: "product_shipping_category_id"
225
- click_button "Create"
226
- expect(page).to have_content("successfully created!")
227
- click_button "Update"
228
- expect(page).to have_content("successfully updated!")
229
- end
230
- end
231
-
232
- context "cloning a product", js: true do
233
- it "should allow an admin to clone a product" do
234
- create(:product)
235
-
236
- click_nav "Products"
237
- within_row(1) do
238
- click_icon :copy
239
- end
240
-
241
- expect(page).to have_content("Product has been cloned")
242
- end
243
-
244
- context "cloning a deleted product" do
245
- it "should allow an admin to clone a deleted product" do
246
- create(:product, name: "apache baseball cap")
247
-
248
- click_nav "Products"
249
- check "Show Deleted"
250
- click_button "Search"
251
-
252
- expect(page).to have_content("apache baseball cap")
253
-
254
- within_row(1) do
255
- click_icon :copy
256
- end
257
-
258
- expect(page).to have_content("Product has been cloned")
259
- end
260
- end
261
- end
262
-
263
- context 'updating a product', js: true do
264
- let(:product) { create(:product) }
265
-
266
- it 'should parse correctly available_on' do
267
- visit spree.admin_product_path(product)
268
- fill_in "product_available_on", with: "2012/12/25"
269
- click_button "Update"
270
- expect(page).to have_content("successfully updated!")
271
- expect(Spree::Product.last.available_on).to eq('Tue, 25 Dec 2012 00:00:00 UTC +00:00')
272
- end
273
- end
274
-
275
- context 'deleting a product', js: true do
276
- let!(:product) { create(:product) }
277
-
278
- it "product details are still viewable" do
279
- visit spree.admin_products_path
280
-
281
- expect(page).to have_content(product.name)
282
- accept_alert do
283
- click_icon :trash
284
- end
285
-
286
- expect(page).to have_no_content(product.name)
287
-
288
- # This will show our deleted product
289
- check "Show Deleted"
290
- click_button "Search"
291
- click_link product.name
292
- expect(page).to_not have_field('Master Price')
293
- expect(page).to_not have_content('Images')
294
- expect(page).to_not have_content('Prices')
295
- expect(page).to_not have_content('Product Properties')
296
- end
297
- end
298
- end
299
-
300
- context 'with only product permissions' do
301
- before do
302
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
303
- end
304
-
305
- custom_authorization! do |_user|
306
- can [:admin, :update, :index, :read], Spree::Product
307
- end
308
- let!(:product) { create(:product) }
309
-
310
- it "should only display accessible links on index" do
311
- visit spree.admin_products_path
312
- expect(page).to have_link('Products')
313
- expect(page).not_to have_link('Option Types')
314
- expect(page).not_to have_link('Properties')
315
-
316
- expect(page).not_to have_link('New Product')
317
- expect(page).not_to have_css('a.clone')
318
- expect(page).to have_css('a.edit')
319
- expect(page).not_to have_css('a.delete-resource')
320
- end
321
-
322
- it "should only display accessible links on edit" do
323
- visit spree.admin_product_path(product)
324
-
325
- # product tabs should be hidden
326
- expect(page).to have_link('Product Details')
327
- expect(page).not_to have_link('Images')
328
- expect(page).not_to have_link('Variants')
329
- expect(page).not_to have_link('Product Properties')
330
- expect(page).not_to have_link('Stock Management')
331
-
332
- # no create permission
333
- expect(page).not_to have_link('New Product')
334
- end
335
- end
336
- end