solidus_core 2.10.2 → 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 (494) 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 +54 -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/job_helpers.rb +24 -0
  160. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  161. data/lib/spree/testing_support/preferences.rb +3 -1
  162. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  163. data/lib/spree/testing_support/translations.rb +25 -0
  164. data/solidus_core.gemspec +8 -5
  165. metadata +81 -360
  166. data/script/rails +0 -10
  167. data/spec/fixtures/thinking-cat.jpg +0 -0
  168. data/spec/helpers/base_helper_spec.rb +0 -168
  169. data/spec/helpers/products_helper_spec.rb +0 -202
  170. data/spec/helpers/taxons_helper_spec.rb +0 -43
  171. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  172. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  173. data/spec/lib/i18n_spec.rb +0 -97
  174. data/spec/lib/search/base_spec.rb +0 -91
  175. data/spec/lib/search/variant_spec.rb +0 -115
  176. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  177. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  178. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  179. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  180. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  181. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  182. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  183. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  184. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  185. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  186. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  187. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  188. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  189. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  190. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  191. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  194. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  198. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  204. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  206. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  209. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  214. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  223. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  224. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  226. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  228. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  230. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  237. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  243. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  248. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  249. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  250. data/spec/lib/spree/core/version_spec.rb +0 -19
  251. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  252. data/spec/lib/spree/event_spec.rb +0 -130
  253. data/spec/lib/spree/localized_number_spec.rb +0 -45
  254. data/spec/lib/spree/migrations_spec.rb +0 -32
  255. data/spec/lib/spree/money_spec.rb +0 -298
  256. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  257. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  258. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  259. data/spec/lib/tasks/dummy_task.rake +0 -12
  260. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  261. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  262. data/spec/mailers/carton_mailer_spec.rb +0 -44
  263. data/spec/mailers/order_mailer_spec.rb +0 -117
  264. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  265. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  266. data/spec/mailers/test_mailer_spec.rb +0 -13
  267. data/spec/models/spree/ability_spec.rb +0 -279
  268. data/spec/models/spree/address_spec.rb +0 -399
  269. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  270. data/spec/models/spree/adjustment_spec.rb +0 -339
  271. data/spec/models/spree/asset_spec.rb +0 -25
  272. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  273. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  274. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  275. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  276. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  277. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  278. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  279. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  280. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  281. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  282. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  283. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  284. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  285. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  286. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  287. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  288. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  289. data/spec/models/spree/calculator_spec.rb +0 -43
  290. data/spec/models/spree/carton_spec.rb +0 -145
  291. data/spec/models/spree/classification_spec.rb +0 -126
  292. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  293. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  294. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  295. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  296. data/spec/models/spree/country_spec.rb +0 -154
  297. data/spec/models/spree/credit_card_spec.rb +0 -373
  298. data/spec/models/spree/customer_return_spec.rb +0 -294
  299. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  300. data/spec/models/spree/exchange_spec.rb +0 -76
  301. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  302. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  303. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  305. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  306. data/spec/models/spree/gateway_spec.rb +0 -14
  307. data/spec/models/spree/image_spec.rb +0 -25
  308. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  309. data/spec/models/spree/line_item_spec.rb +0 -240
  310. data/spec/models/spree/option_type_spec.rb +0 -16
  311. data/spec/models/spree/option_value_spec.rb +0 -52
  312. data/spec/models/spree/order/address_spec.rb +0 -52
  313. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  314. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  315. data/spec/models/spree/order/checkout_spec.rb +0 -740
  316. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  317. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  318. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  319. data/spec/models/spree/order/payment_spec.rb +0 -280
  320. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  321. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  322. data/spec/models/spree/order/totals_spec.rb +0 -26
  323. data/spec/models/spree/order/validations_spec.rb +0 -17
  324. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  325. data/spec/models/spree/order_capturing_spec.rb +0 -16
  326. data/spec/models/spree/order_contents_spec.rb +0 -362
  327. data/spec/models/spree/order_inventory_spec.rb +0 -285
  328. data/spec/models/spree/order_merger_spec.rb +0 -162
  329. data/spec/models/spree/order_mutex_spec.rb +0 -89
  330. data/spec/models/spree/order_promotion_spec.rb +0 -33
  331. data/spec/models/spree/order_shipping_spec.rb +0 -247
  332. data/spec/models/spree/order_spec.rb +0 -1687
  333. data/spec/models/spree/order_taxation_spec.rb +0 -128
  334. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  335. data/spec/models/spree/order_updater_spec.rb +0 -556
  336. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  337. data/spec/models/spree/payment_create_spec.rb +0 -195
  338. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  339. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  340. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  341. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  342. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  343. data/spec/models/spree/payment_method_spec.rb +0 -408
  344. data/spec/models/spree/payment_spec.rb +0 -1270
  345. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  346. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  347. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  348. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  349. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  350. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  351. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  352. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  353. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  354. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  355. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  356. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  358. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  359. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  360. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  361. data/spec/models/spree/preference_spec.rb +0 -79
  362. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  363. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  364. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  365. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  366. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  367. data/spec/models/spree/preferences/store_spec.rb +0 -40
  368. data/spec/models/spree/price_spec.rb +0 -150
  369. data/spec/models/spree/product/scopes_spec.rb +0 -164
  370. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  371. data/spec/models/spree/product_filter_spec.rb +0 -28
  372. data/spec/models/spree/product_property_spec.rb +0 -20
  373. data/spec/models/spree/product_spec.rb +0 -584
  374. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  375. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  376. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  377. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  378. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  379. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  380. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  381. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  382. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  383. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  384. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  385. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  386. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  387. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  388. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  389. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  390. data/spec/models/spree/promotion_action_spec.rb +0 -44
  391. data/spec/models/spree/promotion_category_spec.rb +0 -19
  392. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  393. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  394. data/spec/models/spree/promotion_code_spec.rb +0 -206
  395. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  396. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  397. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  398. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  399. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  400. data/spec/models/spree/promotion_spec.rb +0 -945
  401. data/spec/models/spree/refund_spec.rb +0 -200
  402. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  403. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  404. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  405. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  406. data/spec/models/spree/reimbursement_spec.rb +0 -278
  407. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  408. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  409. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  410. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  411. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  412. data/spec/models/spree/return_authorization_spec.rb +0 -226
  413. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  414. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  415. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  416. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  417. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  418. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  419. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  421. data/spec/models/spree/return_item_spec.rb +0 -785
  422. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  423. data/spec/models/spree/shipment_spec.rb +0 -914
  424. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  425. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  426. data/spec/models/spree/shipping_method_spec.rb +0 -292
  427. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  428. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  429. data/spec/models/spree/state_spec.rb +0 -43
  430. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  431. data/spec/models/spree/stock/availability_spec.rb +0 -143
  432. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  433. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  434. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  435. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  436. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  437. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  438. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  439. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  441. data/spec/models/spree/stock/package_spec.rb +0 -182
  442. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  443. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  444. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  445. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  446. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  448. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  449. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  450. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  451. data/spec/models/spree/stock_item_spec.rb +0 -348
  452. data/spec/models/spree/stock_location_spec.rb +0 -288
  453. data/spec/models/spree/stock_movement_spec.rb +0 -58
  454. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  455. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  456. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  457. data/spec/models/spree/store_credit_spec.rb +0 -900
  458. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  459. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  460. data/spec/models/spree/store_spec.rb +0 -156
  461. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  462. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  463. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  464. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  465. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  466. data/spec/models/spree/tax_category_spec.rb +0 -50
  467. data/spec/models/spree/tax_rate_spec.rb +0 -317
  468. data/spec/models/spree/taxon_spec.rb +0 -197
  469. data/spec/models/spree/taxonomy_spec.rb +0 -15
  470. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  471. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  472. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  473. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  474. data/spec/models/spree/user_spec.rb +0 -247
  475. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  476. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  477. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  478. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  479. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  480. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  481. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  482. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  483. data/spec/models/spree/variant_spec.rb +0 -862
  484. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  485. data/spec/models/spree/wallet_spec.rb +0 -155
  486. data/spec/models/spree/zone_spec.rb +0 -248
  487. data/spec/rails_helper.rb +0 -46
  488. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  489. data/spec/spec_helper.rb +0 -36
  490. data/spec/support/big_decimal.rb +0 -7
  491. data/spec/support/concerns/default_price.rb +0 -44
  492. data/spec/support/concerns/payment_source.rb +0 -66
  493. data/spec/support/concerns/working_factories.rb +0 -15
  494. data/spec/support/dummy_ability.rb +0 -7
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Actions::CreateAdjustment, type: :model do
6
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
7
- let(:promotion) { create(:promotion) }
8
- let(:action) { Spree::Promotion::Actions::CreateAdjustment.new }
9
- let(:payload) { { order: order } }
10
-
11
- # From promotion spec:
12
- context "#perform" do
13
- before do
14
- action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
15
- promotion.promotion_actions = [action]
16
- allow(action).to receive_messages(promotion: promotion)
17
- end
18
-
19
- it "does apply an adjustment if the amount is 0" do
20
- action.calculator.preferred_amount = 0
21
- action.perform(payload)
22
- expect(order.adjustments.count).to eq(1)
23
- end
24
-
25
- it "should create a discount with correct negative amount" do
26
- order.shipments.create!(cost: 10)
27
-
28
- action.perform(payload)
29
- expect(promotion.usage_count).to eq(0)
30
- expect(order.adjustments.count).to eq(1)
31
- expect(order.adjustments.first.amount.to_i).to eq(-10)
32
- end
33
-
34
- it "should create a discount accessible through both order_id and adjustable_id" do
35
- action.perform(payload)
36
- expect(order.adjustments.count).to eq(1)
37
- expect(order.all_adjustments.count).to eq(1)
38
- end
39
-
40
- it "should not create a discount when order already has one from this promotion" do
41
- order.shipments.create!(cost: 10)
42
-
43
- action.perform(payload)
44
- action.perform(payload)
45
- expect(promotion.usage_count).to eq(0)
46
- expect(order.adjustments.count).to eq(1)
47
- end
48
-
49
- context "when a promotion code is used" do
50
- let(:promotion_code) { create(:promotion_code) }
51
- let(:promotion) { promotion_code.promotion }
52
- let(:payload) { { order: order, promotion_code: promotion_code } }
53
-
54
- it "should connect the adjustment to the promotion_code" do
55
- expect {
56
- action.perform(payload)
57
- }.to change { order.adjustments.count }.by(1)
58
- expect(order.adjustments.last.promotion_code).to eq promotion_code
59
- end
60
- end
61
- end
62
-
63
- describe '#remove_from' do
64
- let(:action) { promotion.actions.first! }
65
- let(:promotion) { create(:promotion, :with_order_adjustment) }
66
-
67
- let!(:unrelated_adjustment) { create(:adjustment, order: order, source: nil) }
68
-
69
- before do
70
- action.perform(payload)
71
- @action_adjustment = order.adjustments.where(source: action).first!
72
- end
73
-
74
- it 'removes the action adjustment' do
75
- expect(order.adjustments).to match_array([unrelated_adjustment, @action_adjustment])
76
-
77
- action.remove_from(order)
78
-
79
- expect(order.adjustments).to eq([unrelated_adjustment])
80
- end
81
- end
82
-
83
- shared_examples "destroying adjustments from incomplete orders" do
84
- before(:each) do
85
- action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
86
- promotion.promotion_actions = [action]
87
- end
88
-
89
- context "when order is not complete" do
90
- it "should not keep the adjustment" do
91
- action.perform(payload)
92
- subject
93
- expect(order.adjustments.count).to eq(0)
94
- end
95
- end
96
-
97
- context "when order is complete" do
98
- let(:order) do
99
- create(:completed_order_with_totals, line_items_count: 1)
100
- end
101
-
102
- before(:each) do
103
- action.perform(payload)
104
- subject
105
- end
106
-
107
- it "should keep the adjustment" do
108
- expect(order.adjustments.count).to eq(1)
109
- end
110
-
111
- it "should nullify the adjustment source" do
112
- expect(order.adjustments.reload.first.source).to be_nil
113
- end
114
- end
115
- end
116
-
117
- context "#discard" do
118
- subject { action.discard }
119
- it_should_behave_like "destroying adjustments from incomplete orders"
120
- end
121
-
122
- context "#paranoia_destroy" do
123
- subject { Spree::Deprecation.silence { action.paranoia_destroy } }
124
- it_should_behave_like "destroying adjustments from incomplete orders"
125
- end
126
- end
@@ -1,198 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Promotion::Actions::CreateItemAdjustments, type: :model do
7
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
8
- let(:promotion) { create(:promotion, :with_line_item_adjustment, adjustment_rate: adjustment_amount) }
9
- let(:adjustment_amount) { 10 }
10
- let(:action) { promotion.actions.first! }
11
- let(:line_item) { order.line_items.to_a.first }
12
- let(:payload) { { order: order, promotion: promotion } }
13
-
14
- before do
15
- allow(action).to receive(:promotion).and_return(promotion)
16
- promotion.promotion_actions = [action]
17
- end
18
-
19
- context "#perform" do
20
- # Regression test for https://github.com/spree/spree/issues/3966
21
- context "when calculator computes 0" do
22
- let(:adjustment_amount) { 0 }
23
-
24
- it "does not create an adjustment when calculator returns 0" do
25
- action.perform(payload)
26
- expect(action.adjustments).to be_empty
27
- end
28
- end
29
-
30
- context "when calculator returns a non-zero value" do
31
- let(:adjustment_amount) { 10 }
32
-
33
- it "creates adjustment with item as adjustable" do
34
- action.perform(payload)
35
- expect(action.adjustments.count).to eq(1)
36
- expect(line_item.adjustments).to eq(action.adjustments)
37
- end
38
-
39
- it "creates adjustment with self as source" do
40
- action.perform(payload)
41
- expect(line_item.adjustments.first.source).to eq action
42
- end
43
-
44
- it "does not perform twice on the same item" do
45
- 2.times { action.perform(payload) }
46
- expect(action.adjustments.count).to eq(1)
47
- end
48
-
49
- context "with products rules" do
50
- let(:rule) { double Spree::Promotion::Rules::Product }
51
-
52
- before { allow(promotion).to receive(:eligible_rules) { [rule] } }
53
-
54
- context "when the rule is actionable" do
55
- before { allow(rule).to receive(:actionable?).and_return(true) }
56
-
57
- it "creates an adjustment" do
58
- expect {
59
- expect {
60
- action.perform(payload)
61
- }.to change { action.adjustments.count }.by(1)
62
- }.to change { line_item.adjustments.count }.by(1)
63
-
64
- expect(action.adjustments.last).to eq line_item.adjustments.last
65
- end
66
- end
67
-
68
- context "when the rule is not actionable" do
69
- before { allow(rule).to receive(:actionable?).and_return(false) }
70
-
71
- it "does not create an adjustment" do
72
- expect {
73
- expect {
74
- action.perform(payload)
75
- }.to_not change { action.adjustments.count }
76
- }.to_not change { line_item.adjustments.count }
77
- end
78
- end
79
- end
80
-
81
- context "when a promotion code is used" do
82
- let!(:promotion_code) { create(:promotion_code, promotion: promotion) }
83
- let(:payload) { { order: order, promotion: promotion, promotion_code: promotion_code } }
84
-
85
- it "should connect the adjustment to the promotion_code" do
86
- expect {
87
- action.perform(payload)
88
- }.to change { line_item.adjustments.count }.by(1)
89
- expect(line_item.adjustments.last.promotion_code).to eq promotion_code
90
- end
91
- end
92
- end
93
- end
94
-
95
- context "#compute_amount" do
96
- before { promotion.promotion_actions = [action] }
97
-
98
- context "when the adjustable is actionable" do
99
- it "calls compute on the calculator" do
100
- expect(action.calculator).to receive(:compute).with(line_item).and_call_original
101
- action.compute_amount(line_item)
102
- end
103
-
104
- context "calculator returns amount greater than item total" do
105
- before do
106
- action.calculator.preferred_amount = 300
107
- allow(line_item).to receive_messages(amount: 100)
108
- end
109
-
110
- it "does not exceed it" do
111
- expect(action.compute_amount(line_item)).to eql(-100)
112
- end
113
- end
114
- end
115
-
116
- context "when the adjustable is not actionable" do
117
- before { allow(promotion).to receive(:line_item_actionable?) { false } }
118
-
119
- it 'returns 0' do
120
- expect(action.compute_amount(line_item)).to eql(0)
121
- end
122
- end
123
- end
124
-
125
- describe '#remove_from' do
126
- # this adjustment should not get removed
127
- let!(:other_adjustment) { create(:adjustment, adjustable: line_item, order: order, source: nil) }
128
-
129
- before do
130
- action.perform(payload)
131
- @action_adjustment = line_item.adjustments.where(source: action).first!
132
- end
133
-
134
- it 'removes the action adjustment' do
135
- expect(line_item.adjustments).to match_array([other_adjustment, @action_adjustment])
136
-
137
- action.remove_from(order)
138
-
139
- expect(line_item.adjustments).to eq([other_adjustment])
140
- end
141
- end
142
-
143
- shared_examples "destroying adjustments from incomplete orders" do
144
- let!(:action) { promotion.actions.first }
145
- let(:other_action) { other_promotion.actions.first }
146
- let(:promotion) { create(:promotion, :with_line_item_adjustment) }
147
- let(:other_promotion) { create(:promotion, :with_line_item_adjustment) }
148
-
149
- context 'with incomplete orders' do
150
- let(:order) { create(:order) }
151
-
152
- it 'destroys adjustments' do
153
- order.adjustments.create!(label: 'Check', amount: 0, order: order, source: action)
154
-
155
- expect {
156
- subject
157
- }.to change { Adjustment.count }.by(-1)
158
- end
159
- end
160
-
161
- context 'with complete orders' do
162
- let(:order) { create(:completed_order_with_totals) }
163
-
164
- it "does not change adjustments for completed orders" do
165
- order = create :order, completed_at: Time.current
166
- adjustment = action.adjustments.create!(label: "Check", amount: 0, order: order, adjustable: order)
167
-
168
- expect {
169
- expect {
170
- subject
171
- }.not_to change { adjustment.reload.source_id }
172
- }.not_to change { Spree::Adjustment.count }
173
-
174
- expect(adjustment.source).to eq(nil)
175
- expect(Spree::PromotionAction.with_deleted.find(adjustment.source_id)).to be_present
176
- end
177
-
178
- it "doesnt mess with unrelated adjustments" do
179
- order.adjustments.create!(label: "Check", amount: 0, order: order, source: action)
180
-
181
- expect {
182
- subject
183
- }.not_to change { other_action.adjustments.count }
184
- end
185
- end
186
- end
187
-
188
- describe "#discard" do
189
- subject { action.discard }
190
- it_should_behave_like "destroying adjustments from incomplete orders"
191
- end
192
-
193
- describe "#paranoia_destroy" do
194
- subject { Spree::Deprecation.silence { action.paranoia_destroy } }
195
- it_should_behave_like "destroying adjustments from incomplete orders"
196
- end
197
- end
198
- end
@@ -1,298 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails_helper"
4
-
5
- module Spree::Promotion::Actions
6
- RSpec.describe CreateQuantityAdjustments do
7
- let(:action) { CreateQuantityAdjustments.create!(calculator: calculator, promotion: promotion) }
8
-
9
- let(:order) do
10
- create(
11
- :order_with_line_items,
12
- line_items_attributes: line_items_attributes
13
- )
14
- end
15
-
16
- let(:line_items_attributes) do
17
- [
18
- { price: 10, quantity: quantity }
19
- ]
20
- end
21
-
22
- let(:quantity) { 1 }
23
- let(:promotion) { FactoryBot.create :promotion }
24
-
25
- describe "#compute_amount" do
26
- subject { action.compute_amount(line_item) }
27
-
28
- context "with a flat rate adjustment" do
29
- let(:calculator) { FactoryBot.create :flat_rate_calculator, preferred_amount: 5 }
30
-
31
- context "with a quantity group of 2" do
32
- let(:line_item) { order.line_items.first }
33
-
34
- before { action.preferred_group_size = 2 }
35
-
36
- context "and an item with a quantity of 0" do
37
- let(:quantity) { 0 }
38
- it { is_expected.to eq 0 }
39
- end
40
-
41
- context "and an item with a quantity of 1" do
42
- let(:quantity) { 1 }
43
- it { is_expected.to eq 0 }
44
- end
45
-
46
- context "and an item with a quantity of 2" do
47
- let(:quantity) { 2 }
48
- it { is_expected.to eq(-10) }
49
- end
50
-
51
- context "and an item with a quantity of 3" do
52
- let(:quantity) { 3 }
53
- it { is_expected.to eq(-10) }
54
- end
55
-
56
- context "and an item with a quantity of 4" do
57
- let(:quantity) { 4 }
58
- it { is_expected.to eq(-20) }
59
- end
60
- end
61
-
62
- context "with a quantity group of 3" do
63
- before { action.preferred_group_size = 3 }
64
-
65
- context "and 2x item A, 1x item B and 1x item C" do
66
- let(:line_items_attributes) do
67
- [
68
- { price: 10, quantity: 2 },
69
- { price: 10, quantity: 1 },
70
- { price: 10, quantity: 1 },
71
- ]
72
- end
73
-
74
- before { action.perform({ order: order, promotion: promotion }) }
75
-
76
- describe "the adjustment for the first item" do
77
- let(:line_item) { order.line_items.first }
78
- it { is_expected.to eq(-10) }
79
- end
80
- describe "the adjustment for the second item" do
81
- let(:line_item) { order.line_items.second }
82
- it { is_expected.to eq(-5) }
83
- end
84
- describe "the adjustment for the third item" do
85
- let(:line_item) { order.line_items.third }
86
- it { is_expected.to eq 0 }
87
- end
88
- end
89
- end
90
-
91
- context "with multiple orders using the same action" do
92
- let(:other_order) do
93
- create(
94
- :order_with_line_items,
95
- line_items_attributes: [
96
- { quantity: 3 }
97
- ]
98
- )
99
- end
100
-
101
- let(:line_item) { other_order.line_items.first }
102
-
103
- before do
104
- action.preferred_group_size = 2
105
- action.perform({ order: other_order, promotion: promotion })
106
- end
107
-
108
- it { is_expected.to eq(-10) }
109
- end
110
- end
111
-
112
- context "with a percentage based adjustment" do
113
- let(:calculator) { FactoryBot.create :percent_on_item_calculator, preferred_percent: 10 }
114
-
115
- let(:line_items_attributes) do
116
- [
117
- { price: 10, quantity: 1 }.merge(line_one_options),
118
- { price: 10, quantity: 1 }.merge(line_two_options),
119
- ]
120
- end
121
-
122
- let(:line_one_options) { {} }
123
- let(:line_two_options) { {} }
124
-
125
- context "with a quantity group of 3" do
126
- before do
127
- action.preferred_group_size = 3
128
- action.perform({ order: order, promotion: promotion })
129
- end
130
-
131
- context "and 2x item A and 1x item B" do
132
- let(:line_one_options) { { quantity: 2 } }
133
-
134
- describe "the adjustment for the first item" do
135
- let(:line_item) { order.line_items.first }
136
- it { is_expected.to eq(-2) }
137
- end
138
- describe "the adjustment for the second item" do
139
- let(:line_item) { order.line_items.second }
140
- it { is_expected.to eq(-1) }
141
- end
142
- end
143
-
144
- context "and the items cost different amounts" do
145
- let(:line_one_options) { { quantity: 3 } }
146
- let(:line_two_options) { { price: 20 } }
147
-
148
- describe "the adjustment for the first item" do
149
- let(:line_item) { order.line_items.first }
150
- it { is_expected.to eq(-3) }
151
- end
152
- describe "the adjustment for the second item" do
153
- let(:line_item) { order.line_items.second }
154
- it { is_expected.to eq 0 }
155
- end
156
- end
157
- end
158
- end
159
-
160
- context "with a tiered percentage based adjustment" do
161
- let(:tiers) do
162
- {
163
- 20 => 20,
164
- 40 => 30
165
- }
166
- end
167
-
168
- let(:calculator) do
169
- Spree::Calculator::TieredPercent.create(preferred_base_percent: 10, preferred_tiers: tiers)
170
- end
171
- let(:line_items_attributes) do
172
- [
173
- { price: 10, quantity: 1 }.merge(line_one_options),
174
- { price: 10, quantity: 1 }.merge(line_two_options),
175
- ]
176
- end
177
-
178
- let(:line_one_options) { {} }
179
- let(:line_two_options) { {} }
180
-
181
- context "with a quantity group of 3" do
182
- before do
183
- action.preferred_group_size = 3
184
- action.perform({ order: order, promotion: promotion })
185
- end
186
-
187
- context "and 2x item A and 1x item B" do
188
- let(:line_one_options) { { quantity: 2 } }
189
-
190
- context "when amount falls within the first tier" do
191
- describe "the adjustment for the first item" do
192
- let(:line_item) { order.line_items.first }
193
- it { is_expected.to eq(-4) }
194
- end
195
- describe "the adjustment for the second item" do
196
- let(:line_item) { order.line_items.second }
197
- it { is_expected.to eq(-2) }
198
- end
199
- end
200
-
201
- context "when amount falls within the second tier" do
202
- let(:line_two_options) { { price: 20 } }
203
-
204
- describe "the adjustment for the first item" do
205
- let(:line_item) { order.line_items.first }
206
- it { is_expected.to eq(-6) }
207
- end
208
-
209
- describe "the adjustment for the second item" do
210
- let(:line_item) { order.line_items.second }
211
- it { is_expected.to eq(-6) }
212
- end
213
- end
214
- end
215
- end
216
- end
217
- end
218
-
219
- # Regression test for https://github.com/solidusio/solidus/pull/1591
220
- context "with unsaved line_item changes" do
221
- let(:calculator) { FactoryBot.create :flat_rate_calculator }
222
- let(:line_item) { order.line_items.first }
223
-
224
- before do
225
- order.line_items.first.promo_total = -11
226
- action.compute_amount(line_item)
227
- end
228
-
229
- it "doesn't reload the line_items association" do
230
- expect(order.line_items.first.promo_total).to eq(-11)
231
- end
232
- end
233
-
234
- # Regression test for https://github.com/solidusio/solidus/pull/1591
235
- context "applied to the order" do
236
- let(:calculator) { FactoryBot.create :flat_rate_calculator }
237
-
238
- before do
239
- action.perform(order: order, promotion: promotion)
240
- order.recalculate
241
- end
242
-
243
- it 'updates the order totals' do
244
- expect(order).to have_attributes(
245
- total: 100,
246
- adjustment_total: -10
247
- )
248
- end
249
-
250
- context "after updating item quantity" do
251
- before do
252
- order.line_items.first.update!(quantity: 2, price: 30)
253
- order.recalculate
254
- end
255
-
256
- it 'updates the order totals' do
257
- expect(order).to have_attributes(
258
- total: 140,
259
- adjustment_total: -20
260
- )
261
- end
262
- end
263
-
264
- context "after updating promotion amount" do
265
- before do
266
- calculator.update!(preferred_amount: 5)
267
- order.recalculate
268
- end
269
-
270
- it 'updates the order totals' do
271
- expect(order).to have_attributes(
272
- total: 105,
273
- adjustment_total: -5
274
- )
275
- end
276
- end
277
- end
278
-
279
- describe Spree::Promotion::Actions::CreateQuantityAdjustments::PartialLineItem do
280
- let!(:item) { FactoryBot.create :line_item, order: order, quantity: quantity, price: 10 }
281
- let(:quantity) { 5 }
282
-
283
- subject { described_class.new(item) }
284
-
285
- it "has a reference to the parent order" do
286
- expect(subject.order.id).to eq order.id
287
- end
288
-
289
- it "uses the `line_item.price` as a `line_item.amount`" do
290
- expect(subject.amount).to eq item.price
291
- end
292
-
293
- it "has a currency" do
294
- expect(subject.currency).to eq item.currency
295
- end
296
- end
297
- end
298
- end