solidus_core 2.10.5 → 3.0.8

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 (618) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +0 -22
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/helpers/spree/store_helper.rb +0 -11
  5. data/app/mailers/spree/base_mailer.rb +4 -0
  6. data/app/mailers/spree/carton_mailer.rb +1 -5
  7. data/app/mailers/spree/order_mailer.rb +1 -1
  8. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +71 -0
  9. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  10. data/app/models/concerns/spree/active_storage_adapter.rb +118 -0
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +1 -1
  14. data/app/models/concerns/spree/soft_deletable.rb +16 -0
  15. data/app/models/concerns/spree/user_address_book.rb +61 -44
  16. data/app/models/concerns/spree/user_methods.rb +23 -12
  17. data/app/models/spree/ability.rb +0 -13
  18. data/app/models/spree/address/name.rb +31 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/address.rb +17 -95
  21. data/app/models/spree/adjustment.rb +1 -29
  22. data/app/models/spree/base.rb +1 -28
  23. data/app/models/spree/calculator/default_tax.rb +1 -1
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +8 -11
  26. data/app/models/spree/country.rb +1 -6
  27. data/app/models/spree/credit_card.rb +2 -29
  28. data/app/models/spree/customer_return.rb +5 -6
  29. data/app/models/spree/exchange.rb +1 -1
  30. data/app/models/spree/image/active_storage_attachment.rb +29 -0
  31. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +1 -22
  34. data/app/models/spree/line_item.rb +12 -46
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +2 -2
  38. data/app/models/spree/order/payments.rb +2 -2
  39. data/app/models/spree/order.rb +70 -132
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_inventory.rb +16 -4
  42. data/app/models/spree/order_merger.rb +7 -5
  43. data/app/models/spree/order_promotion.rb +1 -1
  44. data/app/models/spree/order_shipping.rb +6 -9
  45. data/app/models/spree/order_updater.rb +7 -15
  46. data/app/models/spree/payment/cancellation.rb +3 -22
  47. data/app/models/spree/payment/processing.rb +54 -30
  48. data/app/models/spree/payment.rb +13 -9
  49. data/app/models/spree/payment_create.rb +1 -13
  50. data/app/models/spree/payment_method/bogus_credit_card.rb +13 -9
  51. data/app/models/spree/payment_method/credit_card.rb +1 -3
  52. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +4 -4
  53. data/app/models/spree/payment_method.rb +7 -106
  54. data/app/models/spree/payment_source.rb +2 -2
  55. data/app/models/spree/preference.rb +1 -1
  56. data/app/models/spree/price.rb +3 -9
  57. data/app/models/spree/product/scopes.rb +9 -32
  58. data/app/models/spree/product.rb +24 -52
  59. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -3
  60. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -3
  61. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  62. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  63. data/app/models/spree/promotion/rules/taxon.rb +2 -15
  64. data/app/models/spree/promotion.rb +15 -8
  65. data/app/models/spree/promotion_action.rb +5 -15
  66. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  67. data/app/models/spree/promotion_code.rb +8 -3
  68. data/app/models/spree/promotion_code_batch.rb +1 -1
  69. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  70. data/app/models/spree/promotion_rule.rb +5 -1
  71. data/app/models/spree/promotion_rule_role.rb +1 -1
  72. data/app/models/spree/refund.rb +19 -13
  73. data/app/models/spree/reimbursement.rb +11 -22
  74. data/app/models/spree/reimbursement_performer.rb +2 -8
  75. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  76. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +8 -2
  77. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  78. data/app/models/spree/return_authorization.rb +2 -5
  79. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  80. data/app/models/spree/return_item.rb +10 -18
  81. data/app/models/spree/role.rb +1 -1
  82. data/app/models/spree/shipment.rb +3 -56
  83. data/app/models/spree/shipping_calculator.rb +1 -1
  84. data/app/models/spree/shipping_manifest.rb +2 -2
  85. data/app/models/spree/shipping_method.rb +3 -35
  86. data/app/models/spree/shipping_rate.rb +1 -3
  87. data/app/models/spree/shipping_rate_tax.rb +1 -1
  88. data/app/models/spree/state.rb +0 -4
  89. data/app/models/spree/stock/availability_validator.rb +2 -2
  90. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  91. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  92. data/app/models/spree/stock/inventory_validator.rb +2 -2
  93. data/app/models/spree/stock/package.rb +1 -1
  94. data/app/models/spree/stock/simple_coordinator.rb +7 -18
  95. data/app/models/spree/stock/splitter/base.rb +2 -7
  96. data/app/models/spree/stock_item.rb +3 -15
  97. data/app/models/spree/stock_movement.rb +2 -0
  98. data/app/models/spree/store.rb +1 -13
  99. data/app/models/spree/store_credit.rb +9 -7
  100. data/app/models/spree/store_credit_category.rb +3 -8
  101. data/app/models/spree/store_credit_event.rb +1 -7
  102. data/app/models/spree/store_credit_reason.rb +0 -4
  103. data/app/models/spree/tax/tax_helpers.rb +1 -1
  104. data/app/models/spree/tax_calculator/shipping_rate.rb +1 -12
  105. data/app/models/spree/tax_category.rb +2 -8
  106. data/app/models/spree/tax_rate.rb +7 -34
  107. data/app/models/spree/taxon/active_storage_attachment.rb +13 -0
  108. data/app/models/spree/taxon/paperclip_attachment.rb +0 -4
  109. data/app/models/spree/taxon.rb +1 -12
  110. data/app/models/spree/user_address.rb +3 -2
  111. data/app/models/spree/variant.rb +8 -58
  112. data/app/models/spree/variant_property_rule.rb +5 -1
  113. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  114. data/app/models/spree/zone.rb +1 -1
  115. data/config/locales/en.yml +293 -13
  116. data/db/default/spree/countries.rb +1 -1
  117. data/db/default/spree/states.rb +12 -4
  118. data/db/default/spree/store_credit.rb +2 -2
  119. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  120. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  121. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  122. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  123. data/db/migrate/20210122110141_add_name_to_spree_addresses.rb +13 -0
  124. data/lib/generators/{spree → solidus}/install/install_generator.rb +82 -14
  125. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +4 -9
  126. data/lib/generators/spree/dummy/dummy_generator.rb +2 -1
  127. data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
  128. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  129. data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
  130. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  131. data/lib/spree/app_configuration.rb +104 -72
  132. data/lib/spree/core/class_constantizer.rb +2 -0
  133. data/lib/spree/core/controller_helpers/auth.rb +4 -4
  134. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  135. data/lib/spree/core/controller_helpers/order.rb +8 -27
  136. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  137. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  138. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  139. data/lib/spree/core/engine.rb +23 -8
  140. data/lib/spree/core/environment_extension.rb +0 -9
  141. data/lib/spree/core/importer/order.rb +24 -10
  142. data/lib/spree/core/permalinks.rb +1 -3
  143. data/lib/spree/core/product_filters.rb +5 -44
  144. data/lib/spree/core/role_configuration.rb +0 -14
  145. data/lib/spree/core/search/base.rb +0 -26
  146. data/lib/spree/core/state_machines/order.rb +249 -0
  147. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  148. data/lib/spree/core/state_machines.rb +11 -1
  149. data/lib/spree/core/validators/email.rb +2 -2
  150. data/lib/spree/core/version.rb +1 -1
  151. data/lib/spree/core.rb +11 -19
  152. data/lib/spree/deprecation.rb +1 -1
  153. data/lib/spree/encryptor.rb +25 -0
  154. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  155. data/lib/spree/event/configuration.rb +7 -7
  156. data/lib/spree/event/subscriber.rb +22 -20
  157. data/lib/spree/event/subscriber_registry.rb +94 -0
  158. data/lib/spree/event.rb +20 -18
  159. data/lib/spree/i18n.rb +0 -22
  160. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  161. data/lib/spree/money.rb +3 -18
  162. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  163. data/lib/spree/permission_sets/default_customer.rb +16 -16
  164. data/lib/spree/permission_sets/order_display.rb +11 -11
  165. data/lib/spree/permission_sets/order_management.rb +1 -1
  166. data/lib/spree/permission_sets/product_display.rb +9 -9
  167. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  168. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  169. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  170. data/lib/spree/permission_sets/stock_display.rb +2 -2
  171. data/lib/spree/permission_sets/stock_management.rb +1 -1
  172. data/lib/spree/permission_sets/user_display.rb +3 -3
  173. data/lib/spree/permission_sets/user_management.rb +4 -3
  174. data/lib/spree/permitted_attributes.rb +12 -56
  175. data/lib/spree/preferences/persistable.rb +23 -0
  176. data/lib/spree/preferences/preferable.rb +4 -3
  177. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  178. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  179. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  180. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  181. data/lib/spree/testing_support/capybara_ext.rb +3 -30
  182. data/lib/spree/testing_support/common_rake.rb +3 -3
  183. data/lib/spree/testing_support/controller_requests.rb +0 -82
  184. data/lib/spree/testing_support/dummy_app/mailer_previews/test_mailer_preview.rb +4 -0
  185. data/lib/spree/testing_support/dummy_app/migrations.rb +2 -6
  186. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  187. data/lib/spree/testing_support/dummy_app.rb +41 -24
  188. data/lib/spree/testing_support/factories/address_factory.rb +7 -4
  189. data/lib/spree/testing_support/factories/adjustment_factory.rb +10 -5
  190. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +5 -0
  191. data/lib/spree/testing_support/factories/calculator_factory.rb +5 -0
  192. data/lib/spree/testing_support/factories/carton_factory.rb +7 -2
  193. data/lib/spree/testing_support/factories/country_factory.rb +5 -0
  194. data/lib/spree/testing_support/factories/credit_card_factory.rb +5 -0
  195. data/lib/spree/testing_support/factories/customer_return_factory.rb +8 -3
  196. data/lib/spree/testing_support/factories/image_factory.rb +6 -1
  197. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +9 -4
  198. data/lib/spree/testing_support/factories/line_item_factory.rb +7 -2
  199. data/lib/spree/testing_support/factories/option_type_factory.rb +8 -0
  200. data/lib/spree/testing_support/factories/option_value_factory.rb +5 -0
  201. data/lib/spree/testing_support/factories/order_factory.rb +11 -7
  202. data/lib/spree/testing_support/factories/order_promotion_factory.rb +7 -2
  203. data/lib/spree/testing_support/factories/payment_factory.rb +9 -4
  204. data/lib/spree/testing_support/factories/payment_method_factory.rb +5 -0
  205. data/lib/spree/testing_support/factories/price_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/product_factory.rb +10 -5
  207. data/lib/spree/testing_support/factories/product_option_type_factory.rb +7 -2
  208. data/lib/spree/testing_support/factories/product_property_factory.rb +7 -2
  209. data/lib/spree/testing_support/factories/promotion_category_factory.rb +5 -0
  210. data/lib/spree/testing_support/factories/promotion_code_factory.rb +7 -2
  211. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -2
  212. data/lib/spree/testing_support/factories/property_factory.rb +5 -0
  213. data/lib/spree/testing_support/factories/refund_factory.rb +7 -2
  214. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  215. data/lib/spree/testing_support/factories/reimbursement_factory.rb +7 -2
  216. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +5 -0
  217. data/lib/spree/testing_support/factories/return_authorization_factory.rb +8 -3
  218. data/lib/spree/testing_support/factories/return_item_factory.rb +8 -4
  219. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  220. data/lib/spree/testing_support/factories/role_factory.rb +5 -0
  221. data/lib/spree/testing_support/factories/shipment_factory.rb +9 -3
  222. data/lib/spree/testing_support/factories/shipping_category_factory.rb +5 -0
  223. data/lib/spree/testing_support/factories/shipping_method_factory.rb +8 -3
  224. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -2
  225. data/lib/spree/testing_support/factories/state_factory.rb +7 -1
  226. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -2
  227. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -3
  228. data/lib/spree/testing_support/factories/stock_movement_factory.rb +6 -1
  229. data/lib/spree/testing_support/factories/stock_package_factory.rb +7 -2
  230. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -2
  232. data/lib/spree/testing_support/factories/store_credit_factory.rb +8 -3
  233. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +8 -1
  234. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  235. data/lib/spree/testing_support/factories/store_factory.rb +6 -1
  236. data/lib/spree/testing_support/factories/tax_category_factory.rb +7 -1
  237. data/lib/spree/testing_support/factories/tax_rate_factory.rb +8 -3
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +10 -1
  239. data/lib/spree/testing_support/factories/taxonomy_factory.rb +5 -0
  240. data/lib/spree/testing_support/factories/user_factory.rb +14 -3
  241. data/lib/spree/testing_support/factories/variant_factory.rb +9 -4
  242. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +7 -2
  243. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +8 -3
  244. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +7 -2
  245. data/lib/spree/testing_support/factories/zone_factory.rb +8 -3
  246. data/lib/spree/testing_support/factories.rb +8 -4
  247. data/lib/spree/testing_support/factory_bot.rb +68 -0
  248. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  249. data/lib/spree/testing_support/fixtures/file.txt +1 -0
  250. data/lib/spree/testing_support/job_helpers.rb +24 -0
  251. data/lib/spree/testing_support/order_walkthrough.rb +10 -13
  252. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  253. data/lib/spree/testing_support/preferences.rb +0 -23
  254. data/lib/spree/testing_support/sequences.rb +4 -1
  255. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  256. data/lib/spree/testing_support/translations.rb +25 -0
  257. data/lib/spree/testing_support.rb +31 -0
  258. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  259. data/lib/tasks/upgrade.rake +15 -0
  260. data/solidus_core.gemspec +30 -7
  261. metadata +137 -408
  262. data/app/mailers/spree/test_mailer.rb +0 -13
  263. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  264. data/app/models/spree/calculator/free_shipping.rb +0 -21
  265. data/app/models/spree/calculator/percent_per_item.rb +0 -49
  266. data/app/models/spree/calculator/price_sack.rb +0 -27
  267. data/app/models/spree/gateway/bogus.rb +0 -13
  268. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  269. data/app/models/spree/gateway.rb +0 -14
  270. data/app/models/spree/order/checkout.rb +0 -243
  271. data/app/models/spree/order_capturing.rb +0 -50
  272. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  273. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  274. data/lib/spree/core/current_store.rb +0 -24
  275. data/lib/spree/paranoia_deprecations.rb +0 -21
  276. data/lib/spree/promo/environment.rb +0 -12
  277. data/lib/spree/testing_support/bar_ability.rb +0 -19
  278. data/lib/tasks/core.rake +0 -104
  279. data/lib/tasks/email.rake +0 -11
  280. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  281. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  282. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  283. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  284. data/lib/tasks/order_capturing.rake +0 -27
  285. data/script/rails +0 -10
  286. data/spec/fixtures/thinking-cat.jpg +0 -0
  287. data/spec/helpers/base_helper_spec.rb +0 -168
  288. data/spec/helpers/products_helper_spec.rb +0 -202
  289. data/spec/helpers/taxons_helper_spec.rb +0 -43
  290. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  291. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  292. data/spec/lib/i18n_spec.rb +0 -97
  293. data/spec/lib/search/base_spec.rb +0 -91
  294. data/spec/lib/search/variant_spec.rb +0 -115
  295. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  296. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  297. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  298. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  299. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  300. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  301. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  302. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  303. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  304. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  305. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  306. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  307. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  308. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  309. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  310. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  311. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  312. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  313. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  314. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  316. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  317. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  319. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  323. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  325. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  326. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  328. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  330. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  331. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  332. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  333. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  334. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  335. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  336. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  337. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  338. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  339. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  340. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  341. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  342. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  343. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  344. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  345. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  346. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  347. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  348. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  349. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  350. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  351. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  352. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  353. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  354. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  355. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  356. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  357. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  358. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  359. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  360. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  361. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  362. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  363. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  364. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  365. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  366. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  367. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  368. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  369. data/spec/lib/spree/core/version_spec.rb +0 -19
  370. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  371. data/spec/lib/spree/event_spec.rb +0 -130
  372. data/spec/lib/spree/localized_number_spec.rb +0 -45
  373. data/spec/lib/spree/migrations_spec.rb +0 -32
  374. data/spec/lib/spree/money_spec.rb +0 -298
  375. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  376. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  377. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  378. data/spec/lib/tasks/dummy_task.rake +0 -12
  379. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  380. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  381. data/spec/mailers/carton_mailer_spec.rb +0 -44
  382. data/spec/mailers/order_mailer_spec.rb +0 -117
  383. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  384. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  385. data/spec/mailers/test_mailer_spec.rb +0 -13
  386. data/spec/models/spree/ability_spec.rb +0 -279
  387. data/spec/models/spree/address_spec.rb +0 -399
  388. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  389. data/spec/models/spree/adjustment_spec.rb +0 -339
  390. data/spec/models/spree/asset_spec.rb +0 -25
  391. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  392. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  393. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  394. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  395. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  396. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  397. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  398. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  399. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  400. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  401. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  402. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  403. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  404. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  405. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  406. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  407. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  408. data/spec/models/spree/calculator_spec.rb +0 -43
  409. data/spec/models/spree/carton_spec.rb +0 -145
  410. data/spec/models/spree/classification_spec.rb +0 -126
  411. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  412. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  413. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  414. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  415. data/spec/models/spree/country_spec.rb +0 -154
  416. data/spec/models/spree/credit_card_spec.rb +0 -373
  417. data/spec/models/spree/customer_return_spec.rb +0 -294
  418. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  419. data/spec/models/spree/exchange_spec.rb +0 -76
  420. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  421. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  422. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  423. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  424. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  425. data/spec/models/spree/gateway_spec.rb +0 -14
  426. data/spec/models/spree/image_spec.rb +0 -25
  427. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  428. data/spec/models/spree/line_item_spec.rb +0 -240
  429. data/spec/models/spree/option_type_spec.rb +0 -16
  430. data/spec/models/spree/option_value_spec.rb +0 -52
  431. data/spec/models/spree/order/address_spec.rb +0 -52
  432. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  433. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  434. data/spec/models/spree/order/checkout_spec.rb +0 -740
  435. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  436. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  437. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  438. data/spec/models/spree/order/payment_spec.rb +0 -280
  439. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  440. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  441. data/spec/models/spree/order/totals_spec.rb +0 -26
  442. data/spec/models/spree/order/validations_spec.rb +0 -17
  443. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  444. data/spec/models/spree/order_capturing_spec.rb +0 -16
  445. data/spec/models/spree/order_contents_spec.rb +0 -362
  446. data/spec/models/spree/order_inventory_spec.rb +0 -285
  447. data/spec/models/spree/order_merger_spec.rb +0 -162
  448. data/spec/models/spree/order_mutex_spec.rb +0 -89
  449. data/spec/models/spree/order_promotion_spec.rb +0 -33
  450. data/spec/models/spree/order_shipping_spec.rb +0 -247
  451. data/spec/models/spree/order_spec.rb +0 -1687
  452. data/spec/models/spree/order_taxation_spec.rb +0 -128
  453. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  454. data/spec/models/spree/order_updater_spec.rb +0 -556
  455. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  456. data/spec/models/spree/payment_create_spec.rb +0 -195
  457. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  458. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  459. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  460. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  461. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  462. data/spec/models/spree/payment_method_spec.rb +0 -408
  463. data/spec/models/spree/payment_spec.rb +0 -1270
  464. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  465. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  466. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  467. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  468. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  469. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  470. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  471. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  472. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  473. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  474. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  475. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  476. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  477. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  478. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  479. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  480. data/spec/models/spree/preference_spec.rb +0 -79
  481. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  482. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  483. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  484. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  485. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  486. data/spec/models/spree/preferences/store_spec.rb +0 -40
  487. data/spec/models/spree/price_spec.rb +0 -150
  488. data/spec/models/spree/product/scopes_spec.rb +0 -164
  489. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  490. data/spec/models/spree/product_filter_spec.rb +0 -28
  491. data/spec/models/spree/product_property_spec.rb +0 -20
  492. data/spec/models/spree/product_spec.rb +0 -584
  493. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  494. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  495. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  496. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  497. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  498. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  499. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  500. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  501. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  502. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  503. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  504. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  505. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  506. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  507. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  508. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  509. data/spec/models/spree/promotion_action_spec.rb +0 -44
  510. data/spec/models/spree/promotion_category_spec.rb +0 -19
  511. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  512. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  513. data/spec/models/spree/promotion_code_spec.rb +0 -206
  514. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  515. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  516. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  517. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  518. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  519. data/spec/models/spree/promotion_spec.rb +0 -945
  520. data/spec/models/spree/refund_spec.rb +0 -200
  521. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  522. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  523. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  524. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  525. data/spec/models/spree/reimbursement_spec.rb +0 -278
  526. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  527. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  528. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  529. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  530. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  531. data/spec/models/spree/return_authorization_spec.rb +0 -226
  532. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  533. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  534. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  535. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  536. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  537. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  538. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  539. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  540. data/spec/models/spree/return_item_spec.rb +0 -785
  541. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  542. data/spec/models/spree/shipment_spec.rb +0 -914
  543. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  544. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  545. data/spec/models/spree/shipping_method_spec.rb +0 -292
  546. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  547. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  548. data/spec/models/spree/state_spec.rb +0 -43
  549. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  550. data/spec/models/spree/stock/availability_spec.rb +0 -143
  551. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  552. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  553. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  554. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  555. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  556. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  557. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  558. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  559. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  560. data/spec/models/spree/stock/package_spec.rb +0 -182
  561. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  562. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  563. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  564. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  565. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  566. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  567. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  568. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  569. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  570. data/spec/models/spree/stock_item_spec.rb +0 -348
  571. data/spec/models/spree/stock_location_spec.rb +0 -288
  572. data/spec/models/spree/stock_movement_spec.rb +0 -58
  573. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  574. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  575. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  576. data/spec/models/spree/store_credit_spec.rb +0 -900
  577. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  578. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  579. data/spec/models/spree/store_spec.rb +0 -156
  580. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  581. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  582. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  583. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  584. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  585. data/spec/models/spree/tax_category_spec.rb +0 -50
  586. data/spec/models/spree/tax_rate_spec.rb +0 -317
  587. data/spec/models/spree/taxon_spec.rb +0 -197
  588. data/spec/models/spree/taxonomy_spec.rb +0 -15
  589. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  590. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  591. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  592. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  593. data/spec/models/spree/user_spec.rb +0 -247
  594. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  595. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  596. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  597. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  598. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  599. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  600. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  601. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  602. data/spec/models/spree/variant_spec.rb +0 -862
  603. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  604. data/spec/models/spree/wallet_spec.rb +0 -155
  605. data/spec/models/spree/zone_spec.rb +0 -248
  606. data/spec/rails_helper.rb +0 -46
  607. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  608. data/spec/spec_helper.rb +0 -36
  609. data/spec/support/big_decimal.rb +0 -7
  610. data/spec/support/concerns/default_price.rb +0 -44
  611. data/spec/support/concerns/payment_source.rb +0 -66
  612. data/spec/support/concerns/working_factories.rb +0 -15
  613. data/spec/support/dummy_ability.rb +0 -7
  614. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  615. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  616. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  617. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  618. /data/{app/models → lib}/spree/user_class_handle.rb +0 -0
@@ -1,900 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StoreCredit do
6
- include ActiveSupport::Testing::TimeHelpers
7
-
8
- let(:currency) { "TEST" }
9
- let(:store_credit) { build(:store_credit, store_credit_attrs) }
10
- let(:store_credit_attrs) { {} }
11
-
12
- describe "callbacks" do
13
- subject { store_credit.save }
14
-
15
- context "amount used is greater than zero" do
16
- let(:store_credit) { create(:store_credit, amount: 100, amount_used: 1) }
17
-
18
- describe "#discard" do
19
- subject { store_credit.discard }
20
-
21
- it 'can not delete the store credit' do
22
- subject
23
- expect(store_credit.reload).to eq store_credit
24
- expect(store_credit.errors[:amount_used]).to include("is greater than zero. Can not delete store credit")
25
- expect(store_credit).not_to be_discarded
26
- end
27
- end
28
- end
29
-
30
- context "category is a non-expiring type" do
31
- let!(:secondary_credit_type) { create(:secondary_credit_type) }
32
- let(:store_credit) { build(:store_credit, credit_type: nil) }
33
-
34
- before do
35
- allow(store_credit.category).to receive(:non_expiring?).and_return(true)
36
- end
37
-
38
- it "sets the credit type to non-expiring" do
39
- subject
40
- expect(store_credit.credit_type.name).to eq secondary_credit_type.name
41
- end
42
- end
43
-
44
- context "category is an expiring type" do
45
- before do
46
- allow(store_credit.category).to receive(:non_expiring?).and_return(false)
47
- end
48
-
49
- it "sets the credit type to expiring" do
50
- subject
51
- expect(store_credit.credit_type.name).to eq "Expiring"
52
- end
53
- end
54
-
55
- context "the type is set" do
56
- let!(:secondary_credit_type) { create(:secondary_credit_type) }
57
- let(:store_credit) { build(:store_credit, credit_type: secondary_credit_type) }
58
-
59
- before do
60
- allow(store_credit.category).to receive(:non_expiring?).and_return(false)
61
- end
62
-
63
- it "doesn't overwrite the type" do
64
- expect{ subject }.to_not change{ store_credit.credit_type }
65
- end
66
- end
67
- end
68
-
69
- describe "validations" do
70
- describe "used amount should not be greater than the credited amount" do
71
- context "the used amount is defined" do
72
- let(:invalid_store_credit) { build(:store_credit, amount: 100, amount_used: 150) }
73
-
74
- it "should not be valid" do
75
- expect(invalid_store_credit).not_to be_valid
76
- end
77
-
78
- it "should set the correct error message" do
79
- invalid_store_credit.valid?
80
- expect(invalid_store_credit.errors.full_messages).to include("Amount Used cannot be greater than the credited amount")
81
- end
82
- end
83
-
84
- context "the used amount is not defined yet" do
85
- let(:store_credit) { build(:store_credit, amount: 100) }
86
-
87
- it "should be valid" do
88
- expect(store_credit).to be_valid
89
- end
90
- end
91
- end
92
-
93
- describe "amount used less than or equal to amount" do
94
- subject { build(:store_credit, amount_used: 101.0, amount: 100.0) }
95
-
96
- it "is not valid" do
97
- expect(subject).not_to be_valid
98
- end
99
-
100
- it "adds an error message about the invalid amount used" do
101
- subject.valid?
102
- expect(subject.errors[:amount_used]).to include("cannot be greater than the credited amount")
103
- end
104
- end
105
-
106
- describe "amount authorized less than or equal to amount" do
107
- subject { build(:store_credit, amount_authorized: 101.0, amount: 100.0) }
108
-
109
- it "is not valid" do
110
- expect(subject).not_to be_valid
111
- end
112
-
113
- it "adds an error message about the invalid authorized amount" do
114
- subject.valid?
115
- expect(subject.errors[:amount_authorized]).to include(" exceeds the available credit")
116
- end
117
- end
118
-
119
- describe "editing category" do
120
- let!(:store_credit) { create(:store_credit) }
121
- let!(:test_category) { create(:store_credit_category, name: "Testing") }
122
-
123
- subject { store_credit.update(category: test_category) }
124
-
125
- it "returns false" do
126
- expect(subject).to eq false
127
- end
128
-
129
- it "category doesn't change" do
130
- expect { subject }.not_to change { store_credit.reload.category }
131
- end
132
-
133
- it "adds an error message about not being able to edit the category" do
134
- subject
135
- expect(store_credit.errors[:category]).to include("cannot be modified")
136
- end
137
- end
138
- end
139
-
140
- describe "#display_amount" do
141
- it "returns a Spree::Money instance" do
142
- expect(store_credit.display_amount).to be_instance_of(Spree::Money)
143
- end
144
- end
145
-
146
- describe "#display_amount_used" do
147
- it "returns a Spree::Money instance" do
148
- expect(store_credit.display_amount_used).to be_instance_of(Spree::Money)
149
- end
150
- end
151
-
152
- describe "#display_amount_authorized" do
153
- it "returns a Spree::Money instance" do
154
- expect(store_credit.display_amount_authorized).to be_instance_of(Spree::Money)
155
- end
156
- end
157
-
158
- describe "#amount_remaining" do
159
- context "invalidated" do
160
- before { allow(store_credit).to receive(:invalidated?) { true } }
161
- it { expect(store_credit.amount_remaining).to eq 0.0 }
162
- end
163
-
164
- context "the amount_used is not defined" do
165
- context "the authorized amount is not defined" do
166
- it "returns the credited amount" do
167
- expect(store_credit.amount_remaining).to eq store_credit.amount
168
- end
169
- end
170
- context "the authorized amount is defined" do
171
- let(:authorized_amount) { 15.00 }
172
-
173
- before { store_credit.update(amount_authorized: authorized_amount) }
174
-
175
- it "subtracts the authorized amount from the credited amount" do
176
- expect(store_credit.amount_remaining).to eq(store_credit.amount - authorized_amount)
177
- end
178
- end
179
- end
180
-
181
- context "the amount_used is defined" do
182
- let(:amount_used) { 10.0 }
183
-
184
- before { store_credit.update(amount_used: amount_used) }
185
-
186
- context "the authorized amount is not defined" do
187
- it "subtracts the amount used from the credited amount" do
188
- expect(store_credit.amount_remaining).to eq(store_credit.amount - amount_used)
189
- end
190
- end
191
-
192
- context "the authorized amount is defined" do
193
- let(:authorized_amount) { 15.00 }
194
-
195
- before { store_credit.update(amount_authorized: authorized_amount) }
196
-
197
- it "subtracts the amount used and the authorized amount from the credited amount" do
198
- expect(store_credit.amount_remaining).to eq(store_credit.amount - amount_used - authorized_amount)
199
- end
200
- end
201
- end
202
- end
203
-
204
- describe "#authorize" do
205
- context "amount is valid" do
206
- let(:authorization_amount) { 1.0 }
207
- let(:added_authorization_amount) { 3.0 }
208
- let(:originator) { nil }
209
-
210
- context "amount has not been authorized yet" do
211
- before { store_credit.update(amount_authorized: authorization_amount) }
212
-
213
- it "returns true" do
214
- expect(store_credit.authorize(store_credit.amount - authorization_amount, store_credit.currency)).to be_truthy
215
- end
216
-
217
- it "adds the new amount to authorized amount" do
218
- store_credit.authorize(added_authorization_amount, store_credit.currency)
219
- expect(store_credit.reload.amount_authorized).to eq(authorization_amount + added_authorization_amount)
220
- end
221
-
222
- context "originator is present" do
223
- let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
224
-
225
- subject { store_credit.authorize(added_authorization_amount, store_credit.currency, action_originator: originator) }
226
-
227
- it "records the originator" do
228
- expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
229
- expect(Spree::StoreCreditEvent.last.originator).to eq originator
230
- end
231
- end
232
- end
233
-
234
- context "authorization has already happened" do
235
- let!(:auth_event) { create(:store_credit_auth_event, store_credit: store_credit) }
236
-
237
- before { store_credit.update(amount_authorized: store_credit.amount) }
238
-
239
- it "returns true" do
240
- expect(store_credit.authorize(store_credit.amount, store_credit.currency, action_authorization_code: auth_event.authorization_code)).to be true
241
- end
242
- end
243
- end
244
-
245
- context "amount is invalid" do
246
- it "returns false" do
247
- expect(store_credit.authorize(store_credit.amount * 2, store_credit.currency)).to be false
248
- end
249
- end
250
- end
251
-
252
- describe "#validate_authorization" do
253
- context "insufficient funds" do
254
- subject { store_credit.validate_authorization(store_credit.amount * 2, store_credit.currency) }
255
-
256
- it "returns false" do
257
- expect(subject).to be false
258
- end
259
-
260
- it "adds an error to the model" do
261
- subject
262
- expect(store_credit.errors.full_messages).to include("Store credit amount remaining is not sufficient")
263
- end
264
- end
265
-
266
- context "currency mismatch" do
267
- subject { store_credit.validate_authorization(store_credit.amount, "EUR") }
268
-
269
- it "returns false" do
270
- expect(subject).to be false
271
- end
272
-
273
- it "adds an error to the model" do
274
- subject
275
- expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
276
- end
277
- end
278
-
279
- context "valid authorization" do
280
- subject { store_credit.validate_authorization(store_credit.amount, store_credit.currency) }
281
-
282
- it "returns true" do
283
- expect(subject).to be true
284
- end
285
- end
286
-
287
- context 'troublesome floats' do
288
- # 8.21.to_d < 8.21 => true
289
- let(:store_credit_attrs) { { amount: 8.21 } }
290
-
291
- subject { store_credit.validate_authorization(store_credit_attrs[:amount], store_credit.currency) }
292
-
293
- it { is_expected.to be_truthy }
294
- end
295
- end
296
-
297
- describe "#capture" do
298
- let(:authorized_amount) { 10.00 }
299
- let(:auth_code) { "23-SC-20140602164814476128" }
300
-
301
- before do
302
- @original_authed_amount = store_credit.amount_authorized
303
- @auth_code = store_credit.authorize(authorized_amount, store_credit.currency)
304
- end
305
-
306
- context "insufficient funds" do
307
- subject { store_credit.capture(authorized_amount * 2, @auth_code, store_credit.currency) }
308
-
309
- it "returns false" do
310
- expect(subject).to be false
311
- end
312
-
313
- it "adds an error to the model" do
314
- subject
315
- expect(store_credit.errors.full_messages).to include("Unable to capture more than authorized amount")
316
- end
317
-
318
- it "does not update the store credit model" do
319
- expect { subject }.to_not change { store_credit }
320
- end
321
- end
322
-
323
- context "currency mismatch" do
324
- subject { store_credit.capture(authorized_amount, @auth_code, "EUR") }
325
-
326
- it "returns false" do
327
- expect(subject).to be false
328
- end
329
-
330
- it "adds an error to the model" do
331
- subject
332
- expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
333
- end
334
-
335
- it "does not update the store credit model" do
336
- expect { subject }.to_not change { store_credit }
337
- end
338
- end
339
-
340
- context "valid capture" do
341
- let(:remaining_authorized_amount) { 1 }
342
- let(:originator) { nil }
343
-
344
- subject { store_credit.capture(authorized_amount - remaining_authorized_amount, @auth_code, store_credit.currency, action_originator: originator) }
345
-
346
- it "returns true" do
347
- expect(subject).to be_truthy
348
- end
349
-
350
- it "updates the authorized amount to the difference between the store credits total authed amount and the authorized amount for this event" do
351
- subject
352
- expect(store_credit.reload.amount_authorized).to eq(@original_authed_amount)
353
- end
354
-
355
- it "updates the used amount to the current used amount plus the captured amount" do
356
- subject
357
- expect(store_credit.reload.amount_used).to eq authorized_amount - remaining_authorized_amount
358
- end
359
-
360
- context "originator is present" do
361
- let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
362
-
363
- it "records the originator" do
364
- expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
365
- expect(Spree::StoreCreditEvent.last.originator).to eq originator
366
- end
367
- end
368
- end
369
- end
370
-
371
- describe "#void" do
372
- let(:auth_code) { "1-SC-20141111111111" }
373
- let(:store_credit) { create(:store_credit, amount_used: 150.0) }
374
- let(:originator) { nil }
375
-
376
- subject do
377
- store_credit.void(auth_code, action_originator: originator)
378
- end
379
-
380
- context "no event found for auth_code" do
381
- it "returns false" do
382
- expect(subject).to be false
383
- end
384
-
385
- it "adds an error to the model" do
386
- subject
387
- expect(store_credit.errors.full_messages).to include("Unable to void code: #{auth_code}")
388
- end
389
- end
390
-
391
- context "capture event found for auth_code" do
392
- let(:captured_amount) { 10.0 }
393
- let!(:capture_event) {
394
- create(:store_credit_auth_event,
395
- action: Spree::StoreCredit::CAPTURE_ACTION,
396
- authorization_code: auth_code,
397
- amount: captured_amount,
398
- store_credit: store_credit)
399
- }
400
-
401
- it "returns false" do
402
- expect(subject).to be false
403
- end
404
-
405
- it "does not change the amount used on the store credit" do
406
- expect { subject }.to_not change{ store_credit.amount_used.to_f }
407
- end
408
- end
409
-
410
- context "auth event found for auth_code" do
411
- let(:auth_event) { create(:store_credit_auth_event) }
412
-
413
- let(:authorized_amount) { 10.0 }
414
- let!(:auth_event) {
415
- create(:store_credit_auth_event,
416
- authorization_code: auth_code,
417
- amount: authorized_amount,
418
- store_credit: store_credit)
419
- }
420
-
421
- it "returns true" do
422
- expect(subject).to be true
423
- end
424
-
425
- it "returns the authorized amount to the store credit" do
426
- expect { subject }.to change{ store_credit.amount_authorized.to_f }.by(-authorized_amount)
427
- end
428
-
429
- context "originator is present" do
430
- let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
431
-
432
- it "records the originator" do
433
- expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
434
- expect(Spree::StoreCreditEvent.last.originator).to eq originator
435
- end
436
- end
437
- end
438
- end
439
-
440
- describe "#credit" do
441
- let(:event_auth_code) { "1-SC-20141111111111" }
442
- let(:amount_used) { 10.0 }
443
- let(:store_credit) { create(:store_credit, amount_used: amount_used) }
444
- let!(:capture_event) {
445
- create(:store_credit_auth_event,
446
- action: Spree::StoreCredit::CAPTURE_ACTION,
447
- authorization_code: event_auth_code,
448
- amount: captured_amount,
449
- store_credit: store_credit)
450
- }
451
- let(:originator) { nil }
452
-
453
- subject { store_credit.credit(credit_amount, auth_code, currency, action_originator: originator) }
454
-
455
- context "currency does not match" do
456
- let(:currency) { "AUD" }
457
- let(:credit_amount) { 5.0 }
458
- let(:captured_amount) { 100.0 }
459
- let(:auth_code) { event_auth_code }
460
-
461
- it "returns false" do
462
- expect(subject).to be false
463
- end
464
-
465
- it "adds an error message about the currency mismatch" do
466
- subject
467
- expect(store_credit.errors.full_messages).to include("Store credit currency does not match order currency")
468
- end
469
- end
470
-
471
- context "unable to find capture event" do
472
- let(:currency) { "USD" }
473
- let(:credit_amount) { 5.0 }
474
- let(:captured_amount) { 100.0 }
475
- let(:auth_code) { "UNKNOWN_CODE" }
476
-
477
- it "returns false" do
478
- expect(subject).to be false
479
- end
480
-
481
- it "adds an error message about the currency mismatch" do
482
- subject
483
- expect(store_credit.errors.full_messages).to include("Unable to credit code: #{auth_code}")
484
- end
485
- end
486
-
487
- context "amount is more than what is captured" do
488
- let(:currency) { "USD" }
489
- let(:credit_amount) { 100.0 }
490
- let(:captured_amount) { 5.0 }
491
- let(:auth_code) { event_auth_code }
492
-
493
- it "returns false" do
494
- expect(subject).to be false
495
- end
496
-
497
- it "adds an error message about the currency mismatch" do
498
- subject
499
- expect(store_credit.errors.full_messages).to include("Unable to credit code: #{auth_code}")
500
- end
501
- end
502
-
503
- context "amount is successfully credited" do
504
- let(:currency) { "USD" }
505
- let(:credit_amount) { 5.0 }
506
- let(:captured_amount) { 100.0 }
507
- let(:auth_code) { event_auth_code }
508
-
509
- context "credit_to_new_allocation is set" do
510
- before { stub_spree_preferences(credit_to_new_allocation: true) }
511
-
512
- it "returns true" do
513
- expect(subject).to be true
514
- end
515
-
516
- it "creates a new store credit record" do
517
- expect { subject }.to change { Spree::StoreCredit.count }.by(1)
518
- end
519
-
520
- it "does not create a new store credit event on the parent store credit" do
521
- expect { subject }.to_not change { store_credit.store_credit_events.count }
522
- end
523
-
524
- context "credits the passed amount to a new store credit record" do
525
- before do
526
- subject
527
- @new_store_credit = Spree::StoreCredit.last
528
- end
529
-
530
- it "does not set the amount used on the originating store credit" do
531
- expect(store_credit.reload.amount_used).to eq amount_used
532
- end
533
-
534
- it "sets the correct amount on the new store credit" do
535
- expect(@new_store_credit.amount).to eq credit_amount
536
- end
537
-
538
- [:user_id, :category_id, :created_by_id, :currency, :type_id].each do |attr|
539
- it "sets attribute #{attr} inherited from the originating store credit" do
540
- expect(@new_store_credit.send(attr)).to eq store_credit.send(attr)
541
- end
542
- end
543
-
544
- it "sets a memo" do
545
- expect(@new_store_credit.memo).to eq "This is a credit from store credit ID #{store_credit.id}"
546
- end
547
- end
548
-
549
- context "originator is present" do
550
- let(:originator) { create(:user) } # won't actually be a user. just giving it a valid model here
551
-
552
- it "records the originator" do
553
- expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
554
- expect(Spree::StoreCreditEvent.last.originator).to eq originator
555
- end
556
- end
557
- end
558
-
559
- context "credit_to_new_allocation is not set" do
560
- it "returns true" do
561
- expect(subject).to be true
562
- end
563
-
564
- it "credits the passed amount to the store credit amount used" do
565
- subject
566
- expect(store_credit.reload.amount_used).to eq(amount_used - credit_amount)
567
- end
568
-
569
- it "creates a new store credit event" do
570
- expect { subject }.to change { store_credit.store_credit_events.count }.by(1)
571
- end
572
- end
573
- end
574
- end
575
-
576
- describe "#amount_used" do
577
- context "amount used is not defined" do
578
- subject { Spree::StoreCredit.new }
579
-
580
- it "returns zero" do
581
- expect(subject.amount_used).to be_zero
582
- end
583
- end
584
-
585
- context "amount used is defined" do
586
- let(:amount_used) { 100.0 }
587
-
588
- subject { create(:store_credit, amount_used: amount_used) }
589
-
590
- it "returns the attribute value" do
591
- expect(subject.amount_used).to eq amount_used
592
- end
593
- end
594
- end
595
-
596
- describe "#amount_authorized" do
597
- context "amount authorized is not defined" do
598
- subject { Spree::StoreCredit.new }
599
-
600
- it "returns zero" do
601
- expect(subject.amount_authorized).to be_zero
602
- end
603
- end
604
-
605
- context "amount authorized is defined" do
606
- let(:amount_authorized) { 100.0 }
607
-
608
- subject { create(:store_credit, amount_authorized: amount_authorized) }
609
-
610
- it "returns the attribute value" do
611
- expect(subject.amount_authorized).to eq amount_authorized
612
- end
613
- end
614
- end
615
-
616
- describe "#can_capture?" do
617
- let(:store_credit) { create(:store_credit) }
618
- let(:payment) { create(:payment, state: payment_state) }
619
-
620
- subject { store_credit.can_capture?(payment) }
621
-
622
- context "pending payment" do
623
- let(:payment_state) { 'pending' }
624
-
625
- it "returns true" do
626
- expect(subject).to be true
627
- end
628
- end
629
-
630
- context "checkout payment" do
631
- let(:payment_state) { 'checkout' }
632
-
633
- it "returns true" do
634
- expect(subject).to be true
635
- end
636
- end
637
-
638
- context "void payment" do
639
- let(:payment_state) { Spree::StoreCredit::VOID_ACTION }
640
-
641
- it "returns false" do
642
- expect(subject).to be false
643
- end
644
- end
645
-
646
- context "invalid payment" do
647
- let(:payment_state) { 'invalid' }
648
-
649
- it "returns false" do
650
- expect(subject).to be false
651
- end
652
- end
653
-
654
- context "complete payment" do
655
- let(:payment_state) { 'completed' }
656
-
657
- it "returns false" do
658
- expect(subject).to be false
659
- end
660
- end
661
- end
662
-
663
- describe "#can_void?" do
664
- let(:store_credit) { create(:store_credit) }
665
- let(:payment) { create(:payment, state: payment_state) }
666
-
667
- subject { store_credit.can_void?(payment) }
668
-
669
- context "pending payment" do
670
- let(:payment_state) { 'pending' }
671
-
672
- it "returns true" do
673
- expect(subject).to be true
674
- end
675
- end
676
-
677
- context "checkout payment" do
678
- let(:payment_state) { 'checkout' }
679
-
680
- it "returns false" do
681
- expect(subject).to be false
682
- end
683
- end
684
-
685
- context "void payment" do
686
- let(:payment_state) { Spree::StoreCredit::VOID_ACTION }
687
-
688
- it "returns false" do
689
- expect(subject).to be false
690
- end
691
- end
692
-
693
- context "invalid payment" do
694
- let(:payment_state) { 'invalid' }
695
-
696
- it "returns false" do
697
- expect(subject).to be false
698
- end
699
- end
700
-
701
- context "complete payment" do
702
- let(:payment_state) { 'completed' }
703
-
704
- it "returns false" do
705
- expect(subject).to be false
706
- end
707
- end
708
- end
709
-
710
- describe "#can_credit?" do
711
- let(:store_credit) { create(:store_credit) }
712
- let(:payment) { create(:payment, state: payment_state) }
713
-
714
- subject { store_credit.can_credit?(payment) }
715
-
716
- context "payment is not completed" do
717
- let(:payment_state) { "pending" }
718
-
719
- it "returns false" do
720
- expect(subject).to be false
721
- end
722
- end
723
-
724
- context "payment is completed" do
725
- let(:payment_state) { "completed" }
726
-
727
- context "credit is owed on the order" do
728
- before { allow(payment.order).to receive_messages(payment_state: 'credit_owed') }
729
-
730
- context "payment doesn't have allowed credit" do
731
- before { allow(payment).to receive_messages(credit_allowed: 0.0) }
732
-
733
- it "returns false" do
734
- expect(subject).to be false
735
- end
736
- end
737
-
738
- context "payment has allowed credit" do
739
- before { allow(payment).to receive_messages(credit_allowed: 5.0) }
740
-
741
- it "returns true" do
742
- expect(subject).to be true
743
- end
744
- end
745
- end
746
- end
747
-
748
- describe "#store_event" do
749
- context "create" do
750
- context "user has one store credit" do
751
- let(:store_credit_amount) { 100.0 }
752
-
753
- subject { create(:store_credit, amount: store_credit_amount) }
754
-
755
- it "creates a store credit event" do
756
- expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
757
- end
758
-
759
- it "makes the store credit event an allocation event" do
760
- expect(subject.store_credit_events.first.action).to eq Spree::StoreCredit::ALLOCATION_ACTION
761
- end
762
-
763
- it "saves the user's total store credit in the event" do
764
- expect(subject.store_credit_events.first.user_total_amount).to eq store_credit_amount
765
- end
766
-
767
- it "saves the user's unused store credit in the event" do
768
- expect(subject.store_credit_events.first.amount_remaining).to eq store_credit_amount
769
- end
770
- end
771
-
772
- context "user has multiple store credits" do
773
- let(:store_credit_amount) { 100.0 }
774
- let(:additional_store_credit_amount) { 200.0 }
775
- let(:user) { create(:user) }
776
-
777
- let!(:store_credits) do
778
- [
779
- create(:store_credit, user: user, amount: store_credit_amount),
780
- create(:store_credit, user: user.reload, amount: additional_store_credit_amount)
781
- ]
782
- end
783
-
784
- subject { store_credits.flat_map(&:store_credit_events) }
785
-
786
- it "saves the user's total store credit in the event" do
787
- expect(subject.first.user_total_amount).to eq store_credit_amount
788
- expect(subject.last.user_total_amount).to eq(store_credit_amount + additional_store_credit_amount)
789
- end
790
-
791
- it "saves the user's unused store credit in the event" do
792
- expect(subject.first.amount_remaining).to eq store_credit_amount
793
- expect(subject.last.amount_remaining).to eq additional_store_credit_amount
794
- end
795
- end
796
-
797
- context "an action is specified" do
798
- it "creates an event with the set action" do
799
- store_credit = build(:store_credit)
800
- store_credit.action = Spree::StoreCredit::VOID_ACTION
801
- store_credit.action_authorization_code = "1-SC-TEST"
802
-
803
- expect { store_credit.save! }.to change { Spree::StoreCreditEvent.where(action: Spree::StoreCredit::VOID_ACTION).count }.by(1)
804
- end
805
- end
806
- end
807
- end
808
- end
809
-
810
- describe "#update_amount" do
811
- let(:invalidation_user) { create(:user) }
812
- let(:invalidation_reason) { create(:store_credit_reason) }
813
-
814
- subject { store_credit.update_amount(amount, invalidation_reason, invalidation_user) }
815
-
816
- context "amount is valid" do
817
- let(:amount) { 10.0 }
818
-
819
- before { store_credit.update!(amount: 30.0) }
820
-
821
- it "returns true" do
822
- expect(subject).to eq true
823
- end
824
-
825
- it "creates an adjustment store credit event" do
826
- expect { subject }.to change { store_credit.store_credit_events.where(action: Spree::StoreCredit::ADJUSTMENT_ACTION).count }.from(0).to(1)
827
- end
828
-
829
- it "sets the adjustment amount on the store credit event correctly" do
830
- subject
831
- expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::ADJUSTMENT_ACTION).amount).to eq(-20)
832
- end
833
-
834
- it "sets the originator on the store credit event correctly" do
835
- subject
836
- expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::ADJUSTMENT_ACTION).originator).to eq invalidation_user
837
- end
838
- end
839
-
840
- context "amount is invalid" do
841
- let(:amount) { -10.0 }
842
-
843
- it "returns false" do
844
- expect(subject).to eq false
845
- end
846
-
847
- it "doesn't create an adjustment store credit event" do
848
- expect { subject }.to_not change { store_credit.store_credit_events.where(action: Spree::StoreCredit::ADJUSTMENT_ACTION).count }
849
- end
850
- end
851
- end
852
-
853
- describe "#invalidate" do
854
- let(:invalidation_user) { create(:user) }
855
- let(:invalidation_reason) { create(:store_credit_reason) }
856
-
857
- before do
858
- store_credit.save!
859
- end
860
-
861
- subject { store_credit.invalidate(invalidation_reason, invalidation_user) }
862
-
863
- it "sets the invalidated_at field to the current time" do
864
- invalidated_at = 2.minutes.from_now
865
- travel_to(invalidated_at) do
866
- subject
867
- expect(store_credit.invalidated_at).to be_within(1.second).of invalidated_at
868
- end
869
- end
870
-
871
- context "there is an uncaptured authorization" do
872
- before { store_credit.authorize(5.0, "USD") }
873
- it "prevents invalidation" do
874
- expect { subject }.to_not change { store_credit.reload.invalidated_at }
875
- expect(store_credit.errors[:invalidated_at].join).to match /uncaptured authorization/
876
- end
877
- end
878
-
879
- context "there is a captured authorization" do
880
- before do
881
- auth_code = store_credit.authorize(5.0, "USD")
882
- store_credit.capture(5.0, auth_code, "USD")
883
- end
884
-
885
- it "can invalidate the rest of the store credit" do
886
- expect { subject }.to change { store_credit.reload.invalidated_at }
887
- expect(store_credit.errors).to be_blank
888
- end
889
-
890
- it "creates a store credit event for the invalidation" do
891
- expect { subject }.to change { store_credit.store_credit_events.where(action: Spree::StoreCredit::INVALIDATE_ACTION).count }.from(0).to(1)
892
- end
893
-
894
- it "assigns the originator as the user that is performing the invalidation" do
895
- subject
896
- expect(store_credit.store_credit_events.find_by(action: Spree::StoreCredit::INVALIDATE_ACTION).originator).to eq invalidation_user
897
- end
898
- end
899
- end
900
- end