solidus_core 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 (575) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/helpers/spree/base_helper.rb +4 -4
  5. data/app/helpers/spree/products_helper.rb +2 -1
  6. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  7. data/app/mailers/spree/base_mailer.rb +4 -0
  8. data/app/mailers/spree/order_mailer.rb +1 -1
  9. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  10. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  11. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  12. data/app/models/concerns/spree/default_price.rb +1 -1
  13. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  14. data/app/models/concerns/spree/user_address_book.rb +87 -33
  15. data/app/models/concerns/spree/user_methods.rb +5 -4
  16. data/app/models/spree/ability.rb +34 -10
  17. data/app/models/spree/address.rb +103 -30
  18. data/app/models/spree/address/name.rb +49 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/adjustment.rb +21 -10
  21. data/app/models/spree/asset.rb +1 -1
  22. data/app/models/spree/base.rb +1 -2
  23. data/app/models/spree/calculator.rb +1 -1
  24. data/app/models/spree/calculator/default_tax.rb +1 -1
  25. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  26. data/app/models/spree/calculator/price_sack.rb +1 -1
  27. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  28. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  29. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  30. data/app/models/spree/carton.rb +3 -3
  31. data/app/models/spree/classification.rb +2 -2
  32. data/app/models/spree/credit_card.rb +6 -6
  33. data/app/models/spree/customer_return.rb +5 -3
  34. data/app/models/spree/exchange.rb +1 -1
  35. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  36. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  37. data/app/models/spree/inventory_unit.rb +5 -23
  38. data/app/models/spree/line_item.rb +16 -7
  39. data/app/models/spree/line_item_action.rb +2 -2
  40. data/app/models/spree/log_entry.rb +1 -1
  41. data/app/models/spree/option_type.rb +1 -1
  42. data/app/models/spree/option_value.rb +3 -3
  43. data/app/models/spree/option_values_variant.rb +2 -2
  44. data/app/models/spree/order.rb +85 -30
  45. data/app/models/spree/order/checkout.rb +2 -1
  46. data/app/models/spree/order/payments.rb +2 -2
  47. data/app/models/spree/order_cancellations.rb +1 -1
  48. data/app/models/spree/order_capturing.rb +2 -2
  49. data/app/models/spree/order_contents.rb +2 -2
  50. data/app/models/spree/order_inventory.rb +16 -4
  51. data/app/models/spree/order_merger.rb +6 -4
  52. data/app/models/spree/order_mutex.rb +1 -1
  53. data/app/models/spree/order_promotion.rb +4 -4
  54. data/app/models/spree/order_shipping.rb +1 -1
  55. data/app/models/spree/order_taxation.rb +3 -3
  56. data/app/models/spree/order_updater.rb +11 -10
  57. data/app/models/spree/payment.rb +10 -47
  58. data/app/models/spree/payment/cancellation.rb +3 -3
  59. data/app/models/spree/payment/processing.rb +57 -33
  60. data/app/models/spree/payment_capture_event.rb +1 -1
  61. data/app/models/spree/payment_method.rb +13 -11
  62. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  63. data/app/models/spree/payment_source.rb +1 -1
  64. data/app/models/spree/preference.rb +1 -1
  65. data/app/models/spree/price.rb +3 -9
  66. data/app/models/spree/product.rb +24 -19
  67. data/app/models/spree/product/scopes.rb +223 -210
  68. data/app/models/spree/product_option_type.rb +2 -2
  69. data/app/models/spree/product_promotion_rule.rb +2 -2
  70. data/app/models/spree/product_property.rb +2 -2
  71. data/app/models/spree/promotion.rb +46 -20
  72. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  73. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  74. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  75. data/app/models/spree/promotion/rules/product.rb +3 -3
  76. data/app/models/spree/promotion_action.rb +3 -9
  77. data/app/models/spree/promotion_chooser.rb +2 -2
  78. data/app/models/spree/promotion_code.rb +17 -11
  79. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  80. data/app/models/spree/promotion_code_batch.rb +2 -2
  81. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  82. data/app/models/spree/promotion_rule.rb +3 -3
  83. data/app/models/spree/promotion_rule_role.rb +3 -3
  84. data/app/models/spree/promotion_rule_store.rb +2 -2
  85. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  86. data/app/models/spree/promotion_rule_user.rb +2 -2
  87. data/app/models/spree/refund.rb +59 -17
  88. data/app/models/spree/reimbursement.rb +32 -13
  89. data/app/models/spree/reimbursement/credit.rb +2 -2
  90. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  91. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  92. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +12 -5
  93. data/app/models/spree/return_authorization.rb +5 -11
  94. data/app/models/spree/return_item.rb +33 -61
  95. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  96. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  97. data/app/models/spree/role.rb +1 -1
  98. data/app/models/spree/role_user.rb +2 -2
  99. data/app/models/spree/shipment.rb +9 -43
  100. data/app/models/spree/shipping_calculator.rb +1 -5
  101. data/app/models/spree/shipping_manifest.rb +5 -5
  102. data/app/models/spree/shipping_method.rb +3 -10
  103. data/app/models/spree/shipping_method_category.rb +2 -2
  104. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  105. data/app/models/spree/shipping_method_zone.rb +2 -2
  106. data/app/models/spree/shipping_rate.rb +2 -2
  107. data/app/models/spree/shipping_rate_tax.rb +3 -3
  108. data/app/models/spree/state.rb +2 -2
  109. data/app/models/spree/state_change.rb +2 -2
  110. data/app/models/spree/stock/differentiator.rb +1 -1
  111. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  112. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  113. data/app/models/spree/stock/package.rb +2 -2
  114. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  115. data/app/models/spree/stock_item.rb +4 -10
  116. data/app/models/spree/stock_location.rb +2 -2
  117. data/app/models/spree/stock_movement.rb +4 -2
  118. data/app/models/spree/stock_quantities.rb +13 -12
  119. data/app/models/spree/store.rb +1 -1
  120. data/app/models/spree/store_credit.rb +9 -15
  121. data/app/models/spree/store_credit_category.rb +30 -3
  122. data/app/models/spree/store_credit_event.rb +4 -10
  123. data/app/models/spree/store_credit_reason.rb +0 -4
  124. data/app/models/spree/store_payment_method.rb +2 -2
  125. data/app/models/spree/store_shipping_method.rb +2 -2
  126. data/app/models/spree/tax/tax_helpers.rb +1 -1
  127. data/app/models/spree/tax_calculator/default.rb +0 -4
  128. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  129. data/app/models/spree/tax_category.rb +2 -8
  130. data/app/models/spree/tax_rate.rb +12 -8
  131. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  132. data/app/models/spree/taxon.rb +1 -1
  133. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  134. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  135. data/app/models/spree/unit_cancel.rb +5 -2
  136. data/app/models/spree/user_address.rb +10 -4
  137. data/app/models/spree/user_last_url_storer.rb +46 -0
  138. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  139. data/app/models/spree/user_stock_location.rb +2 -2
  140. data/app/models/spree/variant.rb +17 -23
  141. data/app/models/spree/variant/scopes.rb +37 -29
  142. data/app/models/spree/variant_property_rule.rb +6 -2
  143. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  144. data/app/models/spree/variant_property_rule_value.rb +2 -2
  145. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +9 -4
  146. data/app/models/spree/wallet_payment_source.rb +2 -2
  147. data/app/models/spree/zone.rb +2 -2
  148. data/app/models/spree/zone_member.rb +2 -2
  149. data/config/initializers/inflections.rb +5 -0
  150. data/config/initializers/money.rb +2 -0
  151. data/config/locales/en.yml +78 -8
  152. data/db/default/spree/countries.rb +1 -1
  153. data/db/default/spree/states.rb +12 -4
  154. data/db/default/spree/store_credit.rb +2 -2
  155. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  156. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  157. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  158. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  159. data/lib/generators/solidus/install/install_generator.rb +253 -0
  160. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +42 -3
  161. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  162. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  163. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  164. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  165. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  166. data/lib/generators/spree/install/install_generator.rb +7 -189
  167. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  168. data/lib/spree/app_configuration.rb +135 -54
  169. data/lib/spree/awesome_nested_set_override.rb +44 -0
  170. data/lib/spree/core.rb +6 -0
  171. data/lib/spree/core/controller_helpers/auth.rb +18 -17
  172. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  173. data/lib/spree/core/controller_helpers/order.rb +8 -7
  174. data/lib/spree/core/engine.rb +41 -4
  175. data/lib/spree/core/importer/order.rb +47 -33
  176. data/lib/spree/core/importer/product.rb +2 -2
  177. data/lib/spree/core/permalinks.rb +1 -3
  178. data/lib/spree/core/product_filters.rb +16 -15
  179. data/lib/spree/core/role_configuration.rb +2 -2
  180. data/lib/spree/core/search/variant.rb +1 -1
  181. data/lib/spree/core/state_machines.rb +97 -0
  182. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  183. data/lib/spree/core/state_machines/order.rb +249 -0
  184. data/lib/spree/core/state_machines/payment.rb +61 -0
  185. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  186. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  187. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  188. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  189. data/lib/spree/core/state_machines/shipment.rb +58 -0
  190. data/lib/spree/core/stock_configuration.rb +1 -0
  191. data/lib/spree/core/validators/email.rb +1 -8
  192. data/lib/spree/core/version.rb +1 -1
  193. data/lib/spree/encryptor.rb +25 -0
  194. data/lib/spree/event.rb +40 -7
  195. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  196. data/lib/spree/event/configuration.rb +11 -6
  197. data/lib/spree/event/subscriber.rb +38 -18
  198. data/lib/spree/event/subscriber_registry.rb +92 -0
  199. data/lib/spree/i18n.rb +1 -1
  200. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  201. data/lib/spree/money.rb +2 -2
  202. data/lib/spree/paranoia_deprecations.rb +32 -12
  203. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  204. data/lib/spree/permission_sets/default_customer.rb +16 -16
  205. data/lib/spree/permission_sets/order_display.rb +11 -11
  206. data/lib/spree/permission_sets/order_management.rb +1 -1
  207. data/lib/spree/permission_sets/product_display.rb +9 -9
  208. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  209. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  210. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  211. data/lib/spree/permission_sets/stock_display.rb +2 -2
  212. data/lib/spree/permission_sets/stock_management.rb +1 -1
  213. data/lib/spree/permission_sets/user_display.rb +3 -3
  214. data/lib/spree/permission_sets/user_management.rb +7 -3
  215. data/lib/spree/permitted_attributes.rb +7 -6
  216. data/lib/spree/preferences/preferable.rb +4 -3
  217. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  218. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  219. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  220. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  221. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  222. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  223. data/lib/spree/testing_support/common_rake.rb +3 -3
  224. data/lib/spree/testing_support/dummy_app.rb +45 -21
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -4
  227. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  228. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  229. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  230. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  232. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  233. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  234. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  236. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  237. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  239. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  240. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  241. data/lib/spree/testing_support/job_helpers.rb +24 -0
  242. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  243. data/lib/spree/testing_support/preferences.rb +3 -1
  244. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  245. data/lib/spree/testing_support/translations.rb +25 -0
  246. data/solidus_core.gemspec +12 -9
  247. metadata +120 -393
  248. data/script/rails +0 -10
  249. data/spec/fixtures/thinking-cat.jpg +0 -0
  250. data/spec/helpers/base_helper_spec.rb +0 -168
  251. data/spec/helpers/products_helper_spec.rb +0 -202
  252. data/spec/helpers/taxons_helper_spec.rb +0 -43
  253. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  254. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  255. data/spec/lib/i18n_spec.rb +0 -97
  256. data/spec/lib/search/base_spec.rb +0 -87
  257. data/spec/lib/search/variant_spec.rb +0 -115
  258. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  259. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  260. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  261. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  262. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  263. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  264. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  265. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  266. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  267. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  268. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  269. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  270. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  271. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -59
  272. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  273. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  274. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  276. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  279. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  280. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  281. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  284. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  286. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  288. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  289. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  290. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  291. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  292. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  295. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  296. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  300. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  301. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  302. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  303. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  305. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  306. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  307. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  308. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  309. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  310. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  311. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  312. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  313. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  314. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  316. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  317. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  319. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  323. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  325. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  326. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  328. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  330. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  331. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  332. data/spec/lib/spree/core/version_spec.rb +0 -19
  333. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  334. data/spec/lib/spree/event_spec.rb +0 -118
  335. data/spec/lib/spree/localized_number_spec.rb +0 -45
  336. data/spec/lib/spree/migrations_spec.rb +0 -32
  337. data/spec/lib/spree/money_spec.rb +0 -298
  338. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  339. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  340. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  341. data/spec/lib/tasks/dummy_task.rake +0 -12
  342. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  343. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  344. data/spec/mailers/carton_mailer_spec.rb +0 -44
  345. data/spec/mailers/order_mailer_spec.rb +0 -117
  346. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  347. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  348. data/spec/mailers/test_mailer_spec.rb +0 -13
  349. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  350. data/spec/models/spree/ability_spec.rb +0 -279
  351. data/spec/models/spree/address_spec.rb +0 -376
  352. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  353. data/spec/models/spree/adjustment_spec.rb +0 -339
  354. data/spec/models/spree/asset_spec.rb +0 -25
  355. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  356. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  357. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  358. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  359. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  360. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  361. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  362. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  363. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  364. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  365. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  366. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  367. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  368. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  369. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -35
  370. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  371. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  372. data/spec/models/spree/calculator_spec.rb +0 -43
  373. data/spec/models/spree/carton_spec.rb +0 -137
  374. data/spec/models/spree/classification_spec.rb +0 -114
  375. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  376. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  377. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  378. data/spec/models/spree/concerns/user_methods_spec.rb +0 -121
  379. data/spec/models/spree/country_spec.rb +0 -154
  380. data/spec/models/spree/credit_card_spec.rb +0 -373
  381. data/spec/models/spree/customer_return_spec.rb +0 -294
  382. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  383. data/spec/models/spree/exchange_spec.rb +0 -76
  384. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  385. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  386. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  387. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  388. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  389. data/spec/models/spree/gateway_spec.rb +0 -14
  390. data/spec/models/spree/image_spec.rb +0 -25
  391. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  392. data/spec/models/spree/line_item_spec.rb +0 -240
  393. data/spec/models/spree/option_type_spec.rb +0 -16
  394. data/spec/models/spree/option_value_spec.rb +0 -52
  395. data/spec/models/spree/order/address_spec.rb +0 -52
  396. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  397. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  398. data/spec/models/spree/order/checkout_spec.rb +0 -740
  399. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  400. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  401. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  402. data/spec/models/spree/order/payment_spec.rb +0 -280
  403. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  404. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  405. data/spec/models/spree/order/totals_spec.rb +0 -26
  406. data/spec/models/spree/order/updating_spec.rb +0 -18
  407. data/spec/models/spree/order/validations_spec.rb +0 -17
  408. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  409. data/spec/models/spree/order_capturing_spec.rb +0 -16
  410. data/spec/models/spree/order_contents_spec.rb +0 -362
  411. data/spec/models/spree/order_inventory_spec.rb +0 -285
  412. data/spec/models/spree/order_merger_spec.rb +0 -162
  413. data/spec/models/spree/order_mutex_spec.rb +0 -89
  414. data/spec/models/spree/order_promotion_spec.rb +0 -33
  415. data/spec/models/spree/order_shipping_spec.rb +0 -247
  416. data/spec/models/spree/order_spec.rb +0 -1694
  417. data/spec/models/spree/order_taxation_spec.rb +0 -128
  418. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  419. data/spec/models/spree/order_updater_spec.rb +0 -555
  420. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  421. data/spec/models/spree/payment_create_spec.rb +0 -205
  422. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  423. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  424. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  425. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  426. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  427. data/spec/models/spree/payment_method_spec.rb +0 -408
  428. data/spec/models/spree/payment_spec.rb +0 -1270
  429. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  430. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  431. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  432. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  433. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  434. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  435. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  436. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  437. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  438. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  439. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  440. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  441. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  442. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  443. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  444. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -56
  445. data/spec/models/spree/preference_spec.rb +0 -79
  446. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  447. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  448. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  449. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  450. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  451. data/spec/models/spree/preferences/store_spec.rb +0 -40
  452. data/spec/models/spree/price_spec.rb +0 -150
  453. data/spec/models/spree/product/scopes_spec.rb +0 -164
  454. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  455. data/spec/models/spree/product_filter_spec.rb +0 -28
  456. data/spec/models/spree/product_property_spec.rb +0 -20
  457. data/spec/models/spree/product_spec.rb +0 -584
  458. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  459. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  460. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  461. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  462. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  463. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  464. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  465. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  466. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  467. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  468. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  469. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  470. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  471. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  472. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  473. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  474. data/spec/models/spree/promotion_action_spec.rb +0 -44
  475. data/spec/models/spree/promotion_category_spec.rb +0 -19
  476. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  477. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  478. data/spec/models/spree/promotion_code_spec.rb +0 -206
  479. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  480. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  481. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  482. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  483. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  484. data/spec/models/spree/promotion_spec.rb +0 -928
  485. data/spec/models/spree/refund_spec.rb +0 -200
  486. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  487. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  488. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  489. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  490. data/spec/models/spree/reimbursement_spec.rb +0 -278
  491. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  492. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  493. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  494. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  495. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  496. data/spec/models/spree/return_authorization_spec.rb +0 -226
  497. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  498. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  499. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  500. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  501. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  502. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  503. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  504. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  505. data/spec/models/spree/return_item_spec.rb +0 -785
  506. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  507. data/spec/models/spree/shipment_spec.rb +0 -914
  508. data/spec/models/spree/shipping_calculator_spec.rb +0 -57
  509. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  510. data/spec/models/spree/shipping_method_spec.rb +0 -260
  511. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  512. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  513. data/spec/models/spree/state_spec.rb +0 -43
  514. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  515. data/spec/models/spree/stock/availability_spec.rb +0 -143
  516. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  517. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  518. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  519. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  520. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  521. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  522. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  523. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  524. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  525. data/spec/models/spree/stock/package_spec.rb +0 -182
  526. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  527. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  528. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  529. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  530. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  531. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  532. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  533. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  534. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  535. data/spec/models/spree/stock_item_spec.rb +0 -348
  536. data/spec/models/spree/stock_location_spec.rb +0 -288
  537. data/spec/models/spree/stock_movement_spec.rb +0 -58
  538. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  539. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  540. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  541. data/spec/models/spree/store_credit_spec.rb +0 -900
  542. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  543. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  544. data/spec/models/spree/store_spec.rb +0 -156
  545. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  546. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  547. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  548. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  549. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  550. data/spec/models/spree/tax_category_spec.rb +0 -50
  551. data/spec/models/spree/tax_rate_spec.rb +0 -316
  552. data/spec/models/spree/taxon_spec.rb +0 -197
  553. data/spec/models/spree/taxonomy_spec.rb +0 -15
  554. data/spec/models/spree/unit_cancel_spec.rb +0 -121
  555. data/spec/models/spree/user_spec.rb +0 -247
  556. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  557. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  558. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  559. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  560. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  561. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  562. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  563. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  564. data/spec/models/spree/variant_spec.rb +0 -862
  565. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  566. data/spec/models/spree/wallet_spec.rb +0 -155
  567. data/spec/models/spree/zone_spec.rb +0 -248
  568. data/spec/rails_helper.rb +0 -46
  569. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  570. data/spec/spec_helper.rb +0 -36
  571. data/spec/support/big_decimal.rb +0 -7
  572. data/spec/support/concerns/default_price.rb +0 -44
  573. data/spec/support/concerns/payment_source.rb +0 -66
  574. data/spec/support/concerns/working_factories.rb +0 -15
  575. data/spec/support/dummy_ability.rb +0 -7
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Actions::CreateAdjustment, type: :model do
6
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
7
- let(:promotion) { create(:promotion) }
8
- let(:action) { Spree::Promotion::Actions::CreateAdjustment.new }
9
- let(:payload) { { order: order } }
10
-
11
- # From promotion spec:
12
- context "#perform" do
13
- before do
14
- action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
15
- promotion.promotion_actions = [action]
16
- allow(action).to receive_messages(promotion: promotion)
17
- end
18
-
19
- it "does apply an adjustment if the amount is 0" do
20
- action.calculator.preferred_amount = 0
21
- action.perform(payload)
22
- expect(order.adjustments.count).to eq(1)
23
- end
24
-
25
- it "should create a discount with correct negative amount" do
26
- order.shipments.create!(cost: 10)
27
-
28
- action.perform(payload)
29
- expect(promotion.usage_count).to eq(0)
30
- expect(order.adjustments.count).to eq(1)
31
- expect(order.adjustments.first.amount.to_i).to eq(-10)
32
- end
33
-
34
- it "should create a discount accessible through both order_id and adjustable_id" do
35
- action.perform(payload)
36
- expect(order.adjustments.count).to eq(1)
37
- expect(order.all_adjustments.count).to eq(1)
38
- end
39
-
40
- it "should not create a discount when order already has one from this promotion" do
41
- order.shipments.create!(cost: 10)
42
-
43
- action.perform(payload)
44
- action.perform(payload)
45
- expect(promotion.usage_count).to eq(0)
46
- expect(order.adjustments.count).to eq(1)
47
- end
48
-
49
- context "when a promotion code is used" do
50
- let(:promotion_code) { create(:promotion_code) }
51
- let(:promotion) { promotion_code.promotion }
52
- let(:payload) { { order: order, promotion_code: promotion_code } }
53
-
54
- it "should connect the adjustment to the promotion_code" do
55
- expect {
56
- action.perform(payload)
57
- }.to change { order.adjustments.count }.by(1)
58
- expect(order.adjustments.last.promotion_code).to eq promotion_code
59
- end
60
- end
61
- end
62
-
63
- describe '#remove_from' do
64
- let(:action) { promotion.actions.first! }
65
- let(:promotion) { create(:promotion, :with_order_adjustment) }
66
-
67
- let!(:unrelated_adjustment) { create(:adjustment, order: order, source: nil) }
68
-
69
- before do
70
- action.perform(payload)
71
- @action_adjustment = order.adjustments.where(source: action).first!
72
- end
73
-
74
- it 'removes the action adjustment' do
75
- expect(order.adjustments).to match_array([unrelated_adjustment, @action_adjustment])
76
-
77
- action.remove_from(order)
78
-
79
- expect(order.adjustments).to eq([unrelated_adjustment])
80
- end
81
- end
82
-
83
- shared_examples "destroying adjustments from incomplete orders" do
84
- before(:each) do
85
- action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
86
- promotion.promotion_actions = [action]
87
- end
88
-
89
- context "when order is not complete" do
90
- it "should not keep the adjustment" do
91
- action.perform(payload)
92
- subject
93
- expect(order.adjustments.count).to eq(0)
94
- end
95
- end
96
-
97
- context "when order is complete" do
98
- let(:order) do
99
- create(:completed_order_with_totals, line_items_count: 1)
100
- end
101
-
102
- before(:each) do
103
- action.perform(payload)
104
- subject
105
- end
106
-
107
- it "should keep the adjustment" do
108
- expect(order.adjustments.count).to eq(1)
109
- end
110
-
111
- it "should nullify the adjustment source" do
112
- expect(order.adjustments.reload.first.source).to be_nil
113
- end
114
- end
115
- end
116
-
117
- context "#discard" do
118
- subject { action.discard }
119
- it_should_behave_like "destroying adjustments from incomplete orders"
120
- end
121
-
122
- context "#paranoia_destroy" do
123
- subject { Spree::Deprecation.silence { action.paranoia_destroy } }
124
- it_should_behave_like "destroying adjustments from incomplete orders"
125
- end
126
- end
@@ -1,198 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Promotion::Actions::CreateItemAdjustments, type: :model do
7
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
8
- let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: adjustment_amount) }
9
- let(:adjustment_amount) { 10 }
10
- let(:action) { promotion.actions.first! }
11
- let(:line_item) { order.line_items.to_a.first }
12
- let(:payload) { { order: order, promotion: promotion } }
13
-
14
- before do
15
- allow(action).to receive(:promotion).and_return(promotion)
16
- promotion.promotion_actions = [action]
17
- end
18
-
19
- context "#perform" do
20
- # Regression test for https://github.com/spree/spree/issues/3966
21
- context "when calculator computes 0" do
22
- let(:adjustment_amount) { 0 }
23
-
24
- it "does not create an adjustment when calculator returns 0" do
25
- action.perform(payload)
26
- expect(action.adjustments).to be_empty
27
- end
28
- end
29
-
30
- context "when calculator returns a non-zero value" do
31
- let(:adjustment_amount) { 10 }
32
-
33
- it "creates adjustment with item as adjustable" do
34
- action.perform(payload)
35
- expect(action.adjustments.count).to eq(1)
36
- expect(line_item.adjustments).to eq(action.adjustments)
37
- end
38
-
39
- it "creates adjustment with self as source" do
40
- action.perform(payload)
41
- expect(line_item.adjustments.first.source).to eq action
42
- end
43
-
44
- it "does not perform twice on the same item" do
45
- 2.times { action.perform(payload) }
46
- expect(action.adjustments.count).to eq(1)
47
- end
48
-
49
- context "with products rules" do
50
- let(:rule) { double Spree::Promotion::Rules::Product }
51
-
52
- before { allow(promotion).to receive(:eligible_rules) { [rule] } }
53
-
54
- context "when the rule is actionable" do
55
- before { allow(rule).to receive(:actionable?).and_return(true) }
56
-
57
- it "creates an adjustment" do
58
- expect {
59
- expect {
60
- action.perform(payload)
61
- }.to change { action.adjustments.count }.by(1)
62
- }.to change { line_item.adjustments.count }.by(1)
63
-
64
- expect(action.adjustments.last).to eq line_item.adjustments.last
65
- end
66
- end
67
-
68
- context "when the rule is not actionable" do
69
- before { allow(rule).to receive(:actionable?).and_return(false) }
70
-
71
- it "does not create an adjustment" do
72
- expect {
73
- expect {
74
- action.perform(payload)
75
- }.to_not change { action.adjustments.count }
76
- }.to_not change { line_item.adjustments.count }
77
- end
78
- end
79
- end
80
-
81
- context "when a promotion code is used" do
82
- let!(:promotion_code) { create(:promotion_code, promotion: promotion) }
83
- let(:payload) { { order: order, promotion: promotion, promotion_code: promotion_code } }
84
-
85
- it "should connect the adjustment to the promotion_code" do
86
- expect {
87
- action.perform(payload)
88
- }.to change { line_item.adjustments.count }.by(1)
89
- expect(line_item.adjustments.last.promotion_code).to eq promotion_code
90
- end
91
- end
92
- end
93
- end
94
-
95
- context "#compute_amount" do
96
- before { promotion.promotion_actions = [action] }
97
-
98
- context "when the adjustable is actionable" do
99
- it "calls compute on the calculator" do
100
- expect(action.calculator).to receive(:compute).with(line_item).and_call_original
101
- action.compute_amount(line_item)
102
- end
103
-
104
- context "calculator returns amount greater than item total" do
105
- before do
106
- action.calculator.preferred_amount = 300
107
- allow(line_item).to receive_messages(amount: 100)
108
- end
109
-
110
- it "does not exceed it" do
111
- expect(action.compute_amount(line_item)).to eql(-100)
112
- end
113
- end
114
- end
115
-
116
- context "when the adjustable is not actionable" do
117
- before { allow(promotion).to receive(:line_item_actionable?) { false } }
118
-
119
- it 'returns 0' do
120
- expect(action.compute_amount(line_item)).to eql(0)
121
- end
122
- end
123
- end
124
-
125
- describe '#remove_from' do
126
- # this adjustment should not get removed
127
- let!(:other_adjustment) { create(:adjustment, adjustable: line_item, order: order, source: nil) }
128
-
129
- before do
130
- action.perform(payload)
131
- @action_adjustment = line_item.adjustments.where(source: action).first!
132
- end
133
-
134
- it 'removes the action adjustment' do
135
- expect(line_item.adjustments).to match_array([other_adjustment, @action_adjustment])
136
-
137
- action.remove_from(order)
138
-
139
- expect(line_item.adjustments).to eq([other_adjustment])
140
- end
141
- end
142
-
143
- shared_examples "destroying adjustments from incomplete orders" do
144
- let!(:action) { promotion.actions.first }
145
- let(:other_action) { other_promotion.actions.first }
146
- let(:promotion) { create(:promotion, :with_line_item_adjustment) }
147
- let(:other_promotion) { create(:promotion, :with_line_item_adjustment) }
148
-
149
- context 'with incomplete orders' do
150
- let(:order) { create(:order) }
151
-
152
- it 'destroys adjustments' do
153
- order.adjustments.create!(label: 'Check', amount: 0, order: order, source: action)
154
-
155
- expect {
156
- subject
157
- }.to change { Adjustment.count }.by(-1)
158
- end
159
- end
160
-
161
- context 'with complete orders' do
162
- let(:order) { create(:completed_order_with_totals) }
163
-
164
- it "does not change adjustments for completed orders" do
165
- order = create :order, completed_at: Time.current
166
- adjustment = action.adjustments.create!(label: "Check", amount: 0, order: order, adjustable: order)
167
-
168
- expect {
169
- expect {
170
- subject
171
- }.not_to change { adjustment.reload.source_id }
172
- }.not_to change { Spree::Adjustment.count }
173
-
174
- expect(adjustment.source).to eq(nil)
175
- expect(Spree::PromotionAction.with_deleted.find(adjustment.source_id)).to be_present
176
- end
177
-
178
- it "doesnt mess with unrelated adjustments" do
179
- order.adjustments.create!(label: "Check", amount: 0, order: order, source: action)
180
-
181
- expect {
182
- subject
183
- }.not_to change { other_action.adjustments.count }
184
- end
185
- end
186
- end
187
-
188
- describe "#discard" do
189
- subject { action.discard }
190
- it_should_behave_like "destroying adjustments from incomplete orders"
191
- end
192
-
193
- describe "#paranoia_destroy" do
194
- subject { Spree::Deprecation.silence { action.paranoia_destroy } }
195
- it_should_behave_like "destroying adjustments from incomplete orders"
196
- end
197
- end
198
- end
@@ -1,298 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails_helper"
4
-
5
- module Spree::Promotion::Actions
6
- RSpec.describe CreateQuantityAdjustments do
7
- let(:action) { CreateQuantityAdjustments.create!(calculator: calculator, promotion: promotion) }
8
-
9
- let(:order) do
10
- create(
11
- :order_with_line_items,
12
- line_items_attributes: line_items_attributes
13
- )
14
- end
15
-
16
- let(:line_items_attributes) do
17
- [
18
- { price: 10, quantity: quantity }
19
- ]
20
- end
21
-
22
- let(:quantity) { 1 }
23
- let(:promotion) { FactoryBot.create :promotion }
24
-
25
- describe "#compute_amount" do
26
- subject { action.compute_amount(line_item) }
27
-
28
- context "with a flat rate adjustment" do
29
- let(:calculator) { FactoryBot.create :flat_rate_calculator, preferred_amount: 5 }
30
-
31
- context "with a quantity group of 2" do
32
- let(:line_item) { order.line_items.first }
33
-
34
- before { action.preferred_group_size = 2 }
35
-
36
- context "and an item with a quantity of 0" do
37
- let(:quantity) { 0 }
38
- it { is_expected.to eq 0 }
39
- end
40
-
41
- context "and an item with a quantity of 1" do
42
- let(:quantity) { 1 }
43
- it { is_expected.to eq 0 }
44
- end
45
-
46
- context "and an item with a quantity of 2" do
47
- let(:quantity) { 2 }
48
- it { is_expected.to eq(-10) }
49
- end
50
-
51
- context "and an item with a quantity of 3" do
52
- let(:quantity) { 3 }
53
- it { is_expected.to eq(-10) }
54
- end
55
-
56
- context "and an item with a quantity of 4" do
57
- let(:quantity) { 4 }
58
- it { is_expected.to eq(-20) }
59
- end
60
- end
61
-
62
- context "with a quantity group of 3" do
63
- before { action.preferred_group_size = 3 }
64
-
65
- context "and 2x item A, 1x item B and 1x item C" do
66
- let(:line_items_attributes) do
67
- [
68
- { price: 10, quantity: 2 },
69
- { price: 10, quantity: 1 },
70
- { price: 10, quantity: 1 },
71
- ]
72
- end
73
-
74
- before { action.perform({ order: order, promotion: promotion }) }
75
-
76
- describe "the adjustment for the first item" do
77
- let(:line_item) { order.line_items.first }
78
- it { is_expected.to eq(-10) }
79
- end
80
- describe "the adjustment for the second item" do
81
- let(:line_item) { order.line_items.second }
82
- it { is_expected.to eq(-5) }
83
- end
84
- describe "the adjustment for the third item" do
85
- let(:line_item) { order.line_items.third }
86
- it { is_expected.to eq 0 }
87
- end
88
- end
89
- end
90
-
91
- context "with multiple orders using the same action" do
92
- let(:other_order) do
93
- create(
94
- :order_with_line_items,
95
- line_items_attributes: [
96
- { quantity: 3 }
97
- ]
98
- )
99
- end
100
-
101
- let(:line_item) { other_order.line_items.first }
102
-
103
- before do
104
- action.preferred_group_size = 2
105
- action.perform({ order: other_order, promotion: promotion })
106
- end
107
-
108
- it { is_expected.to eq(-10) }
109
- end
110
- end
111
-
112
- context "with a percentage based adjustment" do
113
- let(:calculator) { FactoryBot.create :percent_on_item_calculator, preferred_percent: 10 }
114
-
115
- let(:line_items_attributes) do
116
- [
117
- { price: 10, quantity: 1 }.merge(line_one_options),
118
- { price: 10, quantity: 1 }.merge(line_two_options),
119
- ]
120
- end
121
-
122
- let(:line_one_options) { {} }
123
- let(:line_two_options) { {} }
124
-
125
- context "with a quantity group of 3" do
126
- before do
127
- action.preferred_group_size = 3
128
- action.perform({ order: order, promotion: promotion })
129
- end
130
-
131
- context "and 2x item A and 1x item B" do
132
- let(:line_one_options) { { quantity: 2 } }
133
-
134
- describe "the adjustment for the first item" do
135
- let(:line_item) { order.line_items.first }
136
- it { is_expected.to eq(-2) }
137
- end
138
- describe "the adjustment for the second item" do
139
- let(:line_item) { order.line_items.second }
140
- it { is_expected.to eq(-1) }
141
- end
142
- end
143
-
144
- context "and the items cost different amounts" do
145
- let(:line_one_options) { { quantity: 3 } }
146
- let(:line_two_options) { { price: 20 } }
147
-
148
- describe "the adjustment for the first item" do
149
- let(:line_item) { order.line_items.first }
150
- it { is_expected.to eq(-3) }
151
- end
152
- describe "the adjustment for the second item" do
153
- let(:line_item) { order.line_items.second }
154
- it { is_expected.to eq 0 }
155
- end
156
- end
157
- end
158
- end
159
-
160
- context "with a tiered percentage based adjustment" do
161
- let(:tiers) do
162
- {
163
- 20 => 20,
164
- 40 => 30
165
- }
166
- end
167
-
168
- let(:calculator) do
169
- Spree::Calculator::TieredPercent.create(preferred_base_percent: 10, preferred_tiers: tiers)
170
- end
171
- let(:line_items_attributes) do
172
- [
173
- { price: 10, quantity: 1 }.merge(line_one_options),
174
- { price: 10, quantity: 1 }.merge(line_two_options),
175
- ]
176
- end
177
-
178
- let(:line_one_options) { {} }
179
- let(:line_two_options) { {} }
180
-
181
- context "with a quantity group of 3" do
182
- before do
183
- action.preferred_group_size = 3
184
- action.perform({ order: order, promotion: promotion })
185
- end
186
-
187
- context "and 2x item A and 1x item B" do
188
- let(:line_one_options) { { quantity: 2 } }
189
-
190
- context "when amount falls within the first tier" do
191
- describe "the adjustment for the first item" do
192
- let(:line_item) { order.line_items.first }
193
- it { is_expected.to eq(-4) }
194
- end
195
- describe "the adjustment for the second item" do
196
- let(:line_item) { order.line_items.second }
197
- it { is_expected.to eq(-2) }
198
- end
199
- end
200
-
201
- context "when amount falls within the second tier" do
202
- let(:line_two_options) { { price: 20 } }
203
-
204
- describe "the adjustment for the first item" do
205
- let(:line_item) { order.line_items.first }
206
- it { is_expected.to eq(-6) }
207
- end
208
-
209
- describe "the adjustment for the second item" do
210
- let(:line_item) { order.line_items.second }
211
- it { is_expected.to eq(-6) }
212
- end
213
- end
214
- end
215
- end
216
- end
217
- end
218
-
219
- # Regression test for https://github.com/solidusio/solidus/pull/1591
220
- context "with unsaved line_item changes" do
221
- let(:calculator) { FactoryBot.create :flat_rate_calculator }
222
- let(:line_item) { order.line_items.first }
223
-
224
- before do
225
- order.line_items.first.promo_total = -11
226
- action.compute_amount(line_item)
227
- end
228
-
229
- it "doesn't reload the line_items association" do
230
- expect(order.line_items.first.promo_total).to eq(-11)
231
- end
232
- end
233
-
234
- # Regression test for https://github.com/solidusio/solidus/pull/1591
235
- context "applied to the order" do
236
- let(:calculator) { FactoryBot.create :flat_rate_calculator }
237
-
238
- before do
239
- action.perform(order: order, promotion: promotion)
240
- order.recalculate
241
- end
242
-
243
- it 'updates the order totals' do
244
- expect(order).to have_attributes(
245
- total: 100,
246
- adjustment_total: -10
247
- )
248
- end
249
-
250
- context "after updating item quantity" do
251
- before do
252
- order.line_items.first.update!(quantity: 2, price: 30)
253
- order.recalculate
254
- end
255
-
256
- it 'updates the order totals' do
257
- expect(order).to have_attributes(
258
- total: 140,
259
- adjustment_total: -20
260
- )
261
- end
262
- end
263
-
264
- context "after updating promotion amount" do
265
- before do
266
- calculator.update!(preferred_amount: 5)
267
- order.recalculate
268
- end
269
-
270
- it 'updates the order totals' do
271
- expect(order).to have_attributes(
272
- total: 105,
273
- adjustment_total: -5
274
- )
275
- end
276
- end
277
- end
278
-
279
- describe Spree::Promotion::Actions::CreateQuantityAdjustments::PartialLineItem do
280
- let!(:item) { FactoryBot.create :line_item, order: order, quantity: quantity, price: 10 }
281
- let(:quantity) { 5 }
282
-
283
- subject { described_class.new(item) }
284
-
285
- it "has a reference to the parent order" do
286
- expect(subject.order.id).to eq order.id
287
- end
288
-
289
- it "uses the `line_item.price` as a `line_item.amount`" do
290
- expect(subject.amount).to eq item.price
291
- end
292
-
293
- it "has a currency" do
294
- expect(subject.currency).to eq item.currency
295
- end
296
- end
297
- end
298
- end