solidus_core 2.10.1 → 2.11.2

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 (496) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +60 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  109. data/lib/spree/core/engine.rb +39 -2
  110. data/lib/spree/core/importer/order.rb +26 -11
  111. data/lib/spree/core/permalinks.rb +1 -3
  112. data/lib/spree/core/product_filters.rb +6 -5
  113. data/lib/spree/core/state_machines.rb +20 -1
  114. data/lib/spree/core/state_machines/order.rb +249 -0
  115. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  116. data/lib/spree/core/version.rb +1 -1
  117. data/lib/spree/encryptor.rb +25 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  120. data/lib/spree/event/configuration.rb +11 -6
  121. data/lib/spree/event/subscriber.rb +38 -18
  122. data/lib/spree/event/subscriber_registry.rb +92 -0
  123. data/lib/spree/i18n.rb +1 -1
  124. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  125. data/lib/spree/paranoia_deprecations.rb +32 -12
  126. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  127. data/lib/spree/permission_sets/default_customer.rb +16 -16
  128. data/lib/spree/permission_sets/order_display.rb +11 -11
  129. data/lib/spree/permission_sets/order_management.rb +1 -1
  130. data/lib/spree/permission_sets/product_display.rb +9 -9
  131. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  132. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  133. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  134. data/lib/spree/permission_sets/stock_display.rb +2 -2
  135. data/lib/spree/permission_sets/stock_management.rb +1 -1
  136. data/lib/spree/permission_sets/user_display.rb +3 -3
  137. data/lib/spree/permission_sets/user_management.rb +4 -3
  138. data/lib/spree/permitted_attributes.rb +79 -9
  139. data/lib/spree/preferences/preferable.rb +4 -3
  140. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  141. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  142. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  143. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  144. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  145. data/lib/spree/testing_support/common_rake.rb +3 -3
  146. data/lib/spree/testing_support/dummy_app.rb +44 -23
  147. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  148. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  149. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  150. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  152. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  155. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  156. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  157. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  158. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  159. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  160. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  161. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  162. data/lib/spree/testing_support/job_helpers.rb +24 -0
  163. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  164. data/lib/spree/testing_support/preferences.rb +3 -1
  165. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  166. data/lib/spree/testing_support/translations.rb +25 -0
  167. data/solidus_core.gemspec +8 -5
  168. metadata +99 -376
  169. data/script/rails +0 -10
  170. data/spec/fixtures/thinking-cat.jpg +0 -0
  171. data/spec/helpers/base_helper_spec.rb +0 -168
  172. data/spec/helpers/products_helper_spec.rb +0 -202
  173. data/spec/helpers/taxons_helper_spec.rb +0 -43
  174. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  175. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  176. data/spec/lib/i18n_spec.rb +0 -97
  177. data/spec/lib/search/base_spec.rb +0 -91
  178. data/spec/lib/search/variant_spec.rb +0 -115
  179. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  180. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  181. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  182. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  183. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  184. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  185. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  186. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  187. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  188. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  189. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  190. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  191. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  192. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  193. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  194. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  195. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  197. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  201. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  207. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  209. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  217. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  226. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  229. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  231. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  233. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  240. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  246. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  249. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  250. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  251. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  252. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  253. data/spec/lib/spree/core/version_spec.rb +0 -19
  254. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  255. data/spec/lib/spree/event_spec.rb +0 -130
  256. data/spec/lib/spree/localized_number_spec.rb +0 -45
  257. data/spec/lib/spree/migrations_spec.rb +0 -32
  258. data/spec/lib/spree/money_spec.rb +0 -298
  259. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  260. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  261. data/spec/lib/tasks/dummy_task.rake +0 -12
  262. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  263. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  264. data/spec/mailers/carton_mailer_spec.rb +0 -44
  265. data/spec/mailers/order_mailer_spec.rb +0 -117
  266. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  267. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  268. data/spec/mailers/test_mailer_spec.rb +0 -13
  269. data/spec/models/spree/ability_spec.rb +0 -279
  270. data/spec/models/spree/address_spec.rb +0 -399
  271. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  272. data/spec/models/spree/adjustment_spec.rb +0 -339
  273. data/spec/models/spree/asset_spec.rb +0 -25
  274. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  275. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  276. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  277. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  278. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  279. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  280. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  281. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  282. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  283. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  284. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  285. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  286. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  287. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  288. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  289. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  290. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  291. data/spec/models/spree/calculator_spec.rb +0 -43
  292. data/spec/models/spree/carton_spec.rb +0 -145
  293. data/spec/models/spree/classification_spec.rb +0 -126
  294. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  295. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  296. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  297. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  298. data/spec/models/spree/country_spec.rb +0 -154
  299. data/spec/models/spree/credit_card_spec.rb +0 -373
  300. data/spec/models/spree/customer_return_spec.rb +0 -294
  301. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  302. data/spec/models/spree/exchange_spec.rb +0 -76
  303. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  304. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  306. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  307. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  308. data/spec/models/spree/gateway_spec.rb +0 -14
  309. data/spec/models/spree/image_spec.rb +0 -25
  310. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  311. data/spec/models/spree/line_item_spec.rb +0 -240
  312. data/spec/models/spree/option_type_spec.rb +0 -16
  313. data/spec/models/spree/option_value_spec.rb +0 -52
  314. data/spec/models/spree/order/address_spec.rb +0 -52
  315. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  316. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  317. data/spec/models/spree/order/checkout_spec.rb +0 -740
  318. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  319. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  320. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  321. data/spec/models/spree/order/payment_spec.rb +0 -280
  322. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  323. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  324. data/spec/models/spree/order/totals_spec.rb +0 -26
  325. data/spec/models/spree/order/validations_spec.rb +0 -17
  326. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  327. data/spec/models/spree/order_capturing_spec.rb +0 -16
  328. data/spec/models/spree/order_contents_spec.rb +0 -362
  329. data/spec/models/spree/order_inventory_spec.rb +0 -285
  330. data/spec/models/spree/order_merger_spec.rb +0 -162
  331. data/spec/models/spree/order_mutex_spec.rb +0 -89
  332. data/spec/models/spree/order_promotion_spec.rb +0 -33
  333. data/spec/models/spree/order_shipping_spec.rb +0 -247
  334. data/spec/models/spree/order_spec.rb +0 -1687
  335. data/spec/models/spree/order_taxation_spec.rb +0 -128
  336. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  337. data/spec/models/spree/order_updater_spec.rb +0 -556
  338. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  339. data/spec/models/spree/payment_create_spec.rb +0 -195
  340. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  341. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  342. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  343. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  344. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  345. data/spec/models/spree/payment_method_spec.rb +0 -408
  346. data/spec/models/spree/payment_spec.rb +0 -1270
  347. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  348. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  349. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  350. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  351. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  352. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  353. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  354. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  355. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  356. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  357. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  359. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  360. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  361. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  362. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  363. data/spec/models/spree/preference_spec.rb +0 -79
  364. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  365. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  366. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  367. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  368. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  369. data/spec/models/spree/preferences/store_spec.rb +0 -40
  370. data/spec/models/spree/price_spec.rb +0 -150
  371. data/spec/models/spree/product/scopes_spec.rb +0 -164
  372. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  373. data/spec/models/spree/product_filter_spec.rb +0 -28
  374. data/spec/models/spree/product_property_spec.rb +0 -20
  375. data/spec/models/spree/product_spec.rb +0 -584
  376. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  377. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  378. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  379. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  380. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  381. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  382. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  383. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  384. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  385. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  386. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  387. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  388. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  389. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  390. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  391. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  392. data/spec/models/spree/promotion_action_spec.rb +0 -44
  393. data/spec/models/spree/promotion_category_spec.rb +0 -19
  394. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  395. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  396. data/spec/models/spree/promotion_code_spec.rb +0 -206
  397. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  398. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  399. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  400. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  401. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  402. data/spec/models/spree/promotion_spec.rb +0 -945
  403. data/spec/models/spree/refund_spec.rb +0 -200
  404. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  405. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  406. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  407. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  408. data/spec/models/spree/reimbursement_spec.rb +0 -278
  409. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  410. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  411. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  412. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  413. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  414. data/spec/models/spree/return_authorization_spec.rb +0 -226
  415. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  416. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  417. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  418. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  419. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  420. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  422. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  423. data/spec/models/spree/return_item_spec.rb +0 -785
  424. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  425. data/spec/models/spree/shipment_spec.rb +0 -914
  426. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  427. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  428. data/spec/models/spree/shipping_method_spec.rb +0 -292
  429. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  430. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  431. data/spec/models/spree/state_spec.rb +0 -43
  432. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  433. data/spec/models/spree/stock/availability_spec.rb +0 -143
  434. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  435. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  436. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  437. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  438. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  439. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  440. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  442. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  443. data/spec/models/spree/stock/package_spec.rb +0 -182
  444. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  445. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  446. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  447. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  448. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  449. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  450. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  451. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  452. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  453. data/spec/models/spree/stock_item_spec.rb +0 -348
  454. data/spec/models/spree/stock_location_spec.rb +0 -288
  455. data/spec/models/spree/stock_movement_spec.rb +0 -58
  456. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  457. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  458. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  459. data/spec/models/spree/store_credit_spec.rb +0 -900
  460. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  461. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  462. data/spec/models/spree/store_spec.rb +0 -156
  463. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  464. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  465. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  466. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  467. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  468. data/spec/models/spree/tax_category_spec.rb +0 -50
  469. data/spec/models/spree/tax_rate_spec.rb +0 -317
  470. data/spec/models/spree/taxon_spec.rb +0 -197
  471. data/spec/models/spree/taxonomy_spec.rb +0 -15
  472. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  473. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  474. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  475. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  476. data/spec/models/spree/user_spec.rb +0 -247
  477. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  478. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  479. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  480. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  481. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  482. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  483. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  484. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  485. data/spec/models/spree/variant_spec.rb +0 -862
  486. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  487. data/spec/models/spree/wallet_spec.rb +0 -155
  488. data/spec/models/spree/zone_spec.rb +0 -248
  489. data/spec/rails_helper.rb +0 -46
  490. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  491. data/spec/spec_helper.rb +0 -36
  492. data/spec/support/big_decimal.rb +0 -7
  493. data/spec/support/concerns/default_price.rb +0 -44
  494. data/spec/support/concerns/payment_source.rb +0 -66
  495. data/spec/support/concerns/working_factories.rb +0 -15
  496. data/spec/support/dummy_ability.rb +0 -7
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::UserLoggedIn, type: :model do
6
- let(:rule) { Spree::Promotion::Rules::UserLoggedIn.new }
7
-
8
- context "#eligible?(order)" do
9
- let(:order) { Spree::Order.new }
10
-
11
- it "should be eligible if order has an associated user" do
12
- user = double('User')
13
- allow(order).to receive_messages(user: user)
14
-
15
- expect(rule).to be_eligible(order)
16
- end
17
-
18
- context "when user is not logged in" do
19
- before { allow(order).to receive_messages(user: nil) } # better to be explicit here
20
- it { expect(rule).not_to be_eligible(order) }
21
- it "sets an error message" do
22
- rule.eligible?(order)
23
- expect(rule.eligibility_errors.full_messages.first).
24
- to eq "You need to login before applying this coupon code."
25
- end
26
- it "sets an error code" do
27
- rule.eligible?(order)
28
- expect(rule.eligibility_errors.details[:base].first[:error_code]).
29
- to eq :no_user_specified
30
- end
31
- end
32
- end
33
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::UserRole, type: :model do
6
- let(:rule) { described_class.new(preferred_role_ids: roles_for_rule) }
7
- let(:user) { create(:user, spree_roles: roles_for_user) }
8
- let(:roles_for_rule) { [] }
9
- let(:roles_for_user) { [] }
10
-
11
- subject { rule }
12
-
13
- shared_examples 'eligibility' do
14
- context 'no roles on rule' do
15
- let(:roles_for_user) { [create(:role)] }
16
- it 'should not be eligible' do
17
- expect(rule).to_not be_eligible(order)
18
- end
19
- end
20
-
21
- context 'no roles on user' do
22
- let(:roles_for_rule) { [create(:role)] }
23
- it 'should not be eligible' do
24
- expect(rule).to_not be_eligible(order)
25
- end
26
- end
27
-
28
- context 'mismatched roles' do
29
- let(:roles_for_user) { [create(:role)] }
30
- let(:roles_for_rule) { [create(:role)] }
31
- it 'should not be eligible' do
32
- expect(rule).to_not be_eligible(order)
33
- end
34
- end
35
-
36
- context 'matching all roles' do
37
- let(:roles_for_user) { [create(:role), create(:role)] }
38
- let(:roles_for_rule) { roles_for_user }
39
- it 'should be eligible' do
40
- expect(rule).to be_eligible(order)
41
- end
42
- end
43
- end
44
-
45
- context '#eligible?(order)' do
46
- context 'order with no user' do
47
- let(:order) { Spree::Order.new }
48
-
49
- it 'should not be eligible' do
50
- expect(rule).to_not be_eligible(order)
51
- end
52
- end
53
-
54
- context 'order with user' do
55
- let(:order) { Spree::Order.new(user: user) }
56
-
57
- context 'with any match policy' do
58
- before { rule.preferred_match_policy = 'any' }
59
-
60
- include_examples 'eligibility'
61
-
62
- context 'one shared role' do
63
- let(:shared_role) { create(:role) }
64
- let(:roles_for_user) { [create(:role), shared_role] }
65
- let(:roles_for_rule) { [create(:role), shared_role] }
66
- it 'should be eligible' do
67
- expect(rule).to be_eligible(order)
68
- end
69
- end
70
- end
71
-
72
- context 'with all match policy' do
73
- before { rule.preferred_match_policy = 'all' }
74
-
75
- include_examples 'eligibility'
76
-
77
- context 'one shared role' do
78
- let(:shared_role) { create(:role) }
79
- let(:roles_for_user) { [create(:role), shared_role] }
80
- let(:roles_for_rule) { [create(:role), shared_role] }
81
- it 'should not be eligible' do
82
- expect(rule).to_not be_eligible(order)
83
- end
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Promotion::Rules::User, type: :model do
6
- let(:rule) { Spree::Promotion::Rules::User.new }
7
-
8
- context "#eligible?(order)" do
9
- let(:order) { Spree::Order.new }
10
-
11
- it "should not be eligible if users are not provided" do
12
- expect(rule).not_to be_eligible(order)
13
- end
14
-
15
- it "should be eligible if users include user placing the order" do
16
- user = mock_model(Spree::LegacyUser)
17
- users = [user, mock_model(Spree::LegacyUser)]
18
- allow(rule).to receive_messages(users: users)
19
- allow(order).to receive_messages(user: user)
20
-
21
- expect(rule).to be_eligible(order)
22
- end
23
-
24
- it "should not be eligible if user placing the order is not listed" do
25
- allow(order).to receive_messages(user: mock_model(Spree::LegacyUser))
26
- users = [mock_model(Spree::LegacyUser), mock_model(Spree::LegacyUser)]
27
- allow(rule).to receive_messages(users: users)
28
-
29
- expect(rule).not_to be_eligible(order)
30
- end
31
-
32
- # Regression test for https://github.com/spree/spree/issues/3885
33
- it "can assign to user_ids" do
34
- user1 = Spree::LegacyUser.create!(email: "test1@example.com")
35
- user2 = Spree::LegacyUser.create!(email: "test2@example.com")
36
- rule.user_ids = "#{user1.id}, #{user2.id}"
37
- end
38
- end
39
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::PromotionAction, type: :model do
6
- describe '#remove_from' do
7
- class MyPromotionAction < Spree::PromotionAction
8
- def perform(options = {})
9
- order = options[:order]
10
- order.adjustments.create!(amount: 1, order: order, source: self, label: 'foo')
11
- true
12
- end
13
- end
14
-
15
- let(:action) { promotion.actions.first! }
16
- let!(:promotion) { create(:promotion, promotion_actions: [MyPromotionAction.new]) }
17
- let(:order) { create(:order) }
18
-
19
- # this adjustment should not get removed
20
- let!(:other_adjustment) { create(:adjustment, order: order, source: nil) }
21
-
22
- before do
23
- action.perform(order: order)
24
- @action_adjustment = order.adjustments.where(source: action).first!
25
- end
26
-
27
- it "generates its own partial path" do
28
- expect(action.to_partial_path).to eq 'spree/admin/promotions/actions/my_promotion_action'
29
- end
30
-
31
- it 'removes the action adjustment' do
32
- expect(order.adjustments).to match_array([other_adjustment, @action_adjustment])
33
-
34
- expect(Spree::Deprecation).to(
35
- receive(:warn).
36
- with(/"MyPromotionAction" does not define #remove_from/, anything)
37
- )
38
-
39
- action.remove_from(order)
40
-
41
- expect(order.adjustments).to eq([other_adjustment])
42
- end
43
- end
44
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::PromotionCategory, type: :model do
6
- describe 'validation' do
7
- let(:name) { 'Nom' }
8
- subject { Spree::PromotionCategory.new name: name }
9
-
10
- context 'when all required attributes are specified' do
11
- it { is_expected.to be_valid }
12
- end
13
-
14
- context 'when name is missing' do
15
- let(:name) { nil }
16
- it { is_expected.not_to be_valid }
17
- end
18
- end
19
- end
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails_helper"
4
-
5
- RSpec.describe Spree::PromotionCode::BatchBuilder do
6
- let(:promotion) { create(:promotion) }
7
- let(:base_code) { "abc" }
8
- let(:options) { {} }
9
- let(:number_of_codes) { 10 }
10
- let(:promotion_code_batch) do
11
- Spree::PromotionCodeBatch.create!(
12
- promotion_id: promotion.id,
13
- base_code: base_code,
14
- number_of_codes: number_of_codes,
15
- email: "test@email.com"
16
- )
17
- end
18
-
19
- subject { described_class.new(promotion_code_batch, options) }
20
-
21
- describe "#build_promotion_codes" do
22
- context "with a failed build" do
23
- before do
24
- allow(subject).to receive(:generate_random_codes).and_raise "Error"
25
-
26
- expect { subject.build_promotion_codes }.to raise_error RuntimeError
27
- end
28
-
29
- it "updates the error and state on promotion batch" do
30
- expect(promotion_code_batch.reload.error).to eq("#<RuntimeError: Error>")
31
- expect(promotion_code_batch.reload.state).to eq("failed")
32
- end
33
- end
34
-
35
- context "with a successful build" do
36
- before do
37
- allow(Spree::PromotionCodeBatchMailer)
38
- .to receive(:promotion_code_batch_finished)
39
- .and_call_original
40
-
41
- subject.build_promotion_codes
42
- end
43
-
44
- it "update the promotion codes count for the batch" do
45
- expect(promotion_code_batch.promotion_codes.count).to eq(10)
46
- end
47
-
48
- it "builds the correct number of codes" do
49
- expect(subject.promotion.codes.size).to eq(10)
50
- end
51
-
52
- it "builds codes with distinct values" do
53
- expect(subject.promotion.codes.map(&:value).uniq.size).to eq(10)
54
- end
55
-
56
- it "updates the promotion code batch state to completed" do
57
- expect(promotion_code_batch.state).to eq("completed")
58
- end
59
- end
60
-
61
- context "with likely code contention" do
62
- let(:number_of_codes) { 50 }
63
- let(:options) do
64
- {
65
- batch_size: 10,
66
- sample_characters: (0..9).to_a.map(&:to_s),
67
- random_code_length: 2
68
- }
69
- end
70
-
71
- it "creates the correct number of codes" do
72
- subject.build_promotion_codes
73
- expect(promotion.codes.size).to eq(number_of_codes)
74
- end
75
- end
76
- end
77
-
78
- describe "#join_character" do
79
- context "with the default join charachter _" do
80
- it "builds codes with the same base prefix" do
81
- subject.build_promotion_codes
82
-
83
- values = subject.promotion.codes.map(&:value)
84
- expect(values.all? { |val| val.starts_with?("#{base_code}_") }).to be true
85
- end
86
- end
87
-
88
- context "with a custom join separator" do
89
- let(:promotion_code_batch) do
90
- Spree::PromotionCodeBatch.create!(
91
- promotion_id: promotion.id,
92
- base_code: base_code,
93
- number_of_codes: number_of_codes,
94
- email: "test@email.com",
95
- join_characters: "x"
96
- )
97
- end
98
-
99
- it "builds codes with the same base prefix" do
100
- subject.build_promotion_codes
101
-
102
- values = subject.promotion.codes.map(&:value)
103
- expect(values.all? { |val| val.starts_with?("#{base_code}x") }).to be true
104
- end
105
- end
106
- end
107
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails_helper"
4
-
5
- RSpec.describe Spree::PromotionCodeBatch, type: :model do
6
- subject do
7
- described_class.create!(
8
- promotion_id: create(:promotion).id,
9
- base_code: "abc",
10
- number_of_codes: 1,
11
- error: nil,
12
- email: "test@email.com"
13
- )
14
- end
15
-
16
- describe "#process" do
17
- context "with a pending code batch" do
18
- it "should call the worker" do
19
- expect { subject.process }
20
- .to have_enqueued_job(Spree::PromotionCodeBatchJob)
21
- end
22
-
23
- it "should update the state to processing" do
24
- subject.process
25
-
26
- expect(subject.state).to eq("processing")
27
- end
28
- end
29
-
30
- context "with a processing batch" do
31
- before { subject.update_attribute(:state, "processing") }
32
-
33
- it "should raise an error" do
34
- expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch
35
- end
36
- end
37
-
38
- context "with a completed batch" do
39
- before { subject.update_attribute(:state, "completed") }
40
-
41
- it "should raise an error" do
42
- expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch
43
- end
44
- end
45
-
46
- context "with a failed batch" do
47
- before { subject.update_attribute(:state, "failed") }
48
-
49
- it "should raise an error" do
50
- expect{ subject.process }.to raise_error Spree::PromotionCodeBatch::CantProcessStartedBatch
51
- end
52
- end
53
- end
54
- end
@@ -1,206 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::PromotionCode do
6
- context 'callbacks' do
7
- subject { promotion_code.save }
8
-
9
- describe '#normalize_code' do
10
- let(:promotion) { create(:promotion, code: code) }
11
- let(:promotion_code) { promotion.codes.first }
12
-
13
- before { subject }
14
-
15
- context 'with mixed case' do
16
- let(:code) { 'NewCoDe' }
17
-
18
- it 'downcases the value before saving' do
19
- expect(promotion_code.value).to eq('newcode')
20
- end
21
- end
22
-
23
- context 'with extra spacing' do
24
- let(:code) { ' new code ' }
25
- it 'removes surrounding whitespace' do
26
- expect(promotion_code.value).to eq 'new code'
27
- end
28
- end
29
- end
30
- end
31
-
32
- describe "#usage_limit_exceeded?" do
33
- subject { code.usage_limit_exceeded? }
34
-
35
- shared_examples "it should" do
36
- context "when there is a usage limit" do
37
- context "and the limit is not exceeded" do
38
- let(:usage_limit) { 10 }
39
- it { is_expected.to be_falsy }
40
- end
41
- context "and the limit is exceeded" do
42
- let(:usage_limit) { 1 }
43
- context "on a different order" do
44
- before do
45
- FactoryBot.create(
46
- :completed_order_with_promotion,
47
- promotion: promotion
48
- )
49
- code.adjustments.update_all(eligible: true)
50
- end
51
- it { is_expected.to be_truthy }
52
- end
53
- context "on the same order" do
54
- it { is_expected.to be_falsy }
55
- end
56
- end
57
- end
58
- context "when there is no usage limit" do
59
- let(:usage_limit) { nil }
60
- it { is_expected.to be_falsy }
61
- end
62
- end
63
-
64
- let(:code) { promotion.codes.first }
65
-
66
- context "with an order-level adjustment" do
67
- let(:promotion) do
68
- FactoryBot.create(
69
- :promotion,
70
- :with_order_adjustment,
71
- code: "discount",
72
- per_code_usage_limit: usage_limit
73
- )
74
- end
75
- let(:promotable) do
76
- FactoryBot.create(
77
- :completed_order_with_promotion,
78
- promotion: promotion
79
- )
80
- end
81
- it_behaves_like "it should"
82
- end
83
-
84
- context "with an item-level adjustment" do
85
- let(:promotion) do
86
- FactoryBot.create(
87
- :promotion,
88
- :with_line_item_adjustment,
89
- code: "discount",
90
- per_code_usage_limit: usage_limit
91
- )
92
- end
93
- before do
94
- promotion.actions.first.perform({
95
- order: order,
96
- promotion: promotion,
97
- promotion_code: code
98
- })
99
- end
100
- context "when there are multiple line items" do
101
- let(:order) { FactoryBot.create(:order_with_line_items, line_items_count: 2) }
102
- describe "the first item" do
103
- let(:promotable) { order.line_items.first }
104
- it_behaves_like "it should"
105
- end
106
- describe "the second item" do
107
- let(:promotable) { order.line_items.last }
108
- it_behaves_like "it should"
109
- end
110
- end
111
- context "when there is a single line item" do
112
- let(:order) { FactoryBot.create(:order_with_line_items) }
113
- let(:promotable) { order.line_items.first }
114
- it_behaves_like "it should"
115
- end
116
- end
117
- end
118
-
119
- describe "#usage_count" do
120
- let(:promotion) do
121
- FactoryBot.create(
122
- :promotion,
123
- :with_order_adjustment,
124
- code: "discount"
125
- )
126
- end
127
- let(:code) { promotion.codes.first }
128
-
129
- subject { code.usage_count }
130
-
131
- context "when the code is applied to a non-complete order" do
132
- let(:order) { FactoryBot.create(:order_with_line_items) }
133
- before { promotion.activate(order: order, promotion_code: code) }
134
- it { is_expected.to eq 0 }
135
- end
136
- context "when the code is applied to a complete order" do
137
- let!(:order) do
138
- FactoryBot.create(
139
- :completed_order_with_promotion,
140
- promotion: promotion
141
- )
142
- end
143
- context "and the promo is eligible" do
144
- it { is_expected.to eq 1 }
145
- end
146
- context "and the promo is ineligible" do
147
- before { order.adjustments.promotion.update_all(eligible: false) }
148
- it { is_expected.to eq 0 }
149
- end
150
- end
151
- end
152
-
153
- describe "completing multiple orders with the same code", slow: true do
154
- let(:promotion) do
155
- FactoryBot.create(
156
- :promotion,
157
- :with_order_adjustment,
158
- code: "discount",
159
- per_code_usage_limit: 1,
160
- weighted_order_adjustment_amount: 10
161
- )
162
- end
163
- let(:code) { promotion.codes.first }
164
- let(:order) do
165
- FactoryBot.create(:order_with_line_items, line_items_price: 40, shipment_cost: 0).tap do |order|
166
- FactoryBot.create(:payment, amount: 30, order: order)
167
- promotion.activate(order: order, promotion_code: code)
168
- end
169
- end
170
- let(:promo_adjustment) { order.adjustments.promotion.first }
171
- before do
172
- order.next! until order.can_complete?
173
-
174
- FactoryBot.create(:order_with_line_items, line_items_price: 40, shipment_cost: 0).tap do |order|
175
- FactoryBot.create(:payment, amount: 30, order: order)
176
- promotion.activate(order: order, promotion_code: code)
177
- order.next! until order.can_complete?
178
- order.complete!
179
- end
180
- end
181
-
182
- it "makes the promotion ineligible" do
183
- expect{
184
- order.complete
185
- }.to change{ promo_adjustment.reload.eligible }.to(false)
186
- end
187
-
188
- it "adjusts the promo_total" do
189
- expect{
190
- order.complete
191
- }.to change(order, :promo_total).by(10)
192
- end
193
-
194
- it "increases the total to remove the promo" do
195
- expect{
196
- order.complete
197
- }.to change(order, :total).from(30).to(40)
198
- end
199
-
200
- it "resets the state of the order" do
201
- expect{
202
- order.complete
203
- }.to change{ order.reload.state }.from("confirm").to("address")
204
- end
205
- end
206
- end