solidus_core 2.10.2 → 2.11.0

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