solidus_core 2.10.1 → 2.11.2

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 (496) 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/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +60 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  109. data/lib/spree/core/engine.rb +39 -2
  110. data/lib/spree/core/importer/order.rb +26 -11
  111. data/lib/spree/core/permalinks.rb +1 -3
  112. data/lib/spree/core/product_filters.rb +6 -5
  113. data/lib/spree/core/state_machines.rb +20 -1
  114. data/lib/spree/core/state_machines/order.rb +249 -0
  115. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  116. data/lib/spree/core/version.rb +1 -1
  117. data/lib/spree/encryptor.rb +25 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  120. data/lib/spree/event/configuration.rb +11 -6
  121. data/lib/spree/event/subscriber.rb +38 -18
  122. data/lib/spree/event/subscriber_registry.rb +92 -0
  123. data/lib/spree/i18n.rb +1 -1
  124. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  125. data/lib/spree/paranoia_deprecations.rb +32 -12
  126. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  127. data/lib/spree/permission_sets/default_customer.rb +16 -16
  128. data/lib/spree/permission_sets/order_display.rb +11 -11
  129. data/lib/spree/permission_sets/order_management.rb +1 -1
  130. data/lib/spree/permission_sets/product_display.rb +9 -9
  131. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  132. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  133. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  134. data/lib/spree/permission_sets/stock_display.rb +2 -2
  135. data/lib/spree/permission_sets/stock_management.rb +1 -1
  136. data/lib/spree/permission_sets/user_display.rb +3 -3
  137. data/lib/spree/permission_sets/user_management.rb +4 -3
  138. data/lib/spree/permitted_attributes.rb +79 -9
  139. data/lib/spree/preferences/preferable.rb +4 -3
  140. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  141. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  142. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  143. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  144. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  145. data/lib/spree/testing_support/common_rake.rb +3 -3
  146. data/lib/spree/testing_support/dummy_app.rb +44 -23
  147. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  148. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  149. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  150. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  152. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  155. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  156. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  157. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  158. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  159. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  160. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  161. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  162. data/lib/spree/testing_support/job_helpers.rb +24 -0
  163. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  164. data/lib/spree/testing_support/preferences.rb +3 -1
  165. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  166. data/lib/spree/testing_support/translations.rb +25 -0
  167. data/solidus_core.gemspec +8 -5
  168. metadata +99 -376
  169. data/script/rails +0 -10
  170. data/spec/fixtures/thinking-cat.jpg +0 -0
  171. data/spec/helpers/base_helper_spec.rb +0 -168
  172. data/spec/helpers/products_helper_spec.rb +0 -202
  173. data/spec/helpers/taxons_helper_spec.rb +0 -43
  174. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  175. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  176. data/spec/lib/i18n_spec.rb +0 -97
  177. data/spec/lib/search/base_spec.rb +0 -91
  178. data/spec/lib/search/variant_spec.rb +0 -115
  179. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  180. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  181. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  182. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  183. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  184. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  185. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  186. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  187. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  188. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  189. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  190. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  191. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  192. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  193. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  194. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  195. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  197. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  201. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  207. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  209. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  217. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  226. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  229. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  231. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  233. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  240. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  246. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  249. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  250. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  251. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  252. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  253. data/spec/lib/spree/core/version_spec.rb +0 -19
  254. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  255. data/spec/lib/spree/event_spec.rb +0 -130
  256. data/spec/lib/spree/localized_number_spec.rb +0 -45
  257. data/spec/lib/spree/migrations_spec.rb +0 -32
  258. data/spec/lib/spree/money_spec.rb +0 -298
  259. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  260. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  261. data/spec/lib/tasks/dummy_task.rake +0 -12
  262. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  263. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  264. data/spec/mailers/carton_mailer_spec.rb +0 -44
  265. data/spec/mailers/order_mailer_spec.rb +0 -117
  266. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  267. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  268. data/spec/mailers/test_mailer_spec.rb +0 -13
  269. data/spec/models/spree/ability_spec.rb +0 -279
  270. data/spec/models/spree/address_spec.rb +0 -399
  271. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  272. data/spec/models/spree/adjustment_spec.rb +0 -339
  273. data/spec/models/spree/asset_spec.rb +0 -25
  274. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  275. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  276. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  277. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  278. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  279. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  280. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  281. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  282. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  283. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  284. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  285. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  286. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  287. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  288. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  289. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  290. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  291. data/spec/models/spree/calculator_spec.rb +0 -43
  292. data/spec/models/spree/carton_spec.rb +0 -145
  293. data/spec/models/spree/classification_spec.rb +0 -126
  294. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  295. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  296. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  297. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  298. data/spec/models/spree/country_spec.rb +0 -154
  299. data/spec/models/spree/credit_card_spec.rb +0 -373
  300. data/spec/models/spree/customer_return_spec.rb +0 -294
  301. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  302. data/spec/models/spree/exchange_spec.rb +0 -76
  303. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  304. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  306. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  307. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  308. data/spec/models/spree/gateway_spec.rb +0 -14
  309. data/spec/models/spree/image_spec.rb +0 -25
  310. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  311. data/spec/models/spree/line_item_spec.rb +0 -240
  312. data/spec/models/spree/option_type_spec.rb +0 -16
  313. data/spec/models/spree/option_value_spec.rb +0 -52
  314. data/spec/models/spree/order/address_spec.rb +0 -52
  315. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  316. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  317. data/spec/models/spree/order/checkout_spec.rb +0 -740
  318. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  319. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  320. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  321. data/spec/models/spree/order/payment_spec.rb +0 -280
  322. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  323. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  324. data/spec/models/spree/order/totals_spec.rb +0 -26
  325. data/spec/models/spree/order/validations_spec.rb +0 -17
  326. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  327. data/spec/models/spree/order_capturing_spec.rb +0 -16
  328. data/spec/models/spree/order_contents_spec.rb +0 -362
  329. data/spec/models/spree/order_inventory_spec.rb +0 -285
  330. data/spec/models/spree/order_merger_spec.rb +0 -162
  331. data/spec/models/spree/order_mutex_spec.rb +0 -89
  332. data/spec/models/spree/order_promotion_spec.rb +0 -33
  333. data/spec/models/spree/order_shipping_spec.rb +0 -247
  334. data/spec/models/spree/order_spec.rb +0 -1687
  335. data/spec/models/spree/order_taxation_spec.rb +0 -128
  336. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  337. data/spec/models/spree/order_updater_spec.rb +0 -556
  338. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  339. data/spec/models/spree/payment_create_spec.rb +0 -195
  340. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  341. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  342. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  343. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  344. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  345. data/spec/models/spree/payment_method_spec.rb +0 -408
  346. data/spec/models/spree/payment_spec.rb +0 -1270
  347. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  348. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  349. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  350. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  351. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  352. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  353. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  354. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  355. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  356. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  357. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  359. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  360. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  361. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  362. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  363. data/spec/models/spree/preference_spec.rb +0 -79
  364. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  365. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  366. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  367. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  368. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  369. data/spec/models/spree/preferences/store_spec.rb +0 -40
  370. data/spec/models/spree/price_spec.rb +0 -150
  371. data/spec/models/spree/product/scopes_spec.rb +0 -164
  372. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  373. data/spec/models/spree/product_filter_spec.rb +0 -28
  374. data/spec/models/spree/product_property_spec.rb +0 -20
  375. data/spec/models/spree/product_spec.rb +0 -584
  376. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  377. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  378. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  379. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  380. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  381. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  382. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  383. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  384. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  385. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  386. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  387. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  388. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  389. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  390. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  391. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  392. data/spec/models/spree/promotion_action_spec.rb +0 -44
  393. data/spec/models/spree/promotion_category_spec.rb +0 -19
  394. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  395. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  396. data/spec/models/spree/promotion_code_spec.rb +0 -206
  397. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  398. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  399. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  400. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  401. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  402. data/spec/models/spree/promotion_spec.rb +0 -945
  403. data/spec/models/spree/refund_spec.rb +0 -200
  404. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  405. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  406. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  407. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  408. data/spec/models/spree/reimbursement_spec.rb +0 -278
  409. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  410. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  411. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  412. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  413. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  414. data/spec/models/spree/return_authorization_spec.rb +0 -226
  415. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  416. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  417. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  418. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  419. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  420. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  422. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  423. data/spec/models/spree/return_item_spec.rb +0 -785
  424. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  425. data/spec/models/spree/shipment_spec.rb +0 -914
  426. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  427. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  428. data/spec/models/spree/shipping_method_spec.rb +0 -292
  429. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  430. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  431. data/spec/models/spree/state_spec.rb +0 -43
  432. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  433. data/spec/models/spree/stock/availability_spec.rb +0 -143
  434. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  435. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  436. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  437. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  438. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  439. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  440. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  442. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  443. data/spec/models/spree/stock/package_spec.rb +0 -182
  444. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  445. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  446. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  447. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  448. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  449. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  450. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  451. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  452. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  453. data/spec/models/spree/stock_item_spec.rb +0 -348
  454. data/spec/models/spree/stock_location_spec.rb +0 -288
  455. data/spec/models/spree/stock_movement_spec.rb +0 -58
  456. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  457. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  458. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  459. data/spec/models/spree/store_credit_spec.rb +0 -900
  460. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  461. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  462. data/spec/models/spree/store_spec.rb +0 -156
  463. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  464. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  465. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  466. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  467. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  468. data/spec/models/spree/tax_category_spec.rb +0 -50
  469. data/spec/models/spree/tax_rate_spec.rb +0 -317
  470. data/spec/models/spree/taxon_spec.rb +0 -197
  471. data/spec/models/spree/taxonomy_spec.rb +0 -15
  472. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  473. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  474. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  475. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  476. data/spec/models/spree/user_spec.rb +0 -247
  477. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  478. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  479. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  480. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  481. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  482. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  483. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  484. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  485. data/spec/models/spree/variant_spec.rb +0 -862
  486. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  487. data/spec/models/spree/wallet_spec.rb +0 -155
  488. data/spec/models/spree/zone_spec.rb +0 -248
  489. data/spec/rails_helper.rb +0 -46
  490. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  491. data/spec/spec_helper.rb +0 -36
  492. data/spec/support/big_decimal.rb +0 -7
  493. data/spec/support/concerns/default_price.rb +0 -44
  494. data/spec/support/concerns/payment_source.rb +0 -66
  495. data/spec/support/concerns/working_factories.rb +0 -15
  496. data/spec/support/dummy_ability.rb +0 -7
