solidus_core 2.10.2 → 2.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) 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/engine.rb +39 -2
  109. data/lib/spree/core/importer/order.rb +24 -10
  110. data/lib/spree/core/permalinks.rb +1 -3
  111. data/lib/spree/core/product_filters.rb +6 -5
  112. data/lib/spree/core/state_machines.rb +20 -1
  113. data/lib/spree/core/state_machines/order.rb +249 -0
  114. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  115. data/lib/spree/core/version.rb +1 -1
  116. data/lib/spree/encryptor.rb +25 -0
  117. data/lib/spree/event.rb +40 -7
  118. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  119. data/lib/spree/event/configuration.rb +11 -6
  120. data/lib/spree/event/subscriber.rb +38 -18
  121. data/lib/spree/event/subscriber_registry.rb +92 -0
  122. data/lib/spree/i18n.rb +1 -1
  123. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  124. data/lib/spree/paranoia_deprecations.rb +32 -12
  125. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  126. data/lib/spree/permission_sets/default_customer.rb +16 -16
  127. data/lib/spree/permission_sets/order_display.rb +11 -11
  128. data/lib/spree/permission_sets/order_management.rb +1 -1
  129. data/lib/spree/permission_sets/product_display.rb +9 -9
  130. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  131. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  132. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  133. data/lib/spree/permission_sets/stock_display.rb +2 -2
  134. data/lib/spree/permission_sets/stock_management.rb +1 -1
  135. data/lib/spree/permission_sets/user_display.rb +3 -3
  136. data/lib/spree/permission_sets/user_management.rb +4 -3
  137. data/lib/spree/permitted_attributes.rb +4 -3
  138. data/lib/spree/preferences/preferable.rb +4 -3
  139. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  140. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  141. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  142. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  143. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  144. data/lib/spree/testing_support/common_rake.rb +3 -3
  145. data/lib/spree/testing_support/dummy_app.rb +44 -23
  146. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  147. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  148. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  149. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  151. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  152. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  153. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  154. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  155. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  156. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  157. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  158. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  159. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  160. data/lib/spree/testing_support/job_helpers.rb +24 -0
  161. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  162. data/lib/spree/testing_support/preferences.rb +3 -1
  163. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  164. data/lib/spree/testing_support/translations.rb +25 -0
  165. data/solidus_core.gemspec +8 -5
  166. metadata +99 -377
  167. data/script/rails +0 -10
  168. data/spec/fixtures/thinking-cat.jpg +0 -0
  169. data/spec/helpers/base_helper_spec.rb +0 -168
  170. data/spec/helpers/products_helper_spec.rb +0 -202
  171. data/spec/helpers/taxons_helper_spec.rb +0 -43
  172. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  173. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  174. data/spec/lib/i18n_spec.rb +0 -97
  175. data/spec/lib/search/base_spec.rb +0 -91
  176. data/spec/lib/search/variant_spec.rb +0 -115
  177. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  178. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  179. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  180. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  181. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  182. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  183. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  184. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  185. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  186. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  187. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  188. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  189. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  190. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  191. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  193. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  195. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  199. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  205. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  207. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  208. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  215. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  221. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  222. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  226. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  227. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  229. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  231. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  238. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  244. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  249. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  250. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  251. data/spec/lib/spree/core/version_spec.rb +0 -19
  252. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  253. data/spec/lib/spree/event_spec.rb +0 -130
  254. data/spec/lib/spree/localized_number_spec.rb +0 -45
  255. data/spec/lib/spree/migrations_spec.rb +0 -32
  256. data/spec/lib/spree/money_spec.rb +0 -298
  257. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  258. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  259. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  260. data/spec/lib/tasks/dummy_task.rake +0 -12
  261. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  262. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  263. data/spec/mailers/carton_mailer_spec.rb +0 -44
  264. data/spec/mailers/order_mailer_spec.rb +0 -117
  265. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  266. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  267. data/spec/mailers/test_mailer_spec.rb +0 -13
  268. data/spec/models/spree/ability_spec.rb +0 -279
  269. data/spec/models/spree/address_spec.rb +0 -399
  270. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  271. data/spec/models/spree/adjustment_spec.rb +0 -339
  272. data/spec/models/spree/asset_spec.rb +0 -25
  273. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  274. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  275. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  276. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  277. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  278. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  279. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  280. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  281. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  282. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  283. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  284. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  285. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  286. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  287. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  288. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  289. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  290. data/spec/models/spree/calculator_spec.rb +0 -43
  291. data/spec/models/spree/carton_spec.rb +0 -145
  292. data/spec/models/spree/classification_spec.rb +0 -126
  293. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  294. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  295. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  296. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  297. data/spec/models/spree/country_spec.rb +0 -154
  298. data/spec/models/spree/credit_card_spec.rb +0 -373
  299. data/spec/models/spree/customer_return_spec.rb +0 -294
  300. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  301. data/spec/models/spree/exchange_spec.rb +0 -76
  302. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  303. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  306. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  307. data/spec/models/spree/gateway_spec.rb +0 -14
  308. data/spec/models/spree/image_spec.rb +0 -25
  309. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  310. data/spec/models/spree/line_item_spec.rb +0 -240
  311. data/spec/models/spree/option_type_spec.rb +0 -16
  312. data/spec/models/spree/option_value_spec.rb +0 -52
  313. data/spec/models/spree/order/address_spec.rb +0 -52
  314. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  315. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  316. data/spec/models/spree/order/checkout_spec.rb +0 -740
  317. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  318. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  319. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  320. data/spec/models/spree/order/payment_spec.rb +0 -280
  321. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  322. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  323. data/spec/models/spree/order/totals_spec.rb +0 -26
  324. data/spec/models/spree/order/validations_spec.rb +0 -17
  325. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  326. data/spec/models/spree/order_capturing_spec.rb +0 -16
  327. data/spec/models/spree/order_contents_spec.rb +0 -362
  328. data/spec/models/spree/order_inventory_spec.rb +0 -285
  329. data/spec/models/spree/order_merger_spec.rb +0 -162
  330. data/spec/models/spree/order_mutex_spec.rb +0 -89
  331. data/spec/models/spree/order_promotion_spec.rb +0 -33
  332. data/spec/models/spree/order_shipping_spec.rb +0 -247
  333. data/spec/models/spree/order_spec.rb +0 -1687
  334. data/spec/models/spree/order_taxation_spec.rb +0 -128
  335. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  336. data/spec/models/spree/order_updater_spec.rb +0 -556
  337. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  338. data/spec/models/spree/payment_create_spec.rb +0 -195
  339. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  340. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  341. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  342. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  343. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  344. data/spec/models/spree/payment_method_spec.rb +0 -408
  345. data/spec/models/spree/payment_spec.rb +0 -1270
  346. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  347. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  348. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  349. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  350. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  351. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  352. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  353. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  354. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  355. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  356. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  359. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  360. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  361. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  362. data/spec/models/spree/preference_spec.rb +0 -79
  363. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  364. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  365. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  366. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  367. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  368. data/spec/models/spree/preferences/store_spec.rb +0 -40
  369. data/spec/models/spree/price_spec.rb +0 -150
  370. data/spec/models/spree/product/scopes_spec.rb +0 -164
  371. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  372. data/spec/models/spree/product_filter_spec.rb +0 -28
  373. data/spec/models/spree/product_property_spec.rb +0 -20
  374. data/spec/models/spree/product_spec.rb +0 -584
  375. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  376. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  377. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  378. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  379. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  380. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  381. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  382. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  383. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  384. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  385. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  386. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  387. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  388. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  389. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  390. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  391. data/spec/models/spree/promotion_action_spec.rb +0 -44
  392. data/spec/models/spree/promotion_category_spec.rb +0 -19
  393. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  394. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  395. data/spec/models/spree/promotion_code_spec.rb +0 -206
  396. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  397. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  398. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  399. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  400. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  401. data/spec/models/spree/promotion_spec.rb +0 -945
  402. data/spec/models/spree/refund_spec.rb +0 -200
  403. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  404. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  405. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  406. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  407. data/spec/models/spree/reimbursement_spec.rb +0 -278
  408. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  409. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  410. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  411. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  412. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  413. data/spec/models/spree/return_authorization_spec.rb +0 -226
  414. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  415. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  416. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  417. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  418. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  419. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  422. data/spec/models/spree/return_item_spec.rb +0 -785
  423. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  424. data/spec/models/spree/shipment_spec.rb +0 -914
  425. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  426. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  427. data/spec/models/spree/shipping_method_spec.rb +0 -292
  428. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  429. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  430. data/spec/models/spree/state_spec.rb +0 -43
  431. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  432. data/spec/models/spree/stock/availability_spec.rb +0 -143
  433. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  434. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  435. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  436. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  437. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  438. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  439. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  442. data/spec/models/spree/stock/package_spec.rb +0 -182
  443. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  444. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  445. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  446. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  447. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  448. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  449. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  450. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  451. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  452. data/spec/models/spree/stock_item_spec.rb +0 -348
  453. data/spec/models/spree/stock_location_spec.rb +0 -288
  454. data/spec/models/spree/stock_movement_spec.rb +0 -58
  455. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  456. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  457. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  458. data/spec/models/spree/store_credit_spec.rb +0 -900
  459. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  460. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  461. data/spec/models/spree/store_spec.rb +0 -156
  462. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  463. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  464. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  465. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  466. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  467. data/spec/models/spree/tax_category_spec.rb +0 -50
  468. data/spec/models/spree/tax_rate_spec.rb +0 -317
  469. data/spec/models/spree/taxon_spec.rb +0 -197
  470. data/spec/models/spree/taxonomy_spec.rb +0 -15
  471. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  472. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  473. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  474. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  475. data/spec/models/spree/user_spec.rb +0 -247
  476. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  477. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  478. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  479. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  480. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  481. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  482. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  483. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  484. data/spec/models/spree/variant_spec.rb +0 -862
  485. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  486. data/spec/models/spree/wallet_spec.rb +0 -155
  487. data/spec/models/spree/zone_spec.rb +0 -248
  488. data/spec/rails_helper.rb +0 -46
  489. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  490. data/spec/spec_helper.rb +0 -36
  491. data/spec/support/big_decimal.rb +0 -7
  492. data/spec/support/concerns/default_price.rb +0 -44
  493. data/spec/support/concerns/payment_source.rb +0 -66
  494. data/spec/support/concerns/working_factories.rb +0 -15
  495. 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