solidus_core 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -1,419 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module PromotionHandler
7
- RSpec.describe Coupon, type: :model do
8
- let(:order) { double("Order", coupon_code: "10off").as_null_object }
9
-
10
- subject { Coupon.new(order) }
11
-
12
- def expect_order_connection(order:, promotion:, promotion_code: nil)
13
- expect(order.promotions.to_a).to include(promotion)
14
- expect(order.order_promotions.flat_map(&:promotion_code)).to include(promotion_code)
15
- end
16
-
17
- def expect_adjustment_creation(adjustable:, promotion:, promotion_code: nil)
18
- expect(adjustable.adjustments.map(&:source).map(&:promotion)).to include(promotion)
19
- expect(adjustable.adjustments.map(&:promotion_code)).to include(promotion_code)
20
- end
21
-
22
- it "returns self in apply" do
23
- expect(subject.apply).to be_a Coupon
24
- end
25
-
26
- context 'status messages' do
27
- let(:coupon) { Coupon.new(order) }
28
-
29
- describe "#set_success_code" do
30
- let(:status) { :coupon_code_applied }
31
- subject { coupon.set_success_code status }
32
-
33
- it 'should have status_code' do
34
- subject
35
- expect(coupon.status_code).to eq(status)
36
- end
37
-
38
- it 'should have success message' do
39
- subject
40
- expect(coupon.success).to eq(I18n.t(status, scope: 'spree'))
41
- end
42
- end
43
-
44
- describe "#set_error_code" do
45
- subject { coupon.set_error_code status }
46
-
47
- context 'not found' do
48
- let(:status) { :coupon_code_not_found }
49
-
50
- it 'has status_code' do
51
- subject
52
- expect(coupon.status_code).to eq(status)
53
- end
54
-
55
- it 'has error message' do
56
- subject
57
- expect(coupon.error).to eq(I18n.t(status, scope: 'spree'))
58
- end
59
- end
60
-
61
- context 'not present' do
62
- let(:status) { :coupon_code_not_present }
63
-
64
- it 'has status_code' do
65
- subject
66
- expect(coupon.status_code).to eq(status)
67
- end
68
-
69
- it 'has error message' do
70
- subject
71
- expect(coupon.error).to eq(I18n.t(status, scope: 'spree'))
72
- end
73
- end
74
- end
75
- end
76
-
77
- context "coupon code promotion doesnt exist" do
78
- before { create(:promotion) }
79
-
80
- it "doesnt fetch any promotion" do
81
- expect(subject.promotion).to be_blank
82
- end
83
-
84
- context "with no actions defined" do
85
- before { create(:promotion, code: "10off") }
86
-
87
- it "populates error message" do
88
- subject.apply
89
- expect(subject.error).to eq I18n.t('spree.coupon_code_not_found')
90
- end
91
- end
92
- end
93
-
94
- context "existing coupon code promotion" do
95
- let!(:promotion) { promotion_code.promotion }
96
- let(:promotion_code) { create(:promotion_code, value: '10off') }
97
- let!(:action) { Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
98
- let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) }
99
-
100
- it "fetches with given code" do
101
- expect(subject.promotion).to eq promotion
102
- end
103
-
104
- context "with a per-item adjustment action" do
105
- let(:order) { create(:order_with_line_items, line_items_count: 3) }
106
-
107
- context "right coupon given" do
108
- context "with correct coupon code casing" do
109
- before { order.coupon_code = "10off" }
110
-
111
- it "successfully activates promo" do
112
- expect(order.total).to eq(130)
113
- subject.apply
114
- expect(subject.success).to be_present
115
- expect_order_connection(order: order, promotion: promotion, promotion_code: promotion_code)
116
- order.line_items.each do |line_item|
117
- expect_adjustment_creation(adjustable: line_item, promotion: promotion, promotion_code: promotion_code)
118
- end
119
- # Ensure that applying the adjustment actually affects the order's total!
120
- expect(order.reload.total).to eq(100)
121
- end
122
-
123
- it "coupon already applied to the order" do
124
- subject.apply
125
- expect(subject.success).to be_present
126
- subject.apply
127
- expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied')
128
- end
129
- end
130
-
131
- # Regression test for https://github.com/spree/spree/issues/4211
132
- context "with incorrect coupon code casing" do
133
- before { order.coupon_code = "10OFF" }
134
- it "successfully activates promo" do
135
- expect(order.total).to eq(130)
136
- subject.apply
137
- expect(subject.success).to be_present
138
- expect_order_connection(order: order, promotion: promotion, promotion_code: promotion_code)
139
- order.line_items.each do |line_item|
140
- expect_adjustment_creation(adjustable: line_item, promotion: promotion, promotion_code: promotion_code)
141
- end
142
- # Ensure that applying the adjustment actually affects the order's total!
143
- expect(order.reload.total).to eq(100)
144
- end
145
- end
146
- end
147
-
148
- context "coexists with a non coupon code promo" do
149
- let!(:order) { create(:order) }
150
-
151
- before do
152
- order.coupon_code = "10off"
153
- calculator = Calculator::FlatRate.new(preferred_amount: 10)
154
- general_promo = create(:promotion, apply_automatically: true, name: "General Promo")
155
- Promotion::Actions::CreateItemAdjustments.create(promotion: general_promo, calculator: calculator)
156
-
157
- order.contents.add create(:variant)
158
- end
159
-
160
- # regression spec for https://github.com/spree/spree/issues/4515
161
- it "successfully activates promo" do
162
- subject.apply
163
- expect(subject).to be_successful
164
- expect_order_connection(order: order, promotion: promotion, promotion_code: promotion_code)
165
- order.line_items.each do |line_item|
166
- expect_adjustment_creation(adjustable: line_item, promotion: promotion, promotion_code: promotion_code)
167
- end
168
- end
169
- end
170
-
171
- context "applied alongside another valid promotion " do
172
- let!(:order) { Order.create }
173
-
174
- before do
175
- order.coupon_code = "10off"
176
- calculator = Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10)
177
- general_promo = create(:promotion, apply_automatically: true, name: "General Promo")
178
- Promotion::Actions::CreateItemAdjustments.create!(promotion: general_promo, calculator: calculator)
179
-
180
- order.contents.add create(:variant, price: 500)
181
- order.contents.add create(:variant, price: 10)
182
-
183
- Spree::PromotionHandler::Cart.new(order).activate
184
- end
185
-
186
- it "successfully activates both promotions and returns success" do
187
- subject.apply
188
- expect(subject).to be_successful
189
- order.line_items.each do |line_item|
190
- expect(line_item.adjustments.count).to eq 2
191
- expect_adjustment_creation(adjustable: line_item, promotion: promotion, promotion_code: promotion_code)
192
- end
193
- end
194
- end
195
- end
196
-
197
- context "with a free-shipping adjustment action" do
198
- let!(:action) { Promotion::Actions::FreeShipping.create!(promotion: promotion) }
199
- context "right coupon code given" do
200
- let(:order) { create(:order_with_line_items, line_items_count: 3) }
201
-
202
- before { order.coupon_code = "10off" }
203
-
204
- it "successfully activates promo" do
205
- expect(order.total).to eq(130)
206
- subject.apply
207
- expect(subject.success).to be_present
208
-
209
- expect_order_connection(order: order, promotion: promotion, promotion_code: promotion_code)
210
- order.shipments.each do |shipment|
211
- expect_adjustment_creation(adjustable: shipment, promotion: promotion, promotion_code: promotion_code)
212
- end
213
- end
214
-
215
- it "coupon already applied to the order" do
216
- subject.apply
217
- expect(subject.success).to be_present
218
- subject.apply
219
- expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied')
220
- end
221
- end
222
- end
223
-
224
- context "with a whole-order adjustment action" do
225
- let!(:action) { Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
226
- context "right coupon given" do
227
- let(:order) { create(:order) }
228
- let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) }
229
-
230
- before do
231
- allow(order).to receive_messages({
232
- coupon_code: "10off",
233
- # These need to be here so that promotion adjustment "wins"
234
- item_total: 50,
235
- ship_total: 10
236
- })
237
- end
238
-
239
- it "successfully activates promo" do
240
- subject.apply
241
- expect(subject.success).to be_present
242
- expect(order.adjustments.count).to eq(1)
243
- expect_order_connection(order: order, promotion: promotion, promotion_code: promotion_code)
244
- expect_adjustment_creation(adjustable: order, promotion: promotion, promotion_code: promotion_code)
245
- end
246
-
247
- context "when the coupon is already applied to the order" do
248
- before { subject.apply }
249
-
250
- it "is not successful" do
251
- subject.apply
252
- expect(subject.successful?).to be false
253
- end
254
-
255
- it "returns a coupon has already been applied error" do
256
- subject.apply
257
- expect(subject.error).to eq I18n.t('spree.coupon_code_already_applied')
258
- end
259
- end
260
-
261
- context "when the coupon fails to activate" do
262
- before { allow_any_instance_of(Spree::Promotion).to receive(:activate).and_return false }
263
-
264
- it "is not successful" do
265
- subject.apply
266
- expect(subject.successful?).to be false
267
- end
268
-
269
- it "returns a coupon failed to activate error" do
270
- subject.apply
271
- expect(subject.error).to eq I18n.t('spree.coupon_code_unknown_error')
272
- end
273
- end
274
-
275
- context "when the promotion exceeds its usage limit" do
276
- let!(:second_order) { FactoryBot.create(:completed_order_with_promotion, promotion: promotion) }
277
-
278
- before do
279
- promotion.update!(usage_limit: 1)
280
- Coupon.new(second_order).apply
281
- end
282
-
283
- it "is not successful" do
284
- subject.apply
285
- expect(subject.successful?).to be false
286
- end
287
-
288
- it "returns a coupon is at max usage error" do
289
- subject.apply
290
- expect(subject.error).to eq I18n.t('spree.coupon_code_max_usage')
291
- end
292
- end
293
- end
294
- end
295
-
296
- context "for an order with taxable line items" do
297
- let(:store) { create(:store) }
298
- let(:order) { create(:order, store: store) }
299
- let(:tax_category) { create(:tax_category, name: "Taxable Foo") }
300
- let(:zone) { create(:zone, :with_country) }
301
- let!(:tax_rate) { create(:tax_rate, amount: 0.1, tax_categories: [tax_category], zone: zone ) }
302
-
303
- before(:each) do
304
- expect(order).to receive(:tax_address).at_least(:once).and_return(Spree::Tax::TaxLocation.new(country: zone.countries.first))
305
- end
306
-
307
- context "and the product price is less than promo discount" do
308
- before(:each) do
309
- order.coupon_code = "10off"
310
-
311
- 3.times do |_i|
312
- taxable = create(:product, tax_category: tax_category, price: 9.0)
313
- order.contents.add(taxable.master, 1)
314
- end
315
- end
316
-
317
- it "successfully applies the promo" do
318
- # 3 * (9 + 0.9)
319
- expect(order.total).to eq(29.7)
320
- coupon = Coupon.new(order)
321
- coupon.apply
322
- expect(coupon.success).to be_present
323
- # 3 * ((9 - [9,10].min) + 0)
324
- expect(order.reload.total).to eq(0)
325
- expect(order.additional_tax_total).to eq(0)
326
- end
327
- end
328
-
329
- context "and the product price is greater than promo discount" do
330
- before(:each) do
331
- order.coupon_code = "10off"
332
-
333
- 3.times do |_i|
334
- taxable = create(:product, tax_category: tax_category, price: 11.0)
335
- order.contents.add(taxable.master, 2)
336
- end
337
- end
338
-
339
- it "successfully applies the promo" do
340
- # 3 * (22 + 2.2)
341
- expect(order.total.to_f).to eq(72.6)
342
- coupon = Coupon.new(order)
343
- coupon.apply
344
- expect(coupon.success).to be_present
345
- # 3 * ( (22 - 10) + 1.2)
346
- expect(order.reload.total).to eq(39.6)
347
- expect(order.additional_tax_total).to eq(3.6)
348
- end
349
- end
350
-
351
- context "and multiple quantity per line item" do
352
- before(:each) do
353
- twnty_off = create(:promotion, name: "promo", code: "20off")
354
- twnty_off_calc = Calculator::FlatRate.new(preferred_amount: 20)
355
- Promotion::Actions::CreateItemAdjustments.create(promotion: twnty_off,
356
- calculator: twnty_off_calc)
357
-
358
- order.coupon_code = "20off"
359
-
360
- 3.times do |_i|
361
- taxable = create(:product, tax_category: tax_category, price: 10.0)
362
- order.contents.add(taxable.master, 2)
363
- end
364
- end
365
-
366
- it "successfully applies the promo" do
367
- # 3 * ((2 * 10) + 2.0)
368
- expect(order.total.to_f).to eq(66)
369
- coupon = Coupon.new(order)
370
- coupon.apply
371
- expect(coupon.success).to be_present
372
- # 0
373
- expect(order.reload.total).to eq(0)
374
- expect(order.additional_tax_total).to eq(0)
375
- end
376
- end
377
- end
378
- end
379
-
380
- context 'removing a coupon code from an order' do
381
- let!(:promotion) { promotion_code.promotion }
382
- let(:promotion_code) { create(:promotion_code, value: '10off') }
383
- let!(:action) { Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
384
- let(:calculator) { Calculator::FlatRate.new(preferred_amount: 10) }
385
- let(:order) { create(:order_with_line_items, line_items_count: 3) }
386
-
387
- context 'with an already applied coupon' do
388
- before do
389
- order.coupon_code = '10off'
390
- subject.apply
391
- order.reload
392
- expect(order.total).to eq(100)
393
- end
394
-
395
- it 'successfully removes the coupon code from the order' do
396
- subject.remove
397
- expect(subject.error).to eq nil
398
- expect(subject.success).to eq I18n.t('spree.coupon_code_removed')
399
- expect(order.reload.total).to eq(130)
400
- end
401
- end
402
-
403
- context 'with a coupon code not applied to an order' do
404
- before do
405
- order.coupon_code = '10off'
406
- expect(order.total).to eq(130)
407
- end
408
-
409
- it 'returns an error' do
410
- subject.remove
411
- expect(subject.success).to eq nil
412
- expect(subject.error).to eq I18n.t('spree.coupon_code_not_present')
413
- expect(order.reload.total).to eq(130)
414
- end
415
- end
416
- end
417
- end
418
- end
419
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module PromotionHandler
7
- RSpec.describe Page, type: :model do
8
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
9
-
10
- let(:promotion) { Promotion.create(name: "10% off", path: '10off') }
11
- before do
12
- calculator = Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10)
13
- action = Promotion::Actions::CreateItemAdjustments.create(calculator: calculator)
14
- promotion.actions << action
15
- end
16
-
17
- it "activates at the right path" do
18
- expect(order.line_item_adjustments.count).to eq(0)
19
- Spree::PromotionHandler::Page.new(order, '10off').activate
20
- expect(order.line_item_adjustments.count).to eq(1)
21
- end
22
-
23
- context "when promotion is expired" do
24
- before do
25
- promotion.update_columns(
26
- starts_at: 1.week.ago,
27
- expires_at: 1.day.ago
28
- )
29
- end
30
-
31
- it "is not activated" do
32
- expect(order.line_item_adjustments.count).to eq(0)
33
- Spree::PromotionHandler::Page.new(order, '10off').activate
34
- expect(order.line_item_adjustments.count).to eq(0)
35
- end
36
- end
37
-
38
- it "does not activate at the wrong path" do
39
- expect(order.line_item_adjustments.count).to eq(0)
40
- Spree::PromotionHandler::Page.new(order, 'wrongpath').activate
41
- expect(order.line_item_adjustments.count).to eq(0)
42
- end
43
- end
44
- end
45
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module PromotionHandler
7
- RSpec.describe Shipping, type: :model do
8
- let(:order) { create(:order) }
9
- let(:shipment) { create(:shipment, order: order ) }
10
-
11
- let(:action) { Spree::Promotion::Actions::FreeShipping.new }
12
-
13
- subject { Spree::PromotionHandler::Shipping.new(order) }
14
-
15
- context 'with apply_automatically' do
16
- let!(:promotion) { create(:promotion, apply_automatically: true, promotion_actions: [action]) }
17
-
18
- context 'for eligible promotion' do
19
- it "creates the adjustment" do
20
- expect { subject.activate }.to change { shipment.adjustments.count }.by(1)
21
- end
22
- end
23
-
24
- context 'for ineligible promotion' do
25
- let!(:promotion) do
26
- create(:promotion, :with_item_total_rule, item_total_threshold_amount: 1_000, apply_automatically: true, promotion_actions: [action])
27
- end
28
-
29
- it "does not create the adjustment" do
30
- expect { subject.activate }.to change { shipment.adjustments.count }.by(0)
31
- end
32
- end
33
- end
34
-
35
- context 'with a code' do
36
- let!(:promotion) { create(:promotion, code: 'freeshipping', promotion_actions: [action]) }
37
-
38
- context 'when already applied' do
39
- before do
40
- order.order_promotions.create!(promotion: promotion, promotion_code: promotion.codes.first)
41
- end
42
-
43
- it 'adjusts the shipment' do
44
- expect {
45
- subject.activate
46
- }.to change { shipment.adjustments.count }
47
- end
48
-
49
- context 'when currently ineligible' do
50
- let(:promotion) do
51
- create(:promotion, :with_item_total_rule, item_total_threshold_amount: 1_000, code: 'freeshipping', promotion_actions: [action])
52
- end
53
-
54
- before do
55
- order.order_promotions.create!(promotion: promotion, promotion_code: promotion.codes.first)
56
- end
57
-
58
- it 'does not adjust the shipment' do
59
- expect {
60
- subject.activate
61
- }.to_not change { shipment.adjustments.count }
62
- end
63
- end
64
- end
65
-
66
- context 'when not already applied' do
67
- it 'does not adjust the shipment' do
68
- expect {
69
- subject.activate
70
- }.to_not change { shipment.adjustments.count }
71
- end
72
- end
73
- end
74
-
75
- context 'with a custom shipping action' do
76
- before do
77
- stub_const('CustomShippingAction', custom_klass)
78
-
79
- allow(Spree::Config.environment.promotions).to receive(:shipping_actions) { ['CustomShippingAction'] }
80
-
81
- order.order_promotions.create!(promotion: promotion, promotion_code: promotion.codes.first)
82
- end
83
-
84
- let(:action) { custom_klass.new }
85
- let(:custom_klass) { Class.new(Spree::Promotion::Actions::FreeShipping) }
86
- let(:promotion) { create(:promotion, code: 'customshipping', promotion_actions: [action]) }
87
-
88
- it 'adjusts the shipment' do
89
- expect {
90
- subject.activate
91
- }.to change { shipment.adjustments.count }
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Spree::PromotionRule, type: :model do
7
- class BadTestRule < Spree::PromotionRule; end
8
-
9
- class TestRule < Spree::PromotionRule
10
- def eligible?(_promotable, _options = {})
11
- true
12
- end
13
- end
14
-
15
- it "forces developer to implement eligible? method" do
16
- expect { BadTestRule.new.eligible?("promotable") }.to raise_error NotImplementedError
17
- end
18
-
19
- it "validates unique rules for a promotion" do
20
- promotion_one = TestRule.new
21
- promotion_one.promotion_id = 1
22
- promotion_one.save
23
-
24
- promotion_two = TestRule.new
25
- promotion_two.promotion_id = 1
26
- expect(promotion_two).not_to be_valid
27
- end
28
-
29
- it "generates its own partial path" do
30
- rule = TestRule.new
31
- expect(rule.to_partial_path).to eq 'spree/admin/promotions/rules/test_rule'
32
- end
33
- end
34
- end