solidus_core 2.9.6 → 2.11.0

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