solidus_core 2.10.2 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/engine.rb +39 -2
  109. data/lib/spree/core/importer/order.rb +24 -10
  110. data/lib/spree/core/permalinks.rb +1 -3
  111. data/lib/spree/core/product_filters.rb +6 -5
  112. data/lib/spree/core/state_machines.rb +20 -1
  113. data/lib/spree/core/state_machines/order.rb +249 -0
  114. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  115. data/lib/spree/core/version.rb +1 -1
  116. data/lib/spree/encryptor.rb +25 -0
  117. data/lib/spree/event.rb +40 -7
  118. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  119. data/lib/spree/event/configuration.rb +11 -6
  120. data/lib/spree/event/subscriber.rb +38 -18
  121. data/lib/spree/event/subscriber_registry.rb +92 -0
  122. data/lib/spree/i18n.rb +1 -1
  123. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  124. data/lib/spree/paranoia_deprecations.rb +32 -12
  125. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  126. data/lib/spree/permission_sets/default_customer.rb +16 -16
  127. data/lib/spree/permission_sets/order_display.rb +11 -11
  128. data/lib/spree/permission_sets/order_management.rb +1 -1
  129. data/lib/spree/permission_sets/product_display.rb +9 -9
  130. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  131. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  132. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  133. data/lib/spree/permission_sets/stock_display.rb +2 -2
  134. data/lib/spree/permission_sets/stock_management.rb +1 -1
  135. data/lib/spree/permission_sets/user_display.rb +3 -3
  136. data/lib/spree/permission_sets/user_management.rb +4 -3
  137. data/lib/spree/permitted_attributes.rb +4 -3
  138. data/lib/spree/preferences/preferable.rb +4 -3
  139. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  140. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  141. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  142. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  143. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  144. data/lib/spree/testing_support/common_rake.rb +3 -3
  145. data/lib/spree/testing_support/dummy_app.rb +44 -23
  146. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  147. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  148. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  149. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  151. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  152. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  153. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  154. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  155. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  156. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  157. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  158. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  159. data/lib/spree/testing_support/job_helpers.rb +24 -0
  160. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  161. data/lib/spree/testing_support/preferences.rb +3 -1
  162. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  163. data/lib/spree/testing_support/translations.rb +25 -0
  164. data/solidus_core.gemspec +8 -5
  165. metadata +81 -360
  166. data/script/rails +0 -10
  167. data/spec/fixtures/thinking-cat.jpg +0 -0
  168. data/spec/helpers/base_helper_spec.rb +0 -168
  169. data/spec/helpers/products_helper_spec.rb +0 -202
  170. data/spec/helpers/taxons_helper_spec.rb +0 -43
  171. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  172. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  173. data/spec/lib/i18n_spec.rb +0 -97
  174. data/spec/lib/search/base_spec.rb +0 -91
  175. data/spec/lib/search/variant_spec.rb +0 -115
  176. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  177. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  178. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  179. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  180. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  181. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  182. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  183. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  184. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  185. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  186. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  187. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  188. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  189. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  190. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  191. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  194. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  198. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  204. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  206. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  209. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  214. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  223. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  224. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  226. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  228. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  230. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  237. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  243. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  248. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  249. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  250. data/spec/lib/spree/core/version_spec.rb +0 -19
  251. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  252. data/spec/lib/spree/event_spec.rb +0 -130
  253. data/spec/lib/spree/localized_number_spec.rb +0 -45
  254. data/spec/lib/spree/migrations_spec.rb +0 -32
  255. data/spec/lib/spree/money_spec.rb +0 -298
  256. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  257. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  258. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  259. data/spec/lib/tasks/dummy_task.rake +0 -12
  260. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  261. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  262. data/spec/mailers/carton_mailer_spec.rb +0 -44
  263. data/spec/mailers/order_mailer_spec.rb +0 -117
  264. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  265. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  266. data/spec/mailers/test_mailer_spec.rb +0 -13
  267. data/spec/models/spree/ability_spec.rb +0 -279
  268. data/spec/models/spree/address_spec.rb +0 -399
  269. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  270. data/spec/models/spree/adjustment_spec.rb +0 -339
  271. data/spec/models/spree/asset_spec.rb +0 -25
  272. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  273. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  274. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  275. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  276. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  277. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  278. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  279. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  280. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  281. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  282. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  283. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  284. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  285. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  286. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  287. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  288. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  289. data/spec/models/spree/calculator_spec.rb +0 -43
  290. data/spec/models/spree/carton_spec.rb +0 -145
  291. data/spec/models/spree/classification_spec.rb +0 -126
  292. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  293. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  294. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  295. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  296. data/spec/models/spree/country_spec.rb +0 -154
  297. data/spec/models/spree/credit_card_spec.rb +0 -373
  298. data/spec/models/spree/customer_return_spec.rb +0 -294
  299. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  300. data/spec/models/spree/exchange_spec.rb +0 -76
  301. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  302. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  303. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  305. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  306. data/spec/models/spree/gateway_spec.rb +0 -14
  307. data/spec/models/spree/image_spec.rb +0 -25
  308. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  309. data/spec/models/spree/line_item_spec.rb +0 -240
  310. data/spec/models/spree/option_type_spec.rb +0 -16
  311. data/spec/models/spree/option_value_spec.rb +0 -52
  312. data/spec/models/spree/order/address_spec.rb +0 -52
  313. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  314. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  315. data/spec/models/spree/order/checkout_spec.rb +0 -740
  316. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  317. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  318. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  319. data/spec/models/spree/order/payment_spec.rb +0 -280
  320. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  321. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  322. data/spec/models/spree/order/totals_spec.rb +0 -26
  323. data/spec/models/spree/order/validations_spec.rb +0 -17
  324. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  325. data/spec/models/spree/order_capturing_spec.rb +0 -16
  326. data/spec/models/spree/order_contents_spec.rb +0 -362
  327. data/spec/models/spree/order_inventory_spec.rb +0 -285
  328. data/spec/models/spree/order_merger_spec.rb +0 -162
  329. data/spec/models/spree/order_mutex_spec.rb +0 -89
  330. data/spec/models/spree/order_promotion_spec.rb +0 -33
  331. data/spec/models/spree/order_shipping_spec.rb +0 -247
  332. data/spec/models/spree/order_spec.rb +0 -1687
  333. data/spec/models/spree/order_taxation_spec.rb +0 -128
  334. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  335. data/spec/models/spree/order_updater_spec.rb +0 -556
  336. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  337. data/spec/models/spree/payment_create_spec.rb +0 -195
  338. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  339. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  340. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  341. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  342. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  343. data/spec/models/spree/payment_method_spec.rb +0 -408
  344. data/spec/models/spree/payment_spec.rb +0 -1270
  345. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  346. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  347. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  348. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  349. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  350. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  351. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  352. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  353. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  354. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  355. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  356. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  358. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  359. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  360. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  361. data/spec/models/spree/preference_spec.rb +0 -79
  362. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  363. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  364. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  365. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  366. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  367. data/spec/models/spree/preferences/store_spec.rb +0 -40
  368. data/spec/models/spree/price_spec.rb +0 -150
  369. data/spec/models/spree/product/scopes_spec.rb +0 -164
  370. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  371. data/spec/models/spree/product_filter_spec.rb +0 -28
  372. data/spec/models/spree/product_property_spec.rb +0 -20
  373. data/spec/models/spree/product_spec.rb +0 -584
  374. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  375. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  376. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  377. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  378. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  379. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  380. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  381. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  382. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  383. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  384. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  385. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  386. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  387. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  388. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  389. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  390. data/spec/models/spree/promotion_action_spec.rb +0 -44
  391. data/spec/models/spree/promotion_category_spec.rb +0 -19
  392. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  393. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  394. data/spec/models/spree/promotion_code_spec.rb +0 -206
  395. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  396. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  397. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  398. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  399. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  400. data/spec/models/spree/promotion_spec.rb +0 -945
  401. data/spec/models/spree/refund_spec.rb +0 -200
  402. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  403. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  404. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  405. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  406. data/spec/models/spree/reimbursement_spec.rb +0 -278
  407. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  408. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  409. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  410. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  411. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  412. data/spec/models/spree/return_authorization_spec.rb +0 -226
  413. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  414. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  415. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  416. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  417. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  418. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  419. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  421. data/spec/models/spree/return_item_spec.rb +0 -785
  422. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  423. data/spec/models/spree/shipment_spec.rb +0 -914
  424. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  425. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  426. data/spec/models/spree/shipping_method_spec.rb +0 -292
  427. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  428. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  429. data/spec/models/spree/state_spec.rb +0 -43
  430. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  431. data/spec/models/spree/stock/availability_spec.rb +0 -143
  432. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  433. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  434. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  435. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  436. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  437. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  438. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  439. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  441. data/spec/models/spree/stock/package_spec.rb +0 -182
  442. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  443. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  444. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  445. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  446. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  448. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  449. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  450. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  451. data/spec/models/spree/stock_item_spec.rb +0 -348
  452. data/spec/models/spree/stock_location_spec.rb +0 -288
  453. data/spec/models/spree/stock_movement_spec.rb +0 -58
  454. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  455. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  456. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  457. data/spec/models/spree/store_credit_spec.rb +0 -900
  458. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  459. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  460. data/spec/models/spree/store_spec.rb +0 -156
  461. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  462. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  463. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  464. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  465. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  466. data/spec/models/spree/tax_category_spec.rb +0 -50
  467. data/spec/models/spree/tax_rate_spec.rb +0 -317
  468. data/spec/models/spree/taxon_spec.rb +0 -197
  469. data/spec/models/spree/taxonomy_spec.rb +0 -15
  470. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  471. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  472. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  473. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  474. data/spec/models/spree/user_spec.rb +0 -247
  475. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  476. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  477. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  478. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  479. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  480. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  481. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  482. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  483. data/spec/models/spree/variant_spec.rb +0 -862
  484. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  485. data/spec/models/spree/wallet_spec.rb +0 -155
  486. data/spec/models/spree/zone_spec.rb +0 -248
  487. data/spec/rails_helper.rb +0 -46
  488. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  489. data/spec/spec_helper.rb +0 -36
  490. data/spec/support/big_decimal.rb +0 -7
  491. data/spec/support/concerns/default_price.rb +0 -44
  492. data/spec/support/concerns/payment_source.rb +0 -66
  493. data/spec/support/concerns/working_factories.rb +0 -15
  494. data/spec/support/dummy_ability.rb +0 -7
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::UserMethods do
6
- let(:test_user) { create :user }
7
-
8
- describe '#has_spree_role?' do
9
- subject { test_user.has_spree_role? name }
10
-
11
- let(:role) { Spree::Role.create(name: name) }
12
- let(:name) { 'test' }
13
-
14
- context 'with a role' do
15
- before { test_user.spree_roles << role }
16
- it { is_expected.to be_truthy }
17
- end
18
-
19
- context 'without a role' do
20
- it { is_expected.to be_falsy }
21
- end
22
- end
23
-
24
- describe '#last_incomplete_spree_order' do
25
- subject { test_user.last_incomplete_spree_order }
26
-
27
- context 'with an incomplete order' do
28
- let(:last_incomplete_order) { create :order, user: test_user }
29
-
30
- before do
31
- create(:order, user: test_user, created_at: 1.day.ago)
32
- create(:order, user: create(:user))
33
- last_incomplete_order
34
- end
35
-
36
- it { is_expected.to eq last_incomplete_order }
37
- end
38
-
39
- context 'without an incomplete order' do
40
- it { is_expected.to be_nil }
41
- end
42
- end
43
-
44
- describe "deleting user" do
45
- context "with no orders" do
46
- it "fails validation" do
47
- test_user.destroy!
48
- expect(test_user).to be_destroyed
49
- end
50
- end
51
-
52
- context "with an order" do
53
- let!(:order) { create(:order, user: test_user) }
54
-
55
- it "fails validation" do
56
- expect {
57
- test_user.destroy!
58
- }.to raise_error(ActiveRecord::DeleteRestrictionError)
59
- end
60
- end
61
- end
62
-
63
- describe '#available_store_credit_total' do
64
- subject do
65
- test_user.reload.available_store_credit_total(currency: 'USD')
66
- end
67
-
68
- context 'when the user does not have any credit' do
69
- it { is_expected.to eq(0) }
70
- end
71
-
72
- context 'when the user has credits' do
73
- let!(:credit_1) { create(:store_credit, user: test_user, amount: 100) }
74
- let!(:credit_2) { create(:store_credit, user: test_user, amount: 200) }
75
-
76
- it { is_expected.to eq(100 + 200) }
77
-
78
- context 'when some has been used' do
79
- before { credit_1.update!(amount_used: 35) }
80
-
81
- it { is_expected.to eq(100 + 200 - 35) }
82
-
83
- context 'when some has been authorized' do
84
- before { credit_1.update!(amount_authorized: 10) }
85
-
86
- it { is_expected.to eq(100 + 200 - 35 - 10) }
87
- end
88
- end
89
-
90
- context 'when some has been authorized' do
91
- before { credit_1.update!(amount_authorized: 10) }
92
-
93
- it { is_expected.to eq(100 + 200 - 10) }
94
- end
95
-
96
- context 'with credits of multiple currencies' do
97
- let!(:credit_3) { create(:store_credit, user: test_user, amount: 400, currency: 'GBP') }
98
- before { test_user.reload }
99
-
100
- it 'separates the currencies' do
101
- expect(test_user.available_store_credit_total(currency: 'USD')).to eq(100 + 200)
102
- expect(test_user.available_store_credit_total(currency: 'GBP')).to eq(400)
103
- end
104
- end
105
- end
106
- end
107
-
108
- describe '#display_available_store_credit_total' do
109
- subject do
110
- test_user.display_available_store_credit_total(currency: 'USD')
111
- end
112
-
113
- context 'without credit' do
114
- it { is_expected.to eq(Spree::Money.new(0)) }
115
- end
116
-
117
- context 'with credit' do
118
- let!(:credit) { create(:store_credit, user: test_user, amount: 100) }
119
- it { is_expected.to eq(Spree::Money.new(100)) }
120
- end
121
- end
122
- end
@@ -1,154 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Country, type: :model do
6
- describe '.default' do
7
- before do
8
- create(:country, iso: "DE", id: 1)
9
- create(:country, id: 2)
10
- end
11
-
12
- subject(:default_country) { described_class.default }
13
-
14
- context 'with the configuration setting an existing legacy default country ID' do
15
- before do
16
- stub_spree_preferences(default_country_id: 2)
17
- end
18
-
19
- subject(:default_country) do
20
- Spree::Deprecation.silence { described_class.default }
21
- end
22
-
23
- it 'emits a deprecation warning' do
24
- expect(Spree::Deprecation).to receive(:warn)
25
- default_country
26
- end
27
-
28
- it 'is the country with that ID' do
29
- expect(default_country).to eq(Spree::Country.find(2))
30
- end
31
- end
32
-
33
- context 'with the configuration setting a non-existing legacy default country ID' do
34
- before do
35
- stub_spree_preferences(default_country_id: 0)
36
- end
37
-
38
- subject(:default_country) do
39
- Spree::Deprecation.silence { described_class.default }
40
- end
41
-
42
- it 'loads the country configured by the ISO code' do
43
- expect(default_country).to eq(Spree::Country.find(2))
44
- end
45
- end
46
-
47
- context 'with the configuration setting an existing ISO code' do
48
- it 'is a country with the configurations ISO code' do
49
- expect(described_class.default).to be_a(Spree::Country)
50
- expect(described_class.default.iso).to eq('US')
51
- end
52
- end
53
-
54
- context 'with the configuration setting an non-existing ISO code' do
55
- before { stub_spree_preferences(default_country_iso: "ZZ") }
56
-
57
- it 'raises a Record not Found error' do
58
- expect { described_class.default }.to raise_error(ActiveRecord::RecordNotFound)
59
- end
60
- end
61
- end
62
-
63
- describe '.available' do
64
- let!(:united_states) { create(:country, iso: 'US') }
65
- let!(:canada) { create(:country, iso: 'CA') }
66
- let!(:italy) { create(:country, iso: 'IT') }
67
- let!(:custom_zone) { create(:zone, name: 'Custom Zone', countries: [united_states, italy]) }
68
-
69
- context 'with a checkout zone defined' do
70
- context 'when checkout zone is of type country' do
71
- let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', countries: [united_states, canada]) }
72
-
73
- before do
74
- stub_spree_preferences(checkout_zone: checkout_zone.name)
75
- end
76
-
77
- context 'with no arguments' do
78
- it 'returns "Checkout Zone" countries' do
79
- expect(described_class.available).to contain_exactly(united_states, canada)
80
- end
81
- end
82
-
83
- context 'setting nil as restricting zone' do
84
- it 'returns all countries' do
85
- expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy)
86
- end
87
- end
88
-
89
- context 'setting "Custom Zone" as restricting zone' do
90
- it 'returns "Custom Zone" countries' do
91
- expect(described_class.available(restrict_to_zone: 'Custom Zone')).to contain_exactly(united_states, italy)
92
- end
93
- end
94
-
95
- context 'setting "Checkout Zone" as restricting zone' do
96
- it 'returns "Checkout Zone" countries' do
97
- expect(described_class.available(restrict_to_zone: 'Checkout Zone')).to contain_exactly(united_states, canada)
98
- end
99
- end
100
- end
101
-
102
- context 'when checkout zone is of type state' do
103
- let!(:state) { create(:state, country: united_states) }
104
- let!(:checkout_zone) { create(:zone, name: 'Checkout Zone', states: [state]) }
105
-
106
- before do
107
- stub_spree_preferences(checkout_zone: checkout_zone.name)
108
- end
109
-
110
- context 'with no arguments' do
111
- it 'returns all countries' do
112
- expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy)
113
- end
114
- end
115
- end
116
- end
117
-
118
- context 'with no checkout zone defined' do
119
- context 'with no arguments' do
120
- it 'returns all countries' do
121
- expect(described_class.available).to contain_exactly(united_states, canada, italy)
122
- end
123
- end
124
-
125
- context 'setting nil as restricting zone' do
126
- it 'returns all countries' do
127
- expect(described_class.available(restrict_to_zone: nil)).to contain_exactly(united_states, canada, italy)
128
- end
129
- end
130
-
131
- context 'setting "Custom Zone" as restricting zone' do
132
- it 'returns "Custom Zone" countries' do
133
- expect(described_class.available(restrict_to_zone: 'Custom Zone')).to contain_exactly(united_states, italy)
134
- end
135
- end
136
- end
137
- end
138
-
139
- describe '#prices' do
140
- let(:country) { create(:country) }
141
- subject { country.prices }
142
-
143
- it { is_expected.to be_a(ActiveRecord::Associations::CollectionProxy) }
144
-
145
- context "if the country has associated prices" do
146
- let!(:price_one) { create(:price) }
147
- let!(:price_two) { create(:price) }
148
- let!(:price_three) { create(:price) }
149
- let(:country) { create(:country, prices: [price_one, price_two]) }
150
-
151
- it { is_expected.to contain_exactly(price_one, price_two) }
152
- end
153
- end
154
- end
@@ -1,373 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::CreditCard, type: :model do
6
- let(:valid_credit_card_attributes) do
7
- {
8
- number: '4111111111111111',
9
- verification_value: '123',
10
- expiry: "12 / #{(Time.current.year + 1).to_s.last(2)}",
11
- name: 'Spree Commerce'
12
- }
13
- end
14
-
15
- def self.payment_states
16
- Spree::Payment.state_machine.states.keys
17
- end
18
-
19
- let(:credit_card) { Spree::CreditCard.new }
20
-
21
- it_behaves_like 'a payment source'
22
-
23
- before(:each) do
24
- @order = create(:order)
25
- @payment = Spree::Payment.create(amount: 100, order: @order)
26
-
27
- @success_response = double('gateway_response', success?: true, authorization: '123', avs_result: { 'code' => 'avs-code' })
28
- @fail_response = double('gateway_response', success?: false)
29
-
30
- @payment_gateway = mock_model(Spree::PaymentMethod,
31
- payment_profiles_supported?: true,
32
- authorize: @success_response,
33
- purchase: @success_response,
34
- capture: @success_response,
35
- void: @success_response,
36
- credit: @success_response)
37
-
38
- allow(@payment).to receive_messages payment_method: @payment_gateway
39
- end
40
-
41
- describe "#valid?" do
42
- it "should validate presence of number" do
43
- credit_card.attributes = valid_credit_card_attributes.except(:number)
44
- expect(credit_card).not_to be_valid
45
- expect(credit_card.errors[:number]).to eq(["can't be blank"])
46
- end
47
-
48
- it "should validate presence of security code" do
49
- credit_card.attributes = valid_credit_card_attributes.except(:verification_value)
50
- expect(credit_card).not_to be_valid
51
- expect(credit_card.errors[:verification_value]).to eq(["can't be blank"])
52
- end
53
-
54
- it "validates name presence" do
55
- credit_card.valid?
56
- expect(credit_card.errors[:name].size).to eq(1)
57
- end
58
-
59
- it "should only validate on create" do
60
- credit_card.attributes = valid_credit_card_attributes
61
- credit_card.save
62
- expect(credit_card).to be_valid
63
- end
64
-
65
- context "encrypted data is present" do
66
- it "does not validate presence of number or cvv" do
67
- credit_card.encrypted_data = "$fdgsfgdgfgfdg&gfdgfdgsf-"
68
- credit_card.valid?
69
- expect(credit_card.errors[:number]).to be_empty
70
- expect(credit_card.errors[:verification_value]).to be_empty
71
- end
72
- end
73
-
74
- context "imported is true" do
75
- it "does not validate presence of number or cvv" do
76
- credit_card.imported = true
77
- credit_card.valid?
78
- expect(credit_card.errors[:number]).to be_empty
79
- expect(credit_card.errors[:verification_value]).to be_empty
80
- end
81
- end
82
- end
83
-
84
- describe "#save" do
85
- before do
86
- credit_card.attributes = valid_credit_card_attributes
87
- credit_card.save!
88
- end
89
-
90
- let!(:persisted_card) { Spree::CreditCard.find(credit_card.id) }
91
- let(:valid_address_attributes) do
92
- {
93
- firstname: "Hugo",
94
- lastname: "Furst",
95
- address1: "123 Main",
96
- city: "Somewhere",
97
- country_id: 1,
98
- zipcode: 55_555,
99
- phone: "1234567890"
100
- }
101
- end
102
-
103
- it "should not actually store the number" do
104
- expect(persisted_card.number).to be_blank
105
- end
106
-
107
- it "should not actually store the security code" do
108
- expect(persisted_card.verification_value).to be_blank
109
- end
110
-
111
- it "should save and update addresses through nested attributes" do
112
- persisted_card.update({ address_attributes: valid_address_attributes })
113
- persisted_card.save!
114
- updated_attributes = { id: persisted_card.address.id, address1: "123 Main St." }
115
- persisted_card.update({ address_attributes: updated_attributes })
116
- expect(persisted_card.address.address1).to eq "123 Main St."
117
- end
118
- end
119
-
120
- describe "#number=" do
121
- it "should strip non-numeric characters from card input" do
122
- credit_card.number = "6011000990139424"
123
- expect(credit_card.number).to eq("6011000990139424")
124
-
125
- credit_card.number = " 6011-0009-9013-9424 "
126
- expect(credit_card.number).to eq("6011000990139424")
127
- end
128
-
129
- it "should not raise an exception on non-string input" do
130
- credit_card.number = {}
131
- expect(credit_card.number).to be_nil
132
- end
133
- end
134
-
135
- describe "#verification_value=" do
136
- it "accepts a valid 3-digit value" do
137
- credit_card.verification_value = "123"
138
- expect(credit_card.verification_value).to eq("123")
139
- end
140
-
141
- it "accepts a valid 4-digit value" do
142
- credit_card.verification_value = "1234"
143
- expect(credit_card.verification_value).to eq("1234")
144
- end
145
-
146
- it "stringifies an integer" do
147
- credit_card.verification_value = 123
148
- expect(credit_card.verification_value).to eq("123")
149
- end
150
-
151
- it "strips any whitespace" do
152
- credit_card.verification_value = ' 1 2 3 '
153
- expect(credit_card.verification_value).to eq('123')
154
- end
155
- end
156
-
157
- # Regression test for https://github.com/spree/spree/issues/3847 and https://github.com/spree/spree/issues/3896
158
- describe "#expiry=" do
159
- it "can set with a 2-digit month and year" do
160
- credit_card.expiry = '04 / 15'
161
- expect(credit_card.month).to eq('4')
162
- expect(credit_card.year).to eq('2015')
163
- end
164
-
165
- it "can set with a 2-digit month and 4-digit year" do
166
- credit_card.expiry = '04 / 2015'
167
- expect(credit_card.month).to eq('4')
168
- expect(credit_card.year).to eq('2015')
169
- end
170
-
171
- it "can set with a 2-digit month and 4-digit year without whitespace" do
172
- credit_card.expiry = '04/15'
173
- expect(credit_card.month).to eq('4')
174
- expect(credit_card.year).to eq('2015')
175
- end
176
-
177
- it "can set with a 2-digit month and 4-digit year without whitespace" do
178
- credit_card.expiry = '04/2015'
179
- expect(credit_card.month).to eq('4')
180
- expect(credit_card.year).to eq('2015')
181
- end
182
-
183
- it "can set with a 2-digit month and 4-digit year without whitespace and slash" do
184
- credit_card.expiry = '042015'
185
- expect(credit_card.month).to eq('4')
186
- expect(credit_card.year).to eq('2015')
187
- end
188
-
189
- it "can set with a 2-digit month and 2-digit year without whitespace and slash" do
190
- credit_card.expiry = '0415'
191
- expect(credit_card.month).to eq('4')
192
- expect(credit_card.year).to eq('2015')
193
- end
194
-
195
- it "does not blow up when passed an empty string" do
196
- credit_card.expiry = ''
197
- end
198
-
199
- # Regression test for https://github.com/spree/spree/issues/4725
200
- it "does not blow up when passed one number" do
201
- credit_card.expiry = '12'
202
- end
203
- end
204
-
205
- describe "#cc_type=" do
206
- it "converts between the different types" do
207
- credit_card.cc_type = 'mastercard'
208
- expect(credit_card.cc_type).to eq('master')
209
-
210
- credit_card.cc_type = 'maestro'
211
- expect(credit_card.cc_type).to eq('master')
212
-
213
- credit_card.cc_type = 'amex'
214
- expect(credit_card.cc_type).to eq('american_express')
215
-
216
- credit_card.cc_type = 'dinersclub'
217
- expect(credit_card.cc_type).to eq('diners_club')
218
-
219
- credit_card.cc_type = 'some_outlandish_cc_type'
220
- expect(credit_card.cc_type).to eq('some_outlandish_cc_type')
221
- end
222
-
223
- it "assigns the type based on card number in the event of js failure" do
224
- credit_card.number = '4242424242424242'
225
- credit_card.cc_type = ''
226
- expect(credit_card.cc_type).to eq('visa')
227
-
228
- credit_card.number = '5555555555554444'
229
- credit_card.cc_type = ''
230
- expect(credit_card.cc_type).to eq('master')
231
-
232
- credit_card.number = '2221000000000000'
233
- credit_card.cc_type = ''
234
- expect(credit_card.cc_type).to eq('master')
235
-
236
- credit_card.number = '378282246310005'
237
- credit_card.cc_type = ''
238
- expect(credit_card.cc_type).to eq('american_express')
239
-
240
- credit_card.number = '30569309025904'
241
- credit_card.cc_type = ''
242
- expect(credit_card.cc_type).to eq('diners_club')
243
-
244
- credit_card.number = '3530111333300000'
245
- credit_card.cc_type = ''
246
- expect(credit_card.cc_type).to eq('jcb')
247
-
248
- credit_card.number = ''
249
- credit_card.cc_type = ''
250
- expect(credit_card.cc_type).to eq('')
251
-
252
- credit_card.number = nil
253
- credit_card.cc_type = ''
254
- expect(credit_card.cc_type).to eq('')
255
- end
256
- end
257
-
258
- describe "#to_active_merchant" do
259
- before do
260
- credit_card.number = "4111111111111111"
261
- credit_card.year = Time.current.year
262
- credit_card.month = Time.current.month
263
- credit_card.name = "Ludwig van Beethoven"
264
- credit_card.verification_value = 123
265
- end
266
-
267
- it "converts to an ActiveMerchant::Billing::CreditCard object" do
268
- am_card = credit_card.to_active_merchant
269
- expect(am_card.number).to eq("4111111111111111")
270
- expect(am_card.year).to eq(Time.current.year)
271
- expect(am_card.month).to eq(Time.current.month)
272
- expect(am_card.first_name).to eq("Ludwig")
273
- expect(am_card.last_name).to eq("van Beethoven")
274
- expect(am_card.verification_value).to eq("123")
275
- end
276
- end
277
-
278
- # TODO: Remove these specs once default is removed
279
- describe 'default' do
280
- def default_with_silence(card)
281
- Spree::Deprecation.silence { card.default }
282
- end
283
-
284
- context 'with a user' do
285
- let(:user) { create(:user) }
286
- let(:credit_card) { create(:credit_card, user: user) }
287
-
288
- it 'uses the wallet information' do
289
- wallet_payment_source = user.wallet.add(credit_card)
290
- user.wallet.default_wallet_payment_source = wallet_payment_source
291
-
292
- expect(default_with_silence(credit_card)).to be_truthy
293
- end
294
- end
295
-
296
- context 'without a user' do
297
- let(:credit_card) { create(:credit_card) }
298
-
299
- it 'returns false' do
300
- expect(default_with_silence(credit_card)).to eq(false)
301
- end
302
- end
303
- end
304
-
305
- # TODO: Remove these specs once default= is removed
306
- describe 'default=' do
307
- def default_with_silence(card)
308
- Spree::Deprecation.silence { card.default }
309
- end
310
-
311
- context 'with a user' do
312
- let(:user) { create(:user) }
313
- let(:credit_card) { create(:credit_card, user: user) }
314
-
315
- it 'updates the wallet information' do
316
- Spree::Deprecation.silence do
317
- credit_card.default = true
318
- end
319
- expect(user.wallet.default_wallet_payment_source.payment_source).to eq(credit_card)
320
- end
321
- end
322
-
323
- context 'with multiple cards for one user' do
324
- let(:user) { create(:user) }
325
- let(:first_card) { create(:credit_card, user: user) }
326
- let(:second_card) { create(:credit_card, user: user) }
327
-
328
- it 'ensures only one default' do
329
- Spree::Deprecation.silence do
330
- first_card.default = true
331
- second_card.default = true
332
- end
333
-
334
- expect(default_with_silence(first_card)).to be_falsey
335
- expect(default_with_silence(second_card)).to be_truthy
336
-
337
- Spree::Deprecation.silence do
338
- first_card.default = true
339
- end
340
-
341
- expect(default_with_silence(first_card)).to be_truthy
342
- expect(default_with_silence(second_card)).to be_falsey
343
- end
344
- end
345
-
346
- context 'with multiple cards for different users' do
347
- let(:first_card) { create(:credit_card, user: create(:user)) }
348
- let(:second_card) { create(:credit_card, user: create(:user)) }
349
-
350
- it 'allows multiple defaults' do
351
- Spree::Deprecation.silence do
352
- first_card.default = true
353
- second_card.default = true
354
- end
355
-
356
- expect(default_with_silence(first_card)).to be_truthy
357
- expect(default_with_silence(second_card)).to be_truthy
358
- end
359
- end
360
-
361
- context 'without a user' do
362
- let(:credit_card) { create(:credit_card) }
363
-
364
- it 'raises' do
365
- expect {
366
- Spree::Deprecation.silence do
367
- credit_card.default = true
368
- end
369
- }.to raise_error("Cannot set 'default' on a credit card without a user")
370
- end
371
- end
372
- end
373
- end