solidus_core 2.10.2 → 2.11.3

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