solidus_core 2.10.2 → 2.11.3

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