solidus_core 2.10.3 → 2.11.4

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.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (552) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. data/spec/support/dummy_ability.rb +0 -7
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StoreCreditCategory, type: :model do
6
- describe "#non_expiring?" do
7
- let(:store_credit_category) { build(:store_credit_category, name: category_name) }
8
-
9
- context "non-expiring type store credit" do
10
- let(:category_name) { "Non-expiring" }
11
- it { expect(store_credit_category).to be_non_expiring }
12
- end
13
-
14
- context "expiring type store credit" do
15
- let(:category_name) { "Expiring" }
16
- it { expect(store_credit_category).not_to be_non_expiring }
17
- end
18
- end
19
- end
@@ -1,328 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StoreCreditEvent do
6
- describe ".exposed_events" do
7
- [
8
- Spree::StoreCredit::ELIGIBLE_ACTION,
9
- Spree::StoreCredit::AUTHORIZE_ACTION
10
- ].each do |action|
11
- let(:action) { action }
12
- it "excludes #{action} actions" do
13
- event = create(:store_credit_event, action: action)
14
- expect(described_class.exposed_events).not_to include event
15
- end
16
- end
17
-
18
- [
19
- Spree::StoreCredit::VOID_ACTION,
20
- Spree::StoreCredit::CREDIT_ACTION,
21
- Spree::StoreCredit::CAPTURE_ACTION,
22
- Spree::StoreCredit::ALLOCATION_ACTION
23
- ].each do |action|
24
- it "includes #{action} actions" do
25
- event = create(:store_credit_event, action: action)
26
- expect(described_class.exposed_events).to include event
27
- end
28
- end
29
-
30
- it "excludes invalidated store credit events" do
31
- invalidated_store_credit = create(:store_credit, invalidated_at: Time.current)
32
- event = create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION, store_credit: invalidated_store_credit)
33
- expect(described_class.exposed_events).not_to include event
34
- end
35
- end
36
-
37
- describe "update store credit reason validation" do
38
- subject { event.valid? }
39
-
40
- context "adjustment event" do
41
- context "has a store credit reason" do
42
- let(:event) { build(:store_credit_adjustment_event) }
43
-
44
- it "returns true" do
45
- expect(subject).to eq true
46
- end
47
- end
48
-
49
- context "doesn't have a store credit reason" do
50
- let(:event) { build(:store_credit_adjustment_event, store_credit_reason: nil) }
51
-
52
- it "returns false" do
53
- expect(subject).to eq false
54
- end
55
-
56
- it "adds an error message indicating the store credit reason is missing" do
57
- subject
58
- expect(event.errors.full_messages).to match ["Store credit reason can't be blank"]
59
- end
60
- end
61
- end
62
-
63
- context "invalidate event" do
64
- context "has a store credit reason" do
65
- let(:event) { build(:store_credit_invalidate_event) }
66
-
67
- it "returns true" do
68
- expect(subject).to eq true
69
- end
70
- end
71
-
72
- context "doesn't have a store credit reason" do
73
- let(:event) { build(:store_credit_invalidate_event, store_credit_reason: nil) }
74
-
75
- it "returns false" do
76
- expect(subject).to eq false
77
- end
78
-
79
- it "adds an error message indicating the store credit reason is missing" do
80
- subject
81
- expect(event.errors.full_messages).to match ["Store credit reason can't be blank"]
82
- end
83
- end
84
- end
85
-
86
- context "event doesn't require a store credit reason" do
87
- let(:event) { build(:store_credit_auth_event) }
88
-
89
- it "returns true" do
90
- expect(subject).to eq true
91
- end
92
- end
93
- end
94
-
95
- describe "#capture_action?" do
96
- subject { event.capture_action? }
97
-
98
- context "for capture events" do
99
- let(:event) { create(:store_credit_capture_event) }
100
-
101
- it "returns true" do
102
- expect(subject).to eq true
103
- end
104
- end
105
-
106
- context "for non-capture events" do
107
- let(:event) { create(:store_credit_auth_event) }
108
-
109
- it "returns false" do
110
- expect(subject).to eq false
111
- end
112
- end
113
- end
114
-
115
- describe "#authorization_action?" do
116
- subject { event.authorization_action? }
117
-
118
- context "for auth events" do
119
- let(:event) { create(:store_credit_auth_event) }
120
-
121
- it "returns true" do
122
- expect(subject).to eq true
123
- end
124
- end
125
-
126
- context "for non-auth events" do
127
- let(:event) { create(:store_credit_capture_event) }
128
-
129
- it "returns false" do
130
- expect(subject).to eq false
131
- end
132
- end
133
- end
134
-
135
- describe "#action_requires_reason?" do
136
- subject { event.action_requires_reason? }
137
-
138
- context "for adjustment events" do
139
- let(:event) { create(:store_credit_adjustment_event) }
140
-
141
- it "returns true" do
142
- expect(subject).to eq true
143
- end
144
- end
145
-
146
- context "for invalidate events" do
147
- let(:event) { create(:store_credit_invalidate_event) }
148
-
149
- it "returns true" do
150
- expect(subject).to eq true
151
- end
152
- end
153
-
154
- context "for capture events" do
155
- let(:event) { create(:store_credit_capture_event) }
156
-
157
- it "returns false" do
158
- expect(subject).to eq false
159
- end
160
- end
161
-
162
- context "for authorize events" do
163
- let(:event) { create(:store_credit_auth_event) }
164
-
165
- it "returns false" do
166
- expect(subject).to eq false
167
- end
168
- end
169
-
170
- context "for allocation events" do
171
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ALLOCATION_ACTION) }
172
-
173
- it "returns false" do
174
- expect(subject).to eq false
175
- end
176
- end
177
-
178
- context "for void events" do
179
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION) }
180
-
181
- it "returns false" do
182
- expect(subject).to eq false
183
- end
184
- end
185
-
186
- context "for credit events" do
187
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::CREDIT_ACTION) }
188
-
189
- it "returns false" do
190
- expect(subject).to eq false
191
- end
192
- end
193
- end
194
-
195
- describe "#display_amount" do
196
- let(:event_amount) { 120.0 }
197
-
198
- subject { create(:store_credit_auth_event, amount: event_amount) }
199
-
200
- it "returns a Spree::Money instance" do
201
- expect(subject.display_amount).to be_instance_of(Spree::Money)
202
- end
203
-
204
- it "uses the events amount attribute" do
205
- expect(subject.display_amount).to eq Spree::Money.new(event_amount, { currency: subject.currency })
206
- end
207
- end
208
-
209
- describe "#display_user_total_amount" do
210
- let(:user_total_amount) { 300.0 }
211
-
212
- subject { create(:store_credit_auth_event, user_total_amount: user_total_amount) }
213
-
214
- it "returns a Spree::Money instance" do
215
- expect(subject.display_user_total_amount).to be_instance_of(Spree::Money)
216
- end
217
-
218
- it "uses the events user_total_amount attribute" do
219
- expect(subject.display_user_total_amount).to eq Spree::Money.new(user_total_amount, { currency: subject.currency })
220
- end
221
- end
222
-
223
- describe "#display_remaining_amount" do
224
- let(:amount_remaining) { 300.0 }
225
-
226
- subject { create(:store_credit_auth_event, amount_remaining: amount_remaining) }
227
-
228
- it "returns a Spree::Money instance" do
229
- expect(subject.display_remaining_amount).to be_instance_of(Spree::Money)
230
- end
231
-
232
- it "uses the events amount_remaining attribute" do
233
- expect(subject.display_remaining_amount).to eq Spree::Money.new(amount_remaining, { currency: subject.currency })
234
- end
235
- end
236
-
237
- describe "#display_event_date" do
238
- let(:date) { Time.zone.parse("2014-06-01") }
239
-
240
- subject { create(:store_credit_auth_event, created_at: date) }
241
-
242
- it "returns the date the event was created with the format month/date/year" do
243
- expect(subject.display_event_date).to eq "June 01, 2014"
244
- end
245
- end
246
-
247
- describe "#display_action" do
248
- subject { event.display_action }
249
-
250
- context "capture event" do
251
- let(:event) { create(:store_credit_capture_event) }
252
-
253
- it "returns the action's display text" do
254
- expect(subject).to eq "Used"
255
- end
256
- end
257
-
258
- context "allocation event" do
259
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ALLOCATION_ACTION) }
260
-
261
- it "returns the action's display text" do
262
- expect(subject).to eq "Added"
263
- end
264
- end
265
-
266
- context "void event" do
267
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::VOID_ACTION) }
268
-
269
- it "returns the action's display text" do
270
- expect(subject).to eq "Credit"
271
- end
272
- end
273
-
274
- context "credit event" do
275
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::CREDIT_ACTION) }
276
-
277
- it "returns the action's display text" do
278
- expect(subject).to eq "Credit"
279
- end
280
- end
281
-
282
- context "adjustment event" do
283
- let(:event) { create(:store_credit_adjustment_event) }
284
-
285
- it "returns the action's display text" do
286
- expect(subject).to eq "Adjustment"
287
- end
288
- end
289
-
290
- context "authorize event" do
291
- let(:event) { create(:store_credit_auth_event) }
292
-
293
- it "returns nil" do
294
- expect(subject).to be_nil
295
- end
296
- end
297
-
298
- context "eligible event" do
299
- let(:event) { create(:store_credit_event, action: Spree::StoreCredit::ELIGIBLE_ACTION) }
300
-
301
- it "returns nil" do
302
- expect(subject).to be_nil
303
- end
304
- end
305
- end
306
-
307
- describe "#order" do
308
- context "there is no associated payment with the event" do
309
- subject { create(:store_credit_auth_event) }
310
-
311
- it "returns nil" do
312
- expect(subject.order).to be_nil
313
- end
314
- end
315
-
316
- context "there is an associated payment with the event" do
317
- let(:authorization_code) { "1-SC-TEST" }
318
- let(:order) { create(:order) }
319
- let!(:payment) { create(:store_credit_payment, order: order, response_code: authorization_code) }
320
-
321
- subject { create(:store_credit_auth_event, action: Spree::StoreCredit::CAPTURE_ACTION, authorization_code: authorization_code) }
322
-
323
- it "returns the order associated with the payment" do
324
- expect(subject.order).to eq order
325
- end
326
- end
327
- end
328
- end
@@ -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