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,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Properties", 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 "Property index" do
14
- before do
15
- create(:property, name: 'shirt size', presentation: 'size')
16
- create(:property, name: 'shirt fit', presentation: 'fit')
17
- click_link "Property Types"
18
- end
19
-
20
- context "listing product properties" do
21
- it "should list the existing product properties" do
22
- within_row(1) do
23
- expect(column_text(1)).to eq("shirt size")
24
- expect(column_text(2)).to eq("size")
25
- end
26
-
27
- within_row(2) do
28
- expect(column_text(1)).to eq("shirt fit")
29
- expect(column_text(2)).to eq("fit")
30
- end
31
- end
32
- end
33
-
34
- context "searching properties" do
35
- it 'should list properties matching search query', js: true do
36
- fill_in "q_name_cont", with: "size"
37
- click_button 'Search'
38
-
39
- expect(page).to have_content("shirt size")
40
- expect(page).not_to have_content("shirt fit")
41
- end
42
- end
43
- end
44
-
45
- context "creating a property" do
46
- it "should allow an admin to create a new product property", js: true do
47
- click_link "Property Types"
48
- click_link "new_property_link"
49
- within('#new_property') { expect(page).to have_content("New Property Type") }
50
-
51
- fill_in "property_name", with: "color of band"
52
- fill_in "property_presentation", with: "color"
53
- click_button "Create"
54
- expect(page).to have_content("successfully created!")
55
- end
56
- end
57
-
58
- context "editing a property type" do
59
- before(:each) do
60
- create(:property)
61
- click_link "Property Types"
62
- within_row(1) { click_icon :edit }
63
- end
64
-
65
- it "should allow an admin to edit an existing product property" do
66
- fill_in "property_name", with: "model 99"
67
- click_button "Update"
68
- expect(page).to have_content("successfully updated!")
69
- expect(page).to have_content("model 99")
70
- end
71
-
72
- it "should show validation errors" do
73
- fill_in "property_name", with: ""
74
- click_button "Update"
75
- expect(page).to have_content("Name can't be blank")
76
- end
77
- end
78
-
79
- context "linking a property to a product", js: true do
80
- before do
81
- create(:product)
82
- visit spree.admin_products_path
83
- click_icon :edit
84
- click_link "Product Properties"
85
- end
86
-
87
- # Regression test for https://github.com/spree/spree/issues/2279
88
- it "successfully create and then remove product property" do
89
- fill_in_property
90
-
91
- check_property_row_count(2)
92
-
93
- delete_product_property
94
-
95
- check_property_row_count(1)
96
- end
97
-
98
- # Regression test for https://github.com/spree/spree/issues/4466
99
- it "successfully remove and create a product property at the same time" do
100
- fill_in_property
101
-
102
- expect(page).to have_css('tr.product_property', count: 2)
103
-
104
- within '#spree_new_product_property' do
105
- find('[id$=_property_name]').set("New Property")
106
- find('[id$=_value]').set("New Value")
107
- end
108
-
109
- delete_product_property
110
-
111
- # Give fadeOut time to complete
112
- expect(page).to have_css('tr.product_property', count: 1)
113
-
114
- click_button "Update"
115
-
116
- expect(page).not_to have_content("Product is not found")
117
-
118
- check_property_row_count(2)
119
- end
120
-
121
- def fill_in_property
122
- expect(page).to have_content('Products')
123
- fill_in "product_product_properties_attributes_0_property_name", with: "A Property"
124
- fill_in "product_product_properties_attributes_0_value", with: "A Value"
125
- click_button "Update"
126
- click_link "Product Properties"
127
- end
128
-
129
- def delete_product_property
130
- accept_alert do
131
- click_icon :trash
132
- end
133
- expect(page).to have_content 'successfully removed'
134
- end
135
-
136
- def check_property_row_count(expected_row_count)
137
- click_link "Product Properties"
138
- expect(page).to have_css("tbody#product_properties tr", count: expected_row_count)
139
- end
140
- end
141
- end
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Product Stock", type: :feature do
6
- stub_authorization!
7
-
8
- before(:each) do
9
- visit spree.admin_path
10
- end
11
-
12
- context "given a product with a variant and a stock location" do
13
- let!(:stock_location) { create(:stock_location, name: 'Default') }
14
- let!(:product) { create(:product, name: 'apache baseball cap', price: 10) }
15
- let!(:variant) { create(:variant, product: product) }
16
- let(:stock_item) { variant.stock_items.find_by(stock_location: stock_location) }
17
-
18
- before do
19
- stock_location.stock_item(variant).update_column(:count_on_hand, 10)
20
-
21
- click_nav "Products"
22
- within_row(1) { click_icon :edit }
23
- click_link "Product Stock"
24
- end
25
-
26
- # Regression test for https://github.com/spree/spree/issues/3304
27
- # It is OK to still render the stock page, ensure no errors in this case
28
- context "with no stock location" do
29
- before do
30
- Spree::StockLocation.destroy_all
31
- find_by_id('content-header').click_link('Products')
32
- within_row(1) do
33
- click_icon :edit
34
- end
35
- click_link "Product Stock"
36
- end
37
-
38
- it "renders" do
39
- expect(page).to have_content('Productsapache baseball cap')
40
- expect(page.current_url).to match("admin/products/apache-baseball-cap/stock")
41
- end
42
- end
43
-
44
- it "can create a positive stock adjustment", js: true do
45
- adjust_count_on_hand('14')
46
- stock_item.reload
47
- expect(stock_item.count_on_hand).to eq 24
48
- expect(stock_item.stock_movements.count).to eq 1
49
- expect(stock_item.stock_movements.first.quantity).to eq 14
50
- end
51
-
52
- it "can create a negative stock adjustment", js: true do
53
- adjust_count_on_hand('-4')
54
- stock_item.reload
55
- expect(stock_item.count_on_hand).to eq 6
56
- expect(stock_item.stock_movements.count).to eq 1
57
- expect(stock_item.stock_movements.first.quantity).to eq(-4)
58
- end
59
-
60
- it "can toggle backorderable", js: true do
61
- toggle_backorderable(value: false)
62
-
63
- click_link "Product Stock"
64
- within("tr#spree_variant_#{variant.id}") do
65
- expect(find(:css, "input[type='checkbox']")).not_to be_checked
66
- end
67
- end
68
-
69
- def adjust_count_on_hand(count_on_hand)
70
- within("tr#spree_variant_#{variant.id}") do
71
- find(:css, "input[type='number']").set(count_on_hand)
72
- click_icon :check
73
- end
74
- expect(page).to have_content('Updated Successfully')
75
- end
76
-
77
- def toggle_backorderable(value: true)
78
- within("tr#spree_variant_#{variant.id}") do
79
- find(:css, "input[type='checkbox']").set(value)
80
- click_icon :check
81
- end
82
- expect(page).to have_content('Updated Successfully')
83
- end
84
-
85
- context "with stock locations that don't have stock items for variant yet" do
86
- before do
87
- create(:stock_location, name: 'Other location', propagate_all_variants: false)
88
- end
89
-
90
- it "can add stock items to other stock locations", js: true do
91
- visit current_url
92
- within('.variant-stock-items', text: variant.sku) do
93
- fill_in "variant-count-on-hand-#{variant.id}", with: '3'
94
- select "Other location", from: "stock_location_id"
95
- click_icon(:plus)
96
- end
97
- expect(page).to have_content('Created successfully')
98
- end
99
- end
100
- end
101
- end
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Variants", type: :feature do
6
- stub_authorization!
7
-
8
- let(:product) { create(:product_with_option_types, price: "1.99", cost_price: "1.00", weight: "2.5", height: "3.0", width: "1.0", depth: "1.5") }
9
-
10
- context "creating a new variant" do
11
- it "should allow an admin to create a new variant" do
12
- product.options.each do |option|
13
- create(:option_value, option_type: option.option_type)
14
- end
15
-
16
- visit spree.admin_path
17
- click_nav "Products"
18
- within_row(1) { click_icon :edit }
19
- click_link "Variants"
20
- click_on "New Variant"
21
- expect(page).to have_field('variant_price', with: "1.99")
22
- expect(page).to have_field('variant_cost_price', with: "1.00")
23
- expect(page).to have_field('variant_weight', with: "2.50")
24
- expect(page).to have_field('variant_height', with: "3.00")
25
- expect(page).to have_field('variant_width', with: "1.00")
26
- expect(page).to have_field('variant_depth', with: "1.50")
27
- expect(page).to have_select('variant[tax_category_id]')
28
- end
29
- end
30
-
31
- context "listing variants" do
32
- context "currency displaying" do
33
- context "using Russian Rubles" do
34
- before do
35
- stub_spree_preferences(currency: "RUB")
36
- end
37
-
38
- let!(:variant) do
39
- create(:variant, product: product, price: 19.99)
40
- end
41
-
42
- # Regression test for https://github.com/spree/spree/issues/2737
43
- context "uses руб as the currency symbol" do
44
- it "on the products listing page" do
45
- visit spree.admin_product_variants_path(product)
46
- within_row(1) { expect(page).to have_content("19.99 ₽") }
47
- end
48
- end
49
- end
50
- end
51
- end
52
-
53
- context "editing existent variant" do
54
- let!(:variant) { create(:variant, product: product) }
55
-
56
- context "if product has an option type" do
57
- let!(:option_type) { create(:option_type) }
58
- let!(:option_value) { create(:option_value, option_type: option_type) }
59
-
60
- before do
61
- product.option_types << option_type
62
- variant.option_values << option_value
63
- end
64
-
65
- it "page has a field for editing the option value", js: true do
66
- visit spree.edit_admin_product_variant_path(product, variant)
67
- expect(page).to have_css("label", text: option_type.presentation)
68
- expect(page).to have_select('Size', selected: 'S')
69
- end
70
- end
71
- end
72
-
73
- context "deleting a variant", js: true do
74
- let!(:variant) { create(:variant, product: product) }
75
- let!(:option_type) { create(:option_type) }
76
- let!(:option_value) { create(:option_value, option_type: option_type) }
77
-
78
- it "can delete a variant" do
79
- visit spree.admin_product_variants_path(product)
80
- within 'tr', text: 'Size: S' do
81
- accept_alert do
82
- click_icon :trash
83
- end
84
- end
85
-
86
- expect(page).to have_no_text('Size: S')
87
- end
88
- end
89
- end
@@ -1,286 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe "Promotion Adjustments", type: :feature, js: true do
6
- stub_authorization!
7
-
8
- context "creating a new promotion", js: true do
9
- before(:each) do
10
- visit spree.new_admin_promotion_path
11
- expect(page).to have_title("New Promotion - Promotions")
12
- end
13
-
14
- it "should allow an admin to create a flat rate discount coupon promo" do
15
- fill_in "Name", with: "SAVE SAVE SAVE"
16
- fill_in "Promotion Code", with: "order"
17
-
18
- click_button "Create"
19
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
20
-
21
- select "Item Total", from: "Discount Rules"
22
- within('#rule_fields') { click_button "Add" }
23
-
24
- find('[id$=_preferred_amount]').set(30)
25
- within('#rule_fields') { click_button "Update" }
26
-
27
- select "Create whole-order adjustment", from: "Adjustment type"
28
- within('#action_fields') do
29
- click_button "Add"
30
- select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label')
31
- fill_in "Amount", with: 5
32
- end
33
- within('#actions_container') { click_button "Update" }
34
- expect(page).to have_text 'successfully updated'
35
-
36
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
37
- expect(promotion.codes.first.value).to eq("order")
38
-
39
- first_rule = promotion.rules.first
40
- expect(first_rule.class).to eq(Spree::Promotion::Rules::ItemTotal)
41
- expect(first_rule.preferred_amount).to eq(30)
42
-
43
- first_action = promotion.actions.first
44
- expect(first_action.class).to eq(Spree::Promotion::Actions::CreateAdjustment)
45
- first_action_calculator = first_action.calculator
46
- expect(first_action_calculator.class).to eq(Spree::Calculator::FlatRate)
47
- expect(first_action_calculator.preferred_amount).to eq(5)
48
- end
49
-
50
- it "should allow an admin to create a single user coupon promo with flat rate discount" do
51
- fill_in "Name", with: "SAVE SAVE SAVE"
52
- fill_in "promotion[usage_limit]", with: "1"
53
- fill_in "Promotion Code", with: "single_use"
54
-
55
- click_button "Create"
56
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
57
-
58
- select "Create whole-order adjustment", from: "Adjustment type"
59
- within('#action_fields') do
60
- click_button "Add"
61
- select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label')
62
- fill_in "Amount", with: "5"
63
- end
64
- within('#actions_container') { click_button "Update" }
65
- expect(page).to have_text 'successfully updated'
66
-
67
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
68
- expect(promotion.usage_limit).to eq(1)
69
- expect(promotion.codes.first.value).to eq("single_use")
70
-
71
- first_action = promotion.actions.first
72
- expect(first_action.class).to eq(Spree::Promotion::Actions::CreateAdjustment)
73
- first_action_calculator = first_action.calculator
74
- expect(first_action_calculator.class).to eq(Spree::Calculator::FlatRate)
75
- expect(first_action_calculator.preferred_amount).to eq(5)
76
- end
77
-
78
- it "should allow an admin to create an automatic promo with flat percent discount" do
79
- fill_in "Name", with: "SAVE SAVE SAVE"
80
- choose "Apply to all orders"
81
- click_button "Create"
82
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
83
-
84
- select "Item Total", from: "Discount Rules"
85
- within('#rule_fields') { click_button "Add" }
86
-
87
- find('[id$=_preferred_amount]').set(30)
88
- within('#rule_fields') { click_button "Update" }
89
-
90
- select "Create whole-order adjustment", from: "Adjustment type"
91
- within('#action_fields') do
92
- click_button "Add"
93
- select "Flat Percent", from: I18n.t('spree.admin.promotions.actions.calculator_label')
94
- fill_in "Flat Percent", with: "10"
95
- end
96
- within('#actions_container') { click_button "Update" }
97
- expect(page).to have_text 'successfully updated'
98
-
99
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
100
- expect(promotion.codes.first).to be_nil
101
-
102
- first_rule = promotion.rules.first
103
- expect(first_rule.class).to eq(Spree::Promotion::Rules::ItemTotal)
104
- expect(first_rule.preferred_amount).to eq(30)
105
-
106
- first_action = promotion.actions.first
107
- expect(first_action.class).to eq(Spree::Promotion::Actions::CreateAdjustment)
108
- first_action_calculator = first_action.calculator
109
- expect(first_action_calculator.class).to eq(Spree::Calculator::FlatPercentItemTotal)
110
- expect(first_action_calculator.preferred_flat_percent).to eq(10)
111
- end
112
-
113
- it "should allow an admin to create an product promo with percent per item discount" do
114
- create(:product, name: "RoR Mug")
115
-
116
- fill_in "Name", with: "SAVE SAVE SAVE"
117
- choose "Apply to all orders"
118
- click_button "Create"
119
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
120
-
121
- select "Product(s)", from: "Discount Rules"
122
- within("#rule_fields") { click_button "Add" }
123
- select2_search "RoR Mug", from: "Choose products"
124
- within('#rule_fields') { click_button "Update" }
125
-
126
- select "Create per-line-item adjustment", from: "Adjustment type"
127
- within('#action_fields') do
128
- click_button "Add"
129
- select "Percent Per Item", from: I18n.t('spree.admin.promotions.actions.calculator_label')
130
- fill_in "Percent", with: "10"
131
- end
132
- within('#actions_container') { click_button "Update" }
133
- expect(page).to have_text 'successfully updated'
134
-
135
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
136
- expect(promotion.codes.first).to be_nil
137
-
138
- first_rule = promotion.rules.first
139
- expect(first_rule.class).to eq(Spree::Promotion::Rules::Product)
140
- expect(first_rule.products.map(&:name)).to include("RoR Mug")
141
-
142
- first_action = promotion.actions.first
143
- expect(first_action.class).to eq(Spree::Promotion::Actions::CreateItemAdjustments)
144
- first_action_calculator = first_action.calculator
145
- expect(first_action_calculator.class).to eq(Spree::Calculator::PercentOnLineItem)
146
- expect(first_action_calculator.preferred_percent).to eq(10)
147
- end
148
-
149
- it "should allow an admin to create an automatic promotion with free shipping (no code)" do
150
- fill_in "Name", with: "SAVE SAVE SAVE"
151
- choose "Apply to all orders"
152
- click_button "Create"
153
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
154
-
155
- select "Item Total", from: "Discount Rules"
156
- within('#rule_fields') { click_button "Add" }
157
- find('[id$=_preferred_amount]').set(30)
158
- within('#rule_fields') { click_button "Update" }
159
-
160
- select "Free Shipping", from: "Adjustment type"
161
- within('#action_fields') { click_button "Add" }
162
- expect(page).to have_content('Makes all shipments for the order free')
163
-
164
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
165
- expect(promotion.codes).to be_empty
166
- expect(promotion.rules.first).to be_a(Spree::Promotion::Rules::ItemTotal)
167
- expect(promotion.actions.first).to be_a(Spree::Promotion::Actions::FreeShipping)
168
- end
169
-
170
- it "disables the button at submit", :js do
171
- page.execute_script "$('form').submit(function(e) { e.preventDefault()})"
172
- fill_in "Name", with: "SAVE SAVE SAVE"
173
- choose "Apply to all orders"
174
- click_button "Create"
175
-
176
- expect(page).to have_button("Create", disabled: true)
177
- end
178
-
179
- it "should allow an admin to create an automatic promotion" do
180
- fill_in "Name", with: "SAVE SAVE SAVE"
181
- choose "Apply to all orders"
182
- click_button "Create"
183
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
184
-
185
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
186
- expect(promotion).to be_apply_automatically
187
- expect(promotion.path).to be_nil
188
- expect(promotion.codes).to be_empty
189
- expect(promotion.rules).to be_blank
190
- end
191
-
192
- it "should allow an admin to create a promo with generated codes" do
193
- fill_in "Name", with: "SAVE SAVE SAVE"
194
- choose "Multiple promotion codes"
195
- fill_in "Base code", with: "testing"
196
- fill_in "Number of codes", with: "10"
197
-
198
- perform_enqueued_jobs {
199
- click_button "Create"
200
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
201
- }
202
-
203
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
204
- expect(promotion.path).to be_nil
205
- expect(promotion).not_to be_apply_automatically
206
- expect(promotion.rules).to be_blank
207
-
208
- expect(promotion.codes.count).to eq(10)
209
- end
210
-
211
- it "ceasing to be eligible for a promotion with item total rule then becoming eligible again" do
212
- fill_in "Name", with: "SAVE SAVE SAVE"
213
- choose "Apply to all orders"
214
- click_button "Create"
215
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
216
-
217
- select "Item Total", from: "Discount Rules"
218
- within('#rule_fields') { click_button "Add" }
219
- find('[id$=_preferred_amount]').set(50)
220
- within('#rule_fields') { click_button "Update" }
221
-
222
- select "Create whole-order adjustment", from: "Adjustment type"
223
- within('#action_fields') do
224
- click_button "Add"
225
- select "Flat Rate", from: I18n.t('spree.admin.promotions.actions.calculator_label')
226
- fill_in "Amount", with: "5"
227
- end
228
- within('#actions_container') { click_button "Update" }
229
- expect(page).to have_text 'successfully updated'
230
-
231
- promotion = Spree::Promotion.find_by(name: "SAVE SAVE SAVE")
232
-
233
- first_rule = promotion.rules.first
234
- expect(first_rule.class).to eq(Spree::Promotion::Rules::ItemTotal)
235
- expect(first_rule.preferred_amount).to eq(50)
236
-
237
- first_action = promotion.actions.first
238
- expect(first_action.class).to eq(Spree::Promotion::Actions::CreateAdjustment)
239
- expect(first_action.calculator.class).to eq(Spree::Calculator::FlatRate)
240
- expect(first_action.calculator.preferred_amount).to eq(5)
241
- end
242
-
243
- context 'creating a promotion with promotion action that has a calculator with complex preferences' do
244
- before do
245
- class ComplexCalculator < Spree::Calculator
246
- preference :amount, :decimal
247
- preference :currency, :string
248
- preference :mapping, :hash
249
- preference :list, :array
250
-
251
- def self.description
252
- "Complex Calculator"
253
- end
254
- end
255
- @calculators = Rails.application.config.spree.calculators.promotion_actions_create_item_adjustments
256
- Rails.application.config.spree.calculators.promotion_actions_create_item_adjustments = [ComplexCalculator]
257
- end
258
-
259
- after do
260
- Rails.application.config.spree.calculators.promotion_actions_create_item_adjustments = @calculators
261
- end
262
-
263
- it "does not show array and hash form fields" do
264
- fill_in "Name", with: "SAVE SAVE SAVE"
265
- choose "Apply to all orders"
266
- click_button "Create"
267
- expect(page).to have_title("SAVE SAVE SAVE - Promotions")
268
-
269
- select "Create per-line-item adjustment", from: "Adjustment type"
270
- within('#action_fields') do
271
- click_button "Add"
272
- select "Complex Calculator", from: I18n.t('spree.admin.promotions.actions.calculator_label')
273
- end
274
- within('#actions_container') { click_button "Update" }
275
- expect(page).to have_text 'successfully updated'
276
-
277
- within('#action_fields') do
278
- expect(page).to have_field('Amount')
279
- expect(page).to have_field('Currency')
280
- expect(page).to_not have_field('Mapping')
281
- expect(page).to_not have_field('List')
282
- end
283
- end
284
- end
285
- end
286
- end