@@ -1,128 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OrderTaxation do
6
- let(:shipping_address) { FactoryBot.create(:address, state: new_york) }
7
- let(:order) { FactoryBot.create(:order, ship_address: shipping_address, state: "delivery") }
8
-
9
- let(:new_york) { FactoryBot.create(:state, state_code: "NY") }
10
- let(:new_york_zone) { FactoryBot.create(:zone, states: [new_york]) }
11
-
12
- let(:books_category) { FactoryBot.create(:tax_category, name: "Books") }
13
- let(:book_tax_rate) do
14
- FactoryBot.create(
15
- :tax_rate,
16
- name: "New York Sales Tax",
17
- tax_categories: [books_category],
18
- zone: new_york_zone,
19
- included_in_price: false,
20
- amount: 0.05
21
- )
22
- end
23
-
24
- let(:book) do
25
- FactoryBot.create(
26
- :product,
27
- price: 20,
28
- name: "Book",
29
- tax_category: books_category,
30
- )
31
- end
32
-
33
- let(:taxation) { described_class.new(order) }
34
-
35
- describe "#apply" do
36
- let(:line_item) { order.contents.add(book.master) }
37
-
38
- let(:line_item_tax) do
39
- Spree::Tax::ItemTax.new(
40
- item_id: line_item.id,
41
- label: "Tax!",
42
- tax_rate: book_tax_rate,
43
- amount: 5,
44
- included_in_price: false
45
- )
46
- end
47
-
48
- let(:taxes) do
49
- Spree::Tax::OrderTax.new(
50
- order_id: order.id,
51
- line_item_taxes: [line_item_tax],
52
- shipment_taxes: []
53
- )
54
- end
55
-
56
- before { taxation.apply(taxes) }
57
-
58
- it "creates a new tax adjustment", aggregate_failures: true do
59
- expect(line_item.adjustments.count).to eq 1
60
-
61
- tax_adjustment = line_item.adjustments.first
62
- expect(tax_adjustment.label).to eq "Tax!"
63
- expect(tax_adjustment.source).to eq book_tax_rate
64
- expect(tax_adjustment.amount).to eq 5
65
- expect(tax_adjustment.included).to be false
66
- end
67
-
68
- context "when new taxes are applied" do
69
- let(:new_line_item_tax) do
70
- Spree::Tax::ItemTax.new(
71
- item_id: line_item.id,
72
- label: "Tax!",
73
- tax_rate: book_tax_rate,
74
- amount: 10,
75
- included_in_price: false
76
- )
77
- end
78
-
79
- let(:new_taxes) do
80
- Spree::Tax::OrderTax.new(
81
- order_id: order.id,
82
- line_item_taxes: [new_line_item_tax],
83
- shipment_taxes: []
84
- )
85
- end
86
-
87
- it "updates the existing tax amount", aggregate_failures: true do
88
- expect {
89
- taxation.apply(new_taxes)
90
- }.to change {
91
- line_item.adjustments.first.amount
92
- }.from(5).to(10)
93
- end
94
-
95
- context "and the adjustment is finalized" do
96
- before do
97
- line_item.adjustments.first.finalize!
98
- end
99
-
100
- it "does not update the tax amount", aggregate_failures: true do
101
- expect {
102
- taxation.apply(new_taxes)
103
- }.to change {
104
- line_item.adjustments.first.amount
105
- }.from(5).to(10)
106
- end
107
- end
108
- end
109
-
110
- context "when taxes are removed" do
111
- let(:new_taxes) do
112
- Spree::Tax::OrderTax.new(
113
- order_id: order.id,
114
- line_item_taxes: [],
115
- shipment_taxes: []
116
- )
117
- end
118
-
119
- it "removes the tax adjustment" do
120
- expect {
121
- taxation.apply(new_taxes)
122
- }.to change {
123
- line_item.adjustments.count
124
- }.from(1).to(0)
125
- end
126
- end
127
- end
128
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe OrderUpdateAttributes do
7
- let(:order) { create(:order) }
8
- let(:payment_method) { create(:payment_method) }
9
- let(:request_env) { nil }
10
- let(:update) { described_class.new(order, attributes, request_env: request_env) }
11
-
12
- context 'empty attributes' do
13
- let(:attributes){ {} }
14
- it 'succeeds' do
15
- expect(update.apply).to be_truthy
16
- end
17
- end
18
-
19
- context 'with coupon code' do
20
- let(:attributes){ { coupon_code: 'abc123' } }
21
- it "sets coupon code" do
22
- expect(update.apply).to be_truthy
23
- expect(order.coupon_code).to eq('abc123')
24
- end
25
- end
26
-
27
- context 'with payment attributes' do
28
- let(:attributes) do
29
- {
30
- payments_attributes: [
31
- {
32
- payment_method_id: payment_method.id,
33
- source_attributes: attributes_for(:credit_card)
34
- }
35
- ]
36
- }
37
- end
38
-
39
- context 'with params and a request_env' do
40
- let(:request_env){ { 'USER_AGENT' => 'Firefox' } }
41
- it 'sets the request_env on the payment' do
42
- expect(update.apply).to be_truthy
43
- expect(order.payments.length).to eq 1
44
- expect(order.payments[0].request_env).to eq({ 'USER_AGENT' => 'Firefox' })
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,556 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe OrderUpdater, type: :model do
7
- include ActiveSupport::Testing::TimeHelpers
8
-
9
- let!(:store) { create :store }
10
- let(:order) { Spree::Order.create }
11
- let(:updater) { Spree::OrderUpdater.new(order) }
12
-
13
- context "order totals" do
14
- before do
15
- 2.times do
16
- create(:line_item, order: order, price: 10)
17
- end
18
- end
19
-
20
- context 'with refund' do
21
- it "updates payment totals" do
22
- create(:payment_with_refund, order: order, amount: 33.25, refund_amount: 3)
23
- updater.update
24
- expect(order.payment_total).to eq(30.25)
25
- end
26
- end
27
-
28
- it "update item total" do
29
- expect {
30
- updater.update
31
- }.to change { order.item_total }.to 20
32
- end
33
-
34
- it "update shipment total" do
35
- create(:shipment, order: order, cost: 10)
36
- expect {
37
- updater.update
38
- }.to change { order.shipment_total }.to 10
39
- end
40
-
41
- context 'with a source-less line item adjustment' do
42
- let(:line_item) { create(:line_item, order: order, price: 10) }
43
- before do
44
- create(:adjustment, source: nil, adjustable: line_item, order: order, amount: -5)
45
- end
46
-
47
- it "updates the line item total" do
48
- expect { updater.update }.to change { line_item.reload.adjustment_total }.from(0).to(-5)
49
- end
50
- end
51
-
52
- context 'with order promotion followed by line item addition' do
53
- let(:promotion) { Spree::Promotion.create!(name: "10% off") }
54
- let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) }
55
-
56
- let(:promotion_action) do
57
- Promotion::Actions::CreateAdjustment.create!({
58
- calculator: calculator,
59
- promotion: promotion
60
- })
61
- end
62
-
63
- before do
64
- updater.update
65
- create(:adjustment, source: promotion_action, adjustable: order, order: order)
66
- create(:line_item, order: order, price: 10) # in addition to the two already created
67
- order.line_items.reload # need to pick up the extra line item
68
- updater.update
69
- end
70
-
71
- it "updates promotion total" do
72
- expect(order.promo_total).to eq(-3)
73
- end
74
- end
75
-
76
- it "update order adjustments" do
77
- create(:adjustment, adjustable: order, order: order, source: nil, amount: 10)
78
-
79
- expect {
80
- updater.update
81
- }.to change {
82
- order.adjustment_total
83
- }.from(0).to(10)
84
- end
85
- end
86
-
87
- describe '#recalculate_adjustments ' do
88
- describe 'promotion recalculation' do
89
- let(:order) { create(:order_with_line_items, line_items_count: 1, line_items_price: 10) }
90
- let(:line_item) { order.line_items[0] }
91
-
92
- context 'when the item quantity has changed' do
93
- let(:promotion) { create(:promotion, promotion_actions: [promotion_action]) }
94
- let(:promotion_action) { Spree::Promotion::Actions::CreateItemAdjustments.new(calculator: calculator) }
95
- let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) }
96
-
97
- before do
98
- promotion.activate(order: order)
99
- order.recalculate
100
- line_item.update!(quantity: 2)
101
- end
102
-
103
- it 'updates the promotion amount' do
104
- expect {
105
- order.recalculate
106
- }.to change {
107
- line_item.promo_total
108
- }.from(-1).to(-2)
109
- end
110
- end
111
-
112
- context 'promotion chooser customization' do
113
- before do
114
- class Spree::TestPromotionChooser
115
- def initialize(_adjustments)
116
- raise 'Custom promotion chooser'
117
- end
118
- end
119
-
120
- stub_spree_preferences(promotion_chooser_class: Spree::TestPromotionChooser)
121
- end
122
-
123
- it 'uses the defined promotion chooser' do
124
- expect { order.recalculate }.to raise_error('Custom promotion chooser')
125
- end
126
- end
127
-
128
- context 'default promotion chooser (best promotion is always applied)' do
129
- let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) }
130
-
131
- let(:source) do
132
- Promotion::Actions::CreateItemAdjustments.create!(
133
- calculator: calculator,
134
- promotion: promotion,
135
- )
136
- end
137
- let(:promotion) { create(:promotion) }
138
-
139
- def create_adjustment(label, amount)
140
- create(
141
- :adjustment,
142
- order: order,
143
- adjustable: line_item,
144
- source: source,
145
- amount: amount,
146
- finalized: true,
147
- label: label,
148
- )
149
- end
150
-
151
- it 'should make all but the most valuable promotion adjustment ineligible, leaving non promotion adjustments alone' do
152
- create_adjustment('Promotion A', -100)
153
- create_adjustment('Promotion B', -200)
154
- create_adjustment('Promotion C', -300)
155
- create(:adjustment, order: order,
156
- adjustable: line_item,
157
- source: nil,
158
- amount: -500,
159
- finalized: true,
160
- label: 'Some other credit')
161
-
162
- line_item.adjustments.each { |item| item.update_column(:eligible, true) }
163
-
164
- order.recalculate
165
-
166
- expect(line_item.adjustments.promotion.eligible.count).to eq(1)
167
- expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion C')
168
- end
169
-
170
- it 'should choose the most recent promotion adjustment when amounts are equal' do
171
- # Freezing time is a regression test
172
- travel_to(Time.current) do
173
- create_adjustment('Promotion A', -200)
174
- create_adjustment('Promotion B', -200)
175
- end
176
- line_item.adjustments.each { |item| item.update_column(:eligible, true) }
177
-
178
- order.recalculate
179
-
180
- expect(line_item.adjustments.promotion.eligible.count).to eq(1)
181
- expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion B')
182
- end
183
-
184
- it 'should choose the most recent promotion adjustment when amounts are equal' do
185
- # Freezing time is a regression test
186
- travel_to(Time.current) do
187
- create_adjustment('Promotion A', -200)
188
- create_adjustment('Promotion B', -200)
189
- end
190
- line_item.adjustments.each { |item| item.update_column(:eligible, true) }
191
-
192
- order.recalculate
193
-
194
- expect(line_item.adjustments.promotion.eligible.count).to eq(1)
195
- expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion B')
196
- end
197
-
198
- context 'when previously ineligible promotions become available' do
199
- let(:order_promo1) { create(:promotion, :with_order_adjustment, :with_item_total_rule, weighted_order_adjustment_amount: 5, item_total_threshold_amount: 10) }
200
- let(:order_promo2) { create(:promotion, :with_order_adjustment, :with_item_total_rule, weighted_order_adjustment_amount: 10, item_total_threshold_amount: 20) }
201
- let(:order_promos) { [order_promo1, order_promo2] }
202
- let(:line_item_promo1) { create(:promotion, :with_line_item_adjustment, :with_item_total_rule, adjustment_rate: 2.5, item_total_threshold_amount: 10, apply_automatically: true) }
203
- let(:line_item_promo2) { create(:promotion, :with_line_item_adjustment, :with_item_total_rule, adjustment_rate: 5, item_total_threshold_amount: 20, apply_automatically: true) }
204
- let(:line_item_promos) { [line_item_promo1, line_item_promo2] }
205
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
206
-
207
- # Apply promotions in different sequences. Results should be the same.
208
- promo_sequences = [
209
- [0, 1],
210
- [1, 0],
211
- ]
212
-
213
- promo_sequences.each do |promo_sequence|
214
- context "with promo sequence #{promo_sequence}" do
215
- it 'should pick the best order-level promo according to current eligibility' do
216
- # apply both promos to the order, even though only promo1 is eligible
217
- order_promos[promo_sequence[0]].activate order: order
218
- order_promos[promo_sequence[1]].activate order: order
219
-
220
- order.recalculate
221
- order.reload
222
- expect(order.all_adjustments.count).to eq(2), 'Expected two adjustments'
223
- expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment'
224
- expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo1), 'Expected promo1 to be used'
225
-
226
- order.contents.add create(:variant, price: 10), 1
227
- order.save
228
-
229
- order.reload
230
- expect(order.all_adjustments.count).to eq(2), 'Expected two adjustments'
231
- expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment'
232
- expect(order.all_adjustments.eligible.first.source.promotion).to eq(order_promo2), 'Expected promo2 to be used'
233
- end
234
-
235
- it 'should pick the best line-item-level promo according to current eligibility' do
236
- # apply both promos to the order, even though only promo1 is eligible
237
- line_item_promos[promo_sequence[0]].activate order: order
238
- line_item_promos[promo_sequence[1]].activate order: order
239
-
240
- order.reload
241
- expect(order.all_adjustments.count).to eq(1), 'Expected one adjustment'
242
- expect(order.all_adjustments.eligible.count).to eq(1), 'Expected one elegible adjustment'
243
- # line_item_promo1 is the only one that has thus far met the order total threshold, it is the only promo which should be applied.
244
- expect(order.all_adjustments.first.source.promotion).to eq(line_item_promo1), 'Expected line_item_promo1 to be used'
245
-
246
- order.contents.add create(:variant, price: 10), 1
247
- order.save
248
-
249
- order.reload
250
- expect(order.all_adjustments.count).to eq(4), 'Expected four adjustments'
251
- expect(order.all_adjustments.eligible.count).to eq(2), 'Expected two elegible adjustments'
252
- order.all_adjustments.eligible.each do |adjustment|
253
- expect(adjustment.source.promotion).to eq(line_item_promo2), 'Expected line_item_promo2 to be used'
254
- end
255
- end
256
- end
257
- end
258
- end
259
-
260
- context 'multiple adjustments and the best one is not eligible' do
261
- let!(:promo_a) { create_adjustment('Promotion A', -100) }
262
- let!(:promo_c) { create_adjustment('Promotion C', -300) }
263
-
264
- before do
265
- promo_a.update_column(:eligible, true)
266
- promo_c.update_column(:eligible, false)
267
- end
268
-
269
- # regression for https://github.com/spree/spree/issues/3274
270
- it 'still makes the previous best eligible adjustment valid' do
271
- order.recalculate
272
- expect(line_item.adjustments.promotion.eligible.first.label).to eq('Promotion A')
273
- end
274
- end
275
-
276
- it 'should only leave one adjustment even if 2 have the same amount' do
277
- create_adjustment('Promotion A', -100)
278
- create_adjustment('Promotion B', -200)
279
- create_adjustment('Promotion C', -200)
280
-
281
- order.recalculate
282
-
283
- expect(line_item.adjustments.promotion.eligible.count).to eq(1)
284
- expect(line_item.adjustments.promotion.eligible.first.amount.to_i).to eq(-200)
285
- end
286
- end
287
- end
288
-
289
- describe 'tax recalculation' do
290
- let!(:ship_address) { create(:address) }
291
- let!(:tax_zone) { create(:global_zone) } # will include the above address
292
- let!(:tax_rate) { create(:tax_rate, zone: tax_zone, tax_categories: [tax_category]) }
293
-
294
- let(:order) do
295
- create(
296
- :order_with_line_items,
297
- line_items_attributes: [{ price: 10, variant: variant }],
298
- ship_address: ship_address,
299
- )
300
- end
301
- let(:line_item) { order.line_items[0] }
302
-
303
- let(:variant) { create(:variant, tax_category: tax_category) }
304
- let(:tax_category) { create(:tax_category) }
305
-
306
- context 'when the item quantity has changed' do
307
- before do
308
- line_item.update!(quantity: 2)
309
- end
310
-
311
- it 'updates the promotion amount' do
312
- expect {
313
- order.recalculate
314
- }.to change {
315
- line_item.additional_tax_total
316
- }.from(1).to(2)
317
- end
318
- end
319
-
320
- context 'with a custom tax_calculator_class' do
321
- let(:custom_calculator_class) { double }
322
- let(:custom_calculator_instance) { double }
323
-
324
- before do
325
- order # generate this first so we can expect it
326
- stub_spree_preferences(tax_calculator_class: custom_calculator_class)
327
- end
328
-
329
- it 'uses the configured class' do
330
- expect(custom_calculator_class).to receive(:new).with(order).at_least(:once).and_return(custom_calculator_instance)
331
- expect(custom_calculator_instance).to receive(:calculate).at_least(:once).and_return(
332
- Spree::Tax::OrderTax.new(order_id: order.id, line_item_taxes: [], shipment_taxes: [])
333
- )
334
-
335
- order.recalculate
336
- end
337
- end
338
- end
339
- end
340
-
341
- context "updating shipment state" do
342
- before do
343
- allow(order).to receive_messages backordered?: false
344
- end
345
-
346
- it "is backordered" do
347
- allow(order).to receive_messages backordered?: true
348
- updater.update_shipment_state
349
-
350
- expect(order.shipment_state).to eq('backorder')
351
- end
352
-
353
- it "is nil" do
354
- updater.update_shipment_state
355
- expect(order.shipment_state).to be_nil
356
- end
357
-
358
- ["shipped", "ready", "pending"].each do |state|
359
- it "is #{state}" do
360
- create(:shipment, order: order, state: state)
361
- updater.update_shipment_state
362
- expect(order.shipment_state).to eq(state)
363
- end
364
- end
365
-
366
- it "is partial" do
367
- create(:shipment, order: order, state: 'pending')
368
- create(:shipment, order: order, state: 'ready')
369
- updater.update_shipment_state
370
- expect(order.shipment_state).to eq('partial')
371
- end
372
- end
373
-
374
- context "updating payment state" do
375
- let(:order) { Order.new }
376
- let(:updater) { order.updater }
377
- before { allow(order).to receive(:refund_total).and_return(0) }
378
-
379
- context 'no valid payments with non-zero order total' do
380
- it "is failed" do
381
- create(:payment, order: order, state: 'invalid')
382
- order.total = 1
383
- order.payment_total = 0
384
-
385
- updater.update_payment_state
386
- expect(order.payment_state).to eq('failed')
387
- end
388
- end
389
-
390
- context 'invalid payments are present but order total is zero' do
391
- it 'is paid' do
392
- order.payments << Spree::Payment.new(state: 'invalid')
393
- order.total = 0
394
- order.payment_total = 0
395
-
396
- expect {
397
- updater.update_payment_state
398
- }.to change { order.payment_state }.to 'paid'
399
- end
400
- end
401
-
402
- context "payment total is greater than order total" do
403
- it "is credit_owed" do
404
- order.payment_total = 2
405
- order.total = 1
406
-
407
- expect {
408
- updater.update_payment_state
409
- }.to change { order.payment_state }.to 'credit_owed'
410
- end
411
- end
412
-
413
- context "order total is greater than payment total" do
414
- it "is balance_due" do
415
- order.payment_total = 1
416
- order.total = 2
417
-
418
- expect {
419
- updater.update_payment_state
420
- }.to change { order.payment_state }.to 'balance_due'
421
- end
422
- end
423
-
424
- context "order total equals payment total" do
425
- it "is paid" do
426
- order.payment_total = 30
427
- order.total = 30
428
-
429
- expect {
430
- updater.update_payment_state
431
- }.to change { order.payment_state }.to 'paid'
432
- end
433
- end
434
-
435
- context "order is canceled" do
436
- before do
437
- order.state = 'canceled'
438
- end
439
-
440
- context "and is still unpaid" do
441
- it "is void" do
442
- order.payment_total = 0
443
- order.total = 30
444
- expect {
445
- updater.update_payment_state
446
- }.to change { order.payment_state }.to 'void'
447
- end
448
- end
449
-
450
- context "and is paid" do
451
- it "is credit_owed" do
452
- order.payment_total = 30
453
- order.total = 30
454
- create(:payment, order: order, state: 'completed', amount: 30)
455
- expect {
456
- updater.update_payment_state
457
- }.to change { order.payment_state }.to 'credit_owed'
458
- end
459
- end
460
-
461
- context "and payment is refunded" do
462
- it "is void" do
463
- order.payment_total = 0
464
- order.total = 30
465
- expect {
466
- updater.update_payment_state
467
- }.to change { order.payment_state }.to 'void'
468
- end
469
- end
470
- end
471
- end
472
-
473
- context "completed order" do
474
- before { allow(order).to receive_messages completed?: true }
475
-
476
- it "updates payment state" do
477
- expect(updater).to receive(:update_payment_state)
478
- updater.update
479
- end
480
-
481
- it "updates shipment state" do
482
- expect(updater).to receive(:update_shipment_state)
483
- updater.update
484
- end
485
-
486
- context 'with a shipment' do
487
- before { create(:shipment, order: order) }
488
- let(:shipment){ order.shipments[0] }
489
-
490
- it "updates each shipment" do
491
- expect(shipment).to receive(:update_state)
492
- updater.update
493
- end
494
-
495
- it "updates the shipment amount" do
496
- expect(shipment).to receive(:update_amounts)
497
- updater.update
498
- end
499
- end
500
- end
501
-
502
- context "incompleted order" do
503
- before { allow(order).to receive_messages completed?: false }
504
-
505
- it "doesnt update payment state" do
506
- expect(updater).not_to receive(:update_payment_state)
507
- updater.update
508
- end
509
-
510
- it "doesnt update shipment state" do
511
- expect(updater).not_to receive(:update_shipment_state)
512
- updater.update
513
- end
514
-
515
- it "doesnt update each shipment" do
516
- shipment = stub_model(Spree::Shipment)
517
- order.shipments = [shipment]
518
- allow(order.shipments).to receive_messages(states: [], ready: [], pending: [], shipped: [])
519
- allow(updater).to receive(:update_totals) # Otherwise this gets called and causes a scene
520
- expect(updater).not_to receive(:update_shipments)
521
- updater.update
522
- end
523
- end
524
-
525
- describe 'updating in-memory items' do
526
- let(:order) do
527
- create(:order_with_line_items, line_items_count: 1, line_items_price: 10)
528
- end
529
- let(:line_item) { order.line_items.first }
530
- let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: 1) }
531
-
532
- it 'updates in-memory items' do
533
- promotion.activate(order: order)
534
-
535
- expect(line_item.promo_total).to eq(0)
536
- expect(order.promo_total).to eq(0)
537
-
538
- order.recalculate
539
-
540
- expect(line_item.promo_total).to eq(-1)
541
- expect(order.promo_total).to eq(-1)
542
- end
543
- end
544
-
545
- context "with item with no adjustment and incorrect totals" do
546
- let!(:line_item) { create(:line_item, order: order, price: 10) }
547
-
548
- it "updates the totals" do
549
- line_item.update!(adjustment_total: 100)
550
- expect {
551
- order.recalculate
552
- }.to change { line_item.reload.adjustment_total }.from(100).to(0)
553
- end
554
- end
555
- end
556
- end