solidus_core 2.10.0 → 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 (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/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -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/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  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/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  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/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  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/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  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/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  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/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  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/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::FirstRepeatPurchaseSince do
6
- describe "#applicable?" do
7
- subject { described_class.new.applicable?(promotable) }
8
-
9
- context "when the promotable is an order" do
10
- let(:promotable) { Spree::Order.new }
11
-
12
- it { is_expected.to be true }
13
- end
14
-
15
- context "when the promotable is not a order" do
16
- let(:promotable) { Spree::LineItem.new }
17
-
18
- it { is_expected.to be false }
19
- end
20
- end
21
-
22
- describe "eligible?" do
23
- let(:instance) { described_class.new }
24
- subject { instance.eligible?(order) }
25
-
26
- before do
27
- instance.preferred_days_ago = 365
28
- end
29
-
30
- context "when the order does not have a user" do
31
- let(:order) { Spree::Order.new }
32
-
33
- it { is_expected.to be false }
34
- end
35
-
36
- context "when the order has a user" do
37
- let(:order) { create :order }
38
- let(:user) { order.user }
39
-
40
- context "when the user has completed orders" do
41
- let(:order_completion_date_1) { 1.day.ago }
42
- let(:order_completion_date_2) { 1.day.ago }
43
- before do
44
- old_order_1 = create :completed_order_with_totals, user: user
45
- old_order_1.update(completed_at: order_completion_date_1)
46
-
47
- old_order_2 = create :completed_order_with_totals, user: user
48
- old_order_2.update(completed_at: order_completion_date_2)
49
- end
50
-
51
- context "the last completed order was greater than the preferred days ago" do
52
- let(:order_completion_date_1) { 14.months.ago }
53
- let(:order_completion_date_2) { 13.months.ago }
54
-
55
- it { is_expected.to be true }
56
- end
57
-
58
- context "the last completed order was less than the preferred days ago" do
59
- let(:order_completion_date_1) { 14.months.ago }
60
- let(:order_completion_date_2) { 11.months.ago }
61
-
62
- it { is_expected.to be false }
63
- end
64
- end
65
-
66
- context "when the user has no completed orders " do
67
- it { is_expected.to be false }
68
- end
69
- end
70
- end
71
- end
@@ -1,128 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::ItemTotal, type: :model do
6
- let(:rule) do
7
- Spree::Promotion::Rules::ItemTotal.new(
8
- preferred_amount: preferred_amount,
9
- preferred_operator: preferred_operator
10
- )
11
- end
12
- let(:order) { double(:order, item_total: item_total, currency: order_currency) }
13
- let(:preferred_amount) { 50 }
14
- let(:order_currency) { 'USD' }
15
-
16
- context "preferred operator set to gt" do
17
- let(:preferred_operator) { 'gt' }
18
-
19
- context "item total is greater than preferred amount" do
20
- let(:item_total) { 51 }
21
-
22
- it "should be eligible when item total is greater than preferred amount" do
23
- expect(rule).to be_eligible(order)
24
- end
25
-
26
- context "when the order is a different currency" do
27
- let(:order_currency) { "CAD" }
28
-
29
- it "is not eligible" do
30
- expect(rule).not_to be_eligible(order)
31
- end
32
- end
33
- end
34
-
35
- context "when item total is equal to preferred amount" do
36
- let(:item_total) { 50 }
37
-
38
- it "is not eligible" do
39
- expect(rule).not_to be_eligible(order)
40
- end
41
-
42
- it "set an error message" do
43
- rule.eligible?(order)
44
- expect(rule.eligibility_errors.full_messages.first).
45
- to eq "This coupon code can't be applied to orders less than or equal to $50.00."
46
- end
47
- it "sets an error code" do
48
- rule.eligible?(order)
49
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
50
- to eq :item_total_less_than_or_equal
51
- end
52
- end
53
-
54
- context "when item total is lower than preferred amount" do
55
- let(:item_total) { 49 }
56
-
57
- it "is not eligible" do
58
- expect(rule).not_to be_eligible(order)
59
- end
60
-
61
- it "set an error message" do
62
- rule.eligible?(order)
63
- expect(rule.eligibility_errors.full_messages.first).
64
- to eq "This coupon code can't be applied to orders less than or equal to $50.00."
65
- end
66
- it "sets an error code" do
67
- rule.eligible?(order)
68
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
69
- to eq :item_total_less_than_or_equal
70
- end
71
- end
72
- end
73
-
74
- context "preferred operator set to gte" do
75
- let(:preferred_operator) { 'gte' }
76
-
77
- context "total is greater than preferred amount" do
78
- let(:item_total) { 51 }
79
-
80
- it "should be eligible when item total is greater than preferred amount" do
81
- expect(rule).to be_eligible(order)
82
- end
83
-
84
- context "when the order is a different currency" do
85
- let(:order_currency) { "CAD" }
86
-
87
- it "is not eligible" do
88
- expect(rule).not_to be_eligible(order)
89
- end
90
- end
91
- end
92
-
93
- context "item total is equal to preferred amount" do
94
- let(:item_total) { 50 }
95
-
96
- it "should be eligible" do
97
- expect(rule).to be_eligible(order)
98
- end
99
-
100
- context "when the order is a different currency" do
101
- let(:order_currency) { "CAD" }
102
-
103
- it "is not eligible" do
104
- expect(rule).not_to be_eligible(order)
105
- end
106
- end
107
- end
108
-
109
- context "when item total is lower than preferred amount" do
110
- let(:item_total) { 49 }
111
-
112
- it "is not eligible" do
113
- expect(rule).not_to be_eligible(order)
114
- end
115
-
116
- it "set an error message" do
117
- rule.eligible?(order)
118
- expect(rule.eligibility_errors.full_messages.first).
119
- to eq "This coupon code can't be applied to orders less than $50.00."
120
- end
121
- it "sets an error code" do
122
- rule.eligible?(order)
123
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
124
- to eq :item_total_less_than
125
- end
126
- end
127
- end
128
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::NthOrder do
6
- describe "#applicable?" do
7
- subject { described_class.new.applicable?(promotable) }
8
-
9
- context "when the promotable is an order" do
10
- let(:promotable) { Spree::Order.new }
11
-
12
- it { is_expected.to be true }
13
- end
14
-
15
- context "when the promotable is not a order" do
16
- let(:promotable) { "not an order" }
17
-
18
- it { is_expected.to be false }
19
- end
20
- end
21
-
22
- describe "eligible?" do
23
- let(:instance) { described_class.new }
24
- subject { instance.eligible?(order) }
25
-
26
- before do
27
- instance.preferred_nth_order = 2
28
- end
29
-
30
- context "when the order does not have a user" do
31
- let(:order) { Spree::Order.new }
32
-
33
- it { is_expected.to be false }
34
- end
35
-
36
- context "when the order has a user" do
37
- let(:order) { create :order }
38
- let(:user) { order.user }
39
-
40
- context "when the user has completed orders" do
41
- before do
42
- old_order = create :completed_order_with_totals, user: user
43
- old_order.update(completed_at: 1.day.ago)
44
- end
45
-
46
- context "when this order will be the 'nth' order" do
47
- it { is_expected.to be true }
48
- end
49
-
50
- context "when this order is completed and is still the 'nth' order" do
51
- before do
52
- order.update(completed_at: Time.current)
53
- end
54
-
55
- it { is_expected.to be true }
56
- end
57
-
58
- context "when this order will not be the 'nth' order" do
59
- before do
60
- instance.preferred_nth_order = 100
61
- end
62
-
63
- it { is_expected.to be false }
64
- end
65
- end
66
-
67
- context "when the user has no completed orders " do
68
- it { is_expected.to be false }
69
- end
70
- end
71
- end
72
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::OneUsePerUser, type: :model do
6
- let(:rule) { described_class.new }
7
-
8
- describe '#eligible?(order)' do
9
- subject { rule.eligible?(order) }
10
- let(:order) { double Spree::Order, user: user }
11
- let(:user) { double Spree::LegacyUser }
12
- let(:promotion) { stub_model Spree::Promotion, used_by?: used_by }
13
- let(:used_by) { false }
14
-
15
- before { rule.promotion = promotion }
16
-
17
- context 'when the order is assigned to a user' do
18
- context 'when the user has used this promotion before' do
19
- let(:used_by) { true }
20
-
21
- it { is_expected.to be false }
22
- it "sets an error message" do
23
- subject
24
- expect(rule.eligibility_errors.full_messages.first).
25
- to eq "This coupon code can only be used once per user."
26
- end
27
- it "sets an error code" do
28
- rule.eligible?(order)
29
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
30
- to eq :limit_once_per_user
31
- end
32
- end
33
-
34
- context 'when the user has not used this promotion before' do
35
- it { is_expected.to be true }
36
- end
37
- end
38
-
39
- context 'when the order is not assigned to a user' do
40
- let(:user) { nil }
41
- it { is_expected.to be false }
42
- it "sets an error message" do
43
- subject
44
- expect(rule.eligibility_errors.full_messages.first).
45
- to eq "You need to login before applying this coupon code."
46
- end
47
- it "sets an error code" do
48
- rule.eligible?(order)
49
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
50
- to eq :no_user_specified
51
- end
52
- end
53
- end
54
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::OptionValue do
6
- let(:rule) { Spree::Promotion::Rules::OptionValue.new }
7
-
8
- describe "#preferred_eligible_values" do
9
- subject { rule.preferred_eligible_values }
10
- it "assigns a nicely formatted hash" do
11
- rule.preferred_eligible_values = Hash["5" => "1,2", "6" => "1"]
12
- expect(subject).to eq Hash[5 => [1, 2], 6 => [1]]
13
- end
14
- end
15
-
16
- describe "#applicable?" do
17
- subject { rule.applicable?(promotable) }
18
- context "when promotable is an order" do
19
- let(:promotable) { Spree::Order.new }
20
- it { is_expected.to be true }
21
- end
22
- context "when promotable is not an order" do
23
- let(:promotable) { Spree::LineItem.new }
24
- it { is_expected.to be false }
25
- end
26
- end
27
-
28
- describe "#eligible?" do
29
- let(:variant) { create :variant }
30
- let(:line_item) { create :line_item, variant: variant }
31
- let(:promotable) { line_item.order }
32
- subject { rule.eligible?(promotable) }
33
- context "when there are any applicable line items" do
34
- before do
35
- rule.preferred_eligible_values = Hash[line_item.product.id => [
36
- line_item.variant.option_values.pluck(:id).first
37
- ]]
38
- end
39
- it { is_expected.to be true }
40
- end
41
- context "when there are no applicable line items" do
42
- before do
43
- rule.preferred_eligible_values = Hash[99 => [99]]
44
- end
45
- it { is_expected.to be false }
46
- end
47
- end
48
-
49
- describe "#actionable?" do
50
- let(:line_item) { create :line_item }
51
- let(:option_value_blue) do
52
- create(
53
- :option_value,
54
- name: 'Blue',
55
- presentation: 'Blue',
56
- option_type: create(
57
- :option_type,
58
- name: 'foo-colour',
59
- presentation: 'Colour'
60
- )
61
- )
62
- end
63
- let(:option_value_medium) do
64
- create(
65
- :option_value,
66
- name: 'Medium',
67
- presentation: 'M'
68
- )
69
- end
70
- before do
71
- line_item.variant.option_values << option_value_blue
72
- rule.preferred_eligible_values = Hash[product_id => option_value_ids]
73
- end
74
- subject { rule.actionable?(line_item) }
75
- context "when the line item has the correct product" do
76
- let(:product_id) { line_item.product.id }
77
- context "when all of the option values match" do
78
- let(:option_value_ids) { [option_value_blue.id] }
79
- it { is_expected.to be true }
80
- end
81
- context "when any of the option values match" do
82
- let(:option_value_ids) { [option_value_blue.id, option_value_medium.id] }
83
- it { is_expected.to be true }
84
- end
85
- context "when none of the option values match" do
86
- let(:option_value_ids) { [option_value_medium.id] }
87
- it { is_expected.to be false }
88
- end
89
- end
90
- context "when the line item's product doesn't match" do
91
- let(:product_id) { 99 }
92
- let(:option_value_ids) { [99] }
93
- it { is_expected.to be false }
94
- end
95
- end
96
- end
@@ -1,193 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::Product, type: :model do
6
- let(:rule) { Spree::Promotion::Rules::Product.new(rule_options) }
7
- let(:rule_options) { {} }
8
-
9
- context "#eligible?(order)" do
10
- let(:order) { Spree::Order.new }
11
-
12
- it "should be eligible if there are no products" do
13
- allow(rule).to receive_messages(eligible_products: [])
14
- expect(rule).to be_eligible(order)
15
- end
16
-
17
- before do
18
- 3.times { |i| instance_variable_set("@product#{i}", mock_model(Spree::Product)) }
19
- end
20
-
21
- context "with 'any' match policy" do
22
- let(:rule_options) { super().merge(preferred_match_policy: 'any') }
23
-
24
- it "should be eligible if any of the products is in eligible products" do
25
- allow(order).to receive_messages(products: [@product1, @product2])
26
- allow(rule).to receive_messages(eligible_products: [@product2, @product3])
27
- expect(rule).to be_eligible(order)
28
- end
29
-
30
- context "when none of the products are eligible products" do
31
- before do
32
- allow(order).to receive_messages(products: [@product1])
33
- allow(rule).to receive_messages(eligible_products: [@product2, @product3])
34
- end
35
- it { expect(rule).not_to be_eligible(order) }
36
- it "sets an error message" do
37
- rule.eligible?(order)
38
- expect(rule.eligibility_errors.full_messages.first).
39
- to eq "You need to add an applicable product before applying this coupon code."
40
- end
41
- it "sets an error code" do
42
- rule.eligible?(order)
43
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
44
- to eq :no_applicable_products
45
- end
46
- end
47
- end
48
-
49
- context "with 'all' match policy" do
50
- let(:rule_options) { super().merge(preferred_match_policy: 'all') }
51
-
52
- it "should be eligible if all of the eligible products are ordered" do
53
- allow(order).to receive_messages(products: [@product3, @product2, @product1])
54
- allow(rule).to receive_messages(eligible_products: [@product2, @product3])
55
- expect(rule).to be_eligible(order)
56
- end
57
-
58
- context "when any of the eligible products is not ordered" do
59
- before do
60
- allow(order).to receive_messages(products: [@product1, @product2])
61
- allow(rule).to receive_messages(eligible_products: [@product1, @product2, @product3])
62
- end
63
- it { expect(rule).not_to be_eligible(order) }
64
- it "sets an error message" do
65
- rule.eligible?(order)
66
- expect(rule.eligibility_errors.full_messages.first).
67
- to eq "This coupon code can't be applied because you don't have all of the necessary products in your cart."
68
- end
69
- it "sets an error code" do
70
- rule.eligible?(order)
71
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
72
- to eq :missing_product
73
- end
74
- end
75
- end
76
-
77
- context "with 'none' match policy" do
78
- let(:rule_options) { super().merge(preferred_match_policy: 'none') }
79
-
80
- it "should be eligible if none of the order's products are in eligible products" do
81
- allow(order).to receive_messages(products: [@product1])
82
- allow(rule).to receive_messages(eligible_products: [@product2, @product3])
83
- expect(rule).to be_eligible(order)
84
- end
85
-
86
- context "when any of the order's products are in eligible products" do
87
- before do
88
- allow(order).to receive_messages(products: [@product1, @product2])
89
- allow(rule).to receive_messages(eligible_products: [@product2, @product3])
90
- end
91
- it { expect(rule).not_to be_eligible(order) }
92
- it "sets an error message" do
93
- rule.eligible?(order)
94
- expect(rule.eligibility_errors.full_messages.first).
95
- to eq "Your cart contains a product that prevents this coupon code from being applied."
96
- end
97
- it "sets an error code" do
98
- rule.eligible?(order)
99
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
100
- to eq :has_excluded_product
101
- end
102
- end
103
- end
104
-
105
- context "with an invalid match policy" do
106
- let(:rule) do
107
- Spree::Promotion::Rules::Product.create!(
108
- promotion: create(:promotion),
109
- product_promotion_rules: [
110
- Spree::ProductPromotionRule.new(product: product),
111
- ],
112
- ).tap do |rule|
113
- rule.preferred_match_policy = 'invalid'
114
- rule.save!(validate: false)
115
- end
116
- end
117
- let(:product) { order.line_items.first!.product }
118
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
119
-
120
- it 'raises' do
121
- expect {
122
- rule.eligible?(order)
123
- }.to raise_error('unexpected match policy: "invalid"')
124
- end
125
- end
126
- end
127
-
128
- describe '#actionable?' do
129
- subject do
130
- rule.actionable?(line_item)
131
- end
132
-
133
- let(:rule_line_item) { Spree::LineItem.new(product: rule_product) }
134
- let(:other_line_item) { Spree::LineItem.new(product: other_product) }
135
-
136
- let(:rule_options) { super().merge(products: [rule_product]) }
137
- let(:rule_product) { mock_model(Spree::Product) }
138
- let(:other_product) { mock_model(Spree::Product) }
139
-
140
- context "with 'any' match policy" do
141
- let(:rule_options) { super().merge(preferred_match_policy: 'any') }
142
-
143
- context 'for product in rule' do
144
- let(:line_item) { rule_line_item }
145
- it { is_expected.to be_truthy }
146
- end
147
-
148
- context 'for product not in rule' do
149
- let(:line_item) { other_line_item }
150
- it { is_expected.to be_falsey }
151
- end
152
- end
153
-
154
- context "with 'all' match policy" do
155
- let(:rule_options) { super().merge(preferred_match_policy: 'all') }
156
-
157
- context 'for product in rule' do
158
- let(:line_item) { rule_line_item }
159
- it { is_expected.to be_truthy }
160
- end
161
-
162
- context 'for product not in rule' do
163
- let(:line_item) { other_line_item }
164
- it { is_expected.to be_falsey }
165
- end
166
- end
167
-
168
- context "with 'none' match policy" do
169
- let(:rule_options) { super().merge(preferred_match_policy: 'none') }
170
-
171
- context 'for product in rule' do
172
- let(:line_item) { rule_line_item }
173
- it { is_expected.to be_falsey }
174
- end
175
-
176
- context 'for product not in rule' do
177
- let(:line_item) { other_line_item }
178
- it { is_expected.to be_truthy }
179
- end
180
- end
181
-
182
- context 'with an invalid match policy' do
183
- let(:rule_options) { super().merge(preferred_match_policy: 'invalid') }
184
- let(:line_item) { rule_line_item }
185
-
186
- it 'raises' do
187
- expect {
188
- rule.actionable?(line_item)
189
- }.to raise_error('unexpected match policy: "invalid"')
190
- end
191
- end
192
- end
193
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails_helper"
4
-
5
- RSpec.describe Spree::Promotion::Rules::Store, type: :model do
6
- let(:rule) { described_class.new }
7
-
8
- context "#eligible?(order)" do
9
- let(:order) { Spree::Order.new }
10
-
11
- it "is eligible if no stores are provided" do
12
- expect(rule).to be_eligible(order)
13
- end
14
-
15
- it "is eligible if stores include the order's store" do
16
- default_store = Spree::Store.new(name: "Default")
17
- other_store = Spree::Store.new(name: "Other")
18
-
19
- rule.stores = [default_store, other_store]
20
- order.store = default_store
21
-
22
- expect(rule).to be_eligible(order)
23
- end
24
-
25
- it "is not eligible if order is placed in a different store" do
26
- default_store = Spree::Store.new(name: "Default")
27
- other_store = Spree::Store.new(name: "Other")
28
-
29
- rule.stores = [other_store]
30
- order.store = default_store
31
-
32
- expect(rule).not_to be_eligible(order)
33
- end
34
- end
35
- end