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,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Product Variants", type: :feature do
6
- stub_authorization!
7
-
8
- before(:each) do
9
- visit spree.admin_path
10
- end
11
-
12
- context "editing variant option types", js: true do
13
- let!(:product) { create(:product) }
14
-
15
- it "should allow an admin to create option types for a variant" do
16
- click_nav "Products"
17
-
18
- within_row(1) { click_icon :edit }
19
-
20
- within('nav > ul.tabs') { click_link "Variants" }
21
- expect(page).to have_content("To add variants, you must first define")
22
- end
23
-
24
- it "allows admin to create a variant if there are option types" do
25
- click_nav "Products"
26
- click_link "Option Types"
27
- click_link "new_option_type_link"
28
- fill_in "option_type_name", with: "shirt colors"
29
- fill_in "option_type_presentation", with: "colors"
30
- click_button "Create"
31
- expect(page).to have_content("successfully created!")
32
-
33
- page.find('#option_type_option_values_attributes_0_name').set('color')
34
- page.find('#option_type_option_values_attributes_0_presentation').set('black')
35
- click_button "Update"
36
- expect(page).to have_content("successfully updated!")
37
-
38
- visit spree.admin_path
39
- click_nav "Products"
40
- within('table.index tbody tr:nth-child(1)') do
41
- click_icon :edit
42
- end
43
-
44
- select2_search "shirt", from: "Option Types"
45
- click_button "Update"
46
- expect(page).to have_content("successfully updated!")
47
-
48
- within('nav > ul.tabs') { click_link "Variants" }
49
- click_link "New Variant"
50
-
51
- select "black", from: "Colors"
52
- fill_in "variant_sku", with: "A100"
53
- click_button "Create"
54
- expect(page).to have_content("successfully created!")
55
-
56
- within(".index") do
57
- expect(page).to have_content("19.99")
58
- expect(page).to have_content("black")
59
- expect(page).to have_content("A100")
60
- end
61
- end
62
- end
63
- end
@@ -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,348 +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 "disables the button at submit", :js do
176
- page.execute_script "$('form').submit(function(e) { e.preventDefault()})"
177
- fill_in "product_name", with: "Baseball Cap"
178
- fill_in "product_sku", with: "B100"
179
- fill_in "product_price", with: "100"
180
- fill_in "product_available_on", with: "2012/01/24"
181
- select @shipping_category.name, from: "product_shipping_category_id"
182
- click_button "Create"
183
-
184
- expect(page).to have_button("Create", disabled: true)
185
- end
186
-
187
- it "should show validation errors", js: false do
188
- fill_in "product_name", with: "Baseball Cap"
189
- fill_in "product_sku", with: "B100"
190
- fill_in "product_price", with: "100"
191
- click_button "Create"
192
- expect(page).to have_content("Shipping category can't be blank")
193
- end
194
-
195
- context "using a locale with a different decimal format " do
196
- before do
197
- # change English locale’s separator and delimiter to match 19,99 format
198
- I18n.backend.store_translations(:en,
199
- number: {
200
- currency: {
201
- format: {
202
- separator: ",",
203
- delimiter: "."
204
- }
205
- }
206
- })
207
- end
208
-
209
- after do
210
- # revert changes to English locale
211
- I18n.backend.store_translations(:en,
212
- number: {
213
- currency: {
214
- format: {
215
- separator: ".",
216
- delimiter: ","
217
- }
218
- }
219
- })
220
- end
221
-
222
- it "should show localized price value on validation errors", js: true do
223
- fill_in "Name", with: " "
224
- select @shipping_category.name, from: "product_shipping_category_id"
225
- fill_in "product_price", with: "19,99"
226
- click_button "Create"
227
- expect(page).to have_content("Name can't be blank")
228
- expect(page).to have_field('product_price', with: '19,99')
229
- end
230
- end
231
-
232
- # Regression test for https://github.com/spree/spree/issues/2097
233
- it "can set the count on hand to a null value", js: true do
234
- fill_in "product_name", with: "Baseball Cap"
235
- fill_in "product_price", with: "100"
236
- select @shipping_category.name, from: "product_shipping_category_id"
237
- click_button "Create"
238
- expect(page).to have_content("successfully created!")
239
- click_button "Update"
240
- expect(page).to have_content("successfully updated!")
241
- end
242
- end
243
-
244
- context "cloning a product", js: true do
245
- it "should allow an admin to clone a product" do
246
- create(:product)
247
-
248
- click_nav "Products"
249
- within_row(1) do
250
- click_icon :copy
251
- end
252
-
253
- expect(page).to have_content("Product has been cloned")
254
- end
255
-
256
- context "cloning a deleted product" do
257
- it "should allow an admin to clone a deleted product" do
258
- create(:product, name: "apache baseball cap")
259
-
260
- click_nav "Products"
261
- check "Show Deleted"
262
- click_button "Search"
263
-
264
- expect(page).to have_content("apache baseball cap")
265
-
266
- within_row(1) do
267
- click_icon :copy
268
- end
269
-
270
- expect(page).to have_content("Product has been cloned")
271
- end
272
- end
273
- end
274
-
275
- context 'updating a product', js: true do
276
- let(:product) { create(:product) }
277
-
278
- it 'should parse correctly available_on' do
279
- visit spree.admin_product_path(product)
280
- fill_in "product_available_on", with: "2012/12/25"
281
- click_button "Update"
282
- expect(page).to have_content("successfully updated!")
283
- expect(Spree::Product.last.available_on).to eq('Tue, 25 Dec 2012 00:00:00 UTC +00:00')
284
- end
285
- end
286
-
287
- context 'deleting a product', js: true do
288
- let!(:product) { create(:product) }
289
-
290
- it "product details are still viewable" do
291
- visit spree.admin_products_path
292
-
293
- expect(page).to have_content(product.name)
294
- accept_alert do
295
- click_icon :trash
296
- end
297
-
298
- expect(page).to have_no_content(product.name)
299
-
300
- # This will show our deleted product
301
- check "Show Deleted"
302
- click_button "Search"
303
- click_link product.name
304
- expect(page).to_not have_field('Master Price')
305
- expect(page).to_not have_content('Images')
306
- expect(page).to_not have_content('Prices')
307
- expect(page).to_not have_content('Product Properties')
308
- end
309
- end
310
- end
311
-
312
- context 'with only product permissions' do
313
- before do
314
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
315
- end
316
-
317
- custom_authorization! do |_user|
318
- can [:admin, :update, :index, :read], Spree::Product
319
- end
320
- let!(:product) { create(:product) }
321
-
322
- it "should only display accessible links on index" do
323
- visit spree.admin_products_path
324
- expect(page).to have_link('Products')
325
- expect(page).not_to have_link('Option Types')
326
- expect(page).not_to have_link('Properties')
327
-
328
- expect(page).not_to have_link('New Product')
329
- expect(page).not_to have_css('a.clone')
330
- expect(page).to have_css('a.edit')
331
- expect(page).not_to have_css('a.delete-resource')
332
- end
333
-
334
- it "should only display accessible links on edit" do
335
- visit spree.admin_product_path(product)
336
-
337
- # product tabs should be hidden
338
- expect(page).to have_link('Product Details')
339
- expect(page).not_to have_link('Images')
340
- expect(page).not_to have_link('Variants')
341
- expect(page).not_to have_link('Product Properties')
342
- expect(page).not_to have_link('Stock Management')
343
-
344
- # no create permission
345
- expect(page).not_to have_link('New Product')
346
- end
347
- end
348
- end