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,94 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- class FakesController < ApplicationController
6
- include Spree::Core::ControllerHelpers::Pricing
7
- end
8
-
9
- RSpec.describe Spree::Core::ControllerHelpers::Pricing, type: :controller do
10
- controller(FakesController) {}
11
-
12
- before do
13
- allow(controller).to receive(:current_store).and_return(store)
14
- end
15
-
16
- describe '#current_currency' do
17
- subject { controller.current_currency }
18
-
19
- context "when store default_currency is nil" do
20
- let(:store) { nil }
21
- it { Spree::Deprecation.silence { is_expected.to eq('USD') } }
22
- end
23
-
24
- context "when the current store default_currency empty" do
25
- let(:store) { FactoryBot.create :store, default_currency: '' }
26
-
27
- it { Spree::Deprecation.silence { is_expected.to eq('USD') } }
28
- end
29
-
30
- context "when the current store default_currency is a currency" do
31
- let(:store) { FactoryBot.create :store, default_currency: 'EUR' }
32
-
33
- it { Spree::Deprecation.silence { is_expected.to eq('EUR') } }
34
- end
35
- end
36
-
37
- describe '#current_pricing_options' do
38
- subject { controller.current_pricing_options }
39
-
40
- let(:store) { FactoryBot.create(:store, default_currency: nil) }
41
-
42
- it { is_expected.to be_a(Spree::Config.pricing_options_class) }
43
-
44
- context "currency" do
45
- subject { controller.current_pricing_options.currency }
46
-
47
- context "when store default_currency is nil" do
48
- let(:store) { nil }
49
- it { is_expected.to eq('USD') }
50
- end
51
-
52
- context "when the current store default_currency empty" do
53
- let(:store) { FactoryBot.create :store, default_currency: '' }
54
-
55
- it { is_expected.to eq('USD') }
56
- end
57
-
58
- context "when the current store default_currency is a currency" do
59
- let(:store) { FactoryBot.create :store, default_currency: 'EUR' }
60
-
61
- it { is_expected.to eq('EUR') }
62
- end
63
- end
64
-
65
- context "country_iso" do
66
- subject { controller.current_pricing_options.country_iso }
67
-
68
- let(:store) { FactoryBot.create(:store, cart_tax_country_iso: cart_tax_country_iso) }
69
-
70
- context "when the store has a cart tax country set" do
71
- let(:cart_tax_country_iso) { "DE" }
72
- it { is_expected.to eq("DE") }
73
- end
74
-
75
- context "when the store has no cart tax country set" do
76
- let(:cart_tax_country_iso) { nil }
77
- it { is_expected.to be_nil }
78
- end
79
- end
80
-
81
- context "from context" do
82
- subject { controller.current_pricing_options }
83
-
84
- let(:store) { FactoryBot.create :store, default_currency: 'USD' }
85
-
86
- context "when the whole context is passed" do
87
- it "receives the right object " do
88
- expect(Spree::Config.pricing_options_class).to receive(:from_context).with(controller)
89
- is_expected.to be_nil
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- class FakesController < ApplicationController
6
- include Spree::Core::ControllerHelpers::Search
7
- end
8
-
9
- RSpec.describe Spree::Core::ControllerHelpers::Search, type: :controller do
10
- controller(FakesController) {}
11
-
12
- describe '#build_searcher' do
13
- it 'returns Spree::Core::Search::Base instance' do
14
- allow(controller).to receive_messages(
15
- try_spree_current_user: create(:user),
16
- current_pricing_options: Spree::Config.pricing_options_class.new(currency: 'USD')
17
- )
18
- expect(controller.build_searcher({}).class).to eq Spree::Core::Search::Base
19
- end
20
- end
21
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- class FakesController < ApplicationController
6
- include Spree::Core::ControllerHelpers::Store
7
- end
8
-
9
- RSpec.describe Spree::Core::ControllerHelpers::Store, type: :controller do
10
- controller(FakesController) {}
11
-
12
- describe '#current_store' do
13
- let!(:store) { create :store, default: true }
14
- it 'returns current store' do
15
- expect(controller.current_store).to eq store
16
- end
17
- end
18
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- class FakesController < ApplicationController
6
- include Spree::Core::ControllerHelpers::StrongParameters
7
- end
8
-
9
- RSpec.describe Spree::Core::ControllerHelpers::StrongParameters, type: :controller do
10
- controller(FakesController) {}
11
-
12
- describe '#permitted_attributes' do
13
- it 'returns Spree::PermittedAttributes module' do
14
- expect(controller.permitted_attributes).to eq Spree::PermittedAttributes
15
- end
16
- end
17
-
18
- describe '#permitted_payment_attributes' do
19
- it 'returns Array class' do
20
- expect(controller.permitted_payment_attributes.class).to eq Array
21
- end
22
- end
23
-
24
- describe '#permitted_checkout_attributes' do
25
- it 'returns Array class' do
26
- Spree::Deprecation.silence do
27
- expect(controller.permitted_checkout_attributes.class).to eq Spree::CheckoutAdditionalAttributes
28
- end
29
- end
30
-
31
- it 'is deprecated' do
32
- expect(Spree::Deprecation).to receive(:warn)
33
- controller.permitted_checkout_attributes
34
- end
35
- end
36
-
37
- describe '#permitted_order_attributes' do
38
- it 'returns Array class' do
39
- expect(controller.permitted_order_attributes.class).to eq Array
40
- end
41
- end
42
-
43
- describe '#permitted_product_attributes' do
44
- it 'returns Array class' do
45
- expect(controller.permitted_product_attributes.class).to eq Array
46
- end
47
- end
48
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Core::CurrentStore do
6
- describe "#store" do
7
- subject { Spree::Deprecation.silence { Spree::Core::CurrentStore.new(request).store } }
8
-
9
- context "with a default" do
10
- let(:request) { double(headers: {}, env: {}) }
11
- let!(:store_1) { create :store, default: true }
12
-
13
- it "returns the default store" do
14
- expect(subject).to eq(store_1)
15
- end
16
-
17
- context "with a domain match" do
18
- let(:request) { double(headers: {}, env: { "SERVER_NAME" => url } ) }
19
- let(:url) { "server-name.org" }
20
- let!(:store_2) { create :store, default: false, url: url }
21
-
22
- it "returns the store with the matching domain" do
23
- expect(subject).to eq(store_2)
24
- end
25
- end
26
- end
27
-
28
- it 'is deprecated' do
29
- expect(Spree::Deprecation).to(receive(:warn))
30
- Spree::Core::CurrentStore.new(double)
31
- end
32
- end
33
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'spree/core/environment_extension'
5
-
6
- RSpec.describe Spree::Core::EnvironmentExtension do
7
- let(:base) { Class.new { def self.to_s; 'ExampleClass'; end } }
8
- subject! { base.include(described_class).new }
9
-
10
- describe '.add_class_set' do
11
- context 'with a class set named "foo"' do
12
- before { base.add_class_set('foo') }
13
-
14
- let(:class_one) { String }
15
- let(:class_two) { Array }
16
- let(:class_three) { Hash }
17
-
18
- describe '#foo' do
19
- it { respond_to?(:foo) }
20
- it { expect(subject.foo).to be_empty }
21
- it { expect(subject.foo).to be_kind_of Spree::Core::ClassConstantizer::Set }
22
- end
23
-
24
- describe '#foo=' do
25
- it { respond_to?(:foo=) }
26
-
27
- before { subject.foo = [class_one, class_two] }
28
-
29
- it { expect(subject.foo).to include(class_one) }
30
- it { expect(subject.foo).to include(class_two) }
31
- it { expect(subject.foo).not_to include(class_three) }
32
- end
33
- end
34
- end
35
-
36
- describe '#add_class' do
37
- it 'is deprecated' do
38
- expect(Spree::Deprecation).to receive(:warn) do |message, _caller|
39
- expect(message).to include('ExampleClass.add_class_set(:foo)')
40
- end
41
- expect(base).to receive(:add_class_set).with(:foo)
42
-
43
- base.new.add_class(:foo)
44
- end
45
- end
46
- end
@@ -1,484 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Core
7
- RSpec.describe Importer::Order do
8
- let!(:store) { create(:store) }
9
- let!(:country) { create(:country) }
10
- let!(:state) { country.states.first || create(:state, country: country) }
11
- let!(:stock_location) { create(:stock_location, admin_name: 'Admin Name') }
12
-
13
- let(:user) { stub_model(LegacyUser, email: 'fox@mudler.com') }
14
- let(:shipping_method) { create(:shipping_method) }
15
- let(:payment_method) { create(:check_payment_method) }
16
-
17
- let(:product) {
18
- product = Spree::Product.create(name: 'Test',
19
- sku: 'TEST-1',
20
- price: 33.22)
21
- product.shipping_category = create(:shipping_category)
22
- product.save
23
- product
24
- }
25
-
26
- let(:variant) {
27
- variant = product.master
28
- variant.stock_items.each { |si| si.set_count_on_hand(10) }
29
- variant
30
- }
31
-
32
- let(:sku) { variant.sku }
33
- let(:variant_id) { variant.id }
34
-
35
- let(:line_items) { { "0" => { variant_id: variant.id, quantity: 5 } } }
36
- let(:ship_address) {
37
- {
38
- address1: '123 Testable Way',
39
- firstname: 'Fox',
40
- lastname: 'Mulder',
41
- city: 'Washington',
42
- country_id: country.id,
43
- state_id: state.id,
44
- zipcode: '66666',
45
- phone: '666-666-6666'
46
- }}
47
-
48
- it 'can import an order number' do
49
- params = { number: '123-456-789' }
50
- order = Importer::Order.import(user, params)
51
- expect(order.number).to eq '123-456-789'
52
- end
53
-
54
- it 'optionally add completed at' do
55
- params = { email: 'test@test.com',
56
- completed_at: Time.current,
57
- line_items_attributes: line_items }
58
- order = Importer::Order.import(user, params)
59
- expect(order).to be_completed
60
- expect(order.state).to eq 'complete'
61
- end
62
-
63
- it "assigns order[email] over user email to order" do
64
- params = { email: 'wooowww@test.com' }
65
- order = Importer::Order.import(user, params)
66
- expect(order.email).to eq params[:email]
67
- end
68
-
69
- context "assigning a user to an order" do
70
- let(:other_user) { stub_model(LegacyUser, email: 'dana@scully.com') }
71
-
72
- context "as an admin" do
73
- before { allow(user).to receive_messages has_spree_role?: true }
74
-
75
- context "a user's id is not provided" do
76
- context "nil user id is provided" do
77
- it "unassociates the admin user from the order" do
78
- params = { user_id: nil }
79
- order = Importer::Order.import(user, params)
80
- expect(order.user_id).to be_nil
81
- end
82
- end
83
-
84
- context "another user's id is provided" do
85
- it "permits the user to be assigned" do
86
- params = { user_id: other_user.id }
87
- order = Importer::Order.import(user, params)
88
- expect(order.user_id).to eq(other_user.id)
89
- end
90
- end
91
- end
92
-
93
- context "a user's id is not provided" do
94
- it "doesn't unassociate the admin from the order" do
95
- params = {}
96
- order = Importer::Order.import(user, params)
97
- expect(order.user_id).to eq(user.id)
98
- end
99
- end
100
- end
101
-
102
- context "as a user" do
103
- before { allow(user).to receive_messages has_spree_role?: false }
104
- it "does not assign the order to the other user" do
105
- params = { user_id: other_user.id }
106
- order = Importer::Order.import(user, params)
107
- expect(order.user_id).to eq(user.id)
108
- end
109
- end
110
- end
111
-
112
- it 'can build an order from API with just line items' do
113
- params = { line_items_attributes: line_items }
114
-
115
- expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_return({ variant_id: variant.id, quantity: 5 })
116
- order = Importer::Order.import(user, params)
117
- expect(order.user).to eq(nil)
118
- line_item = order.line_items.first
119
- expect(line_item.quantity).to eq(5)
120
- expect(line_item.variant_id).to eq(variant_id)
121
- end
122
-
123
- it 'handles line_item updating exceptions' do
124
- line_items['0'][:price] = 'an invalid price'
125
- params = { line_items_attributes: line_items }
126
-
127
- expect {
128
- Importer::Order.import(user, params)
129
- }.to raise_exception ActiveRecord::RecordInvalid
130
- end
131
-
132
- it 'can build an order from API with variant sku' do
133
- params = {
134
- line_items_attributes: {
135
- "0" => { sku: sku, quantity: 5 }
136
- }
137
- }
138
-
139
- order = Importer::Order.import(user, params)
140
-
141
- line_item = order.line_items.first
142
- expect(line_item.variant_id).to eq(variant_id)
143
- expect(line_item.quantity).to eq(5)
144
- end
145
-
146
- it 'can build an order from API shipping address' do
147
- params = { ship_address_attributes: ship_address,
148
- line_items_attributes: line_items }
149
-
150
- order = Importer::Order.import(user, params)
151
- expect(order.ship_address.address1).to eq '123 Testable Way'
152
- end
153
-
154
- it 'can build an order from API with country attributes' do
155
- ship_address.delete(:country_id)
156
- ship_address[:country] = { 'iso' => 'US' }
157
- params = { ship_address_attributes: ship_address,
158
- line_items_attributes: line_items }
159
-
160
- order = Importer::Order.import(user, params)
161
- expect(order.ship_address.country.iso).to eq 'US'
162
- end
163
-
164
- it 'can build an order from API with state attributes' do
165
- ship_address.delete(:state_id)
166
- ship_address[:state] = { 'name' => state.name }
167
- params = { ship_address_attributes: ship_address,
168
- line_items_attributes: line_items }
169
-
170
- order = Importer::Order.import(user, params)
171
- expect(order.ship_address.state.name).to eq 'Alabama'
172
- end
173
-
174
- context "with a different currency" do
175
- let(:params) { { currency: "GBP" } }
176
-
177
- it "sets the order currency" do
178
- order = Importer::Order.import(user, params)
179
- expect(order.currency).to eq "GBP"
180
- end
181
-
182
- context "when a line item price is specified" do
183
- let(:params) { { currency: "GBP", line_items_attributes: line_items } }
184
-
185
- before { line_items["0"][:price] = 1.99 }
186
-
187
- context "and price is present in the order currency" do
188
- before { variant.prices.create(currency: "GBP", amount: 18.99) }
189
-
190
- it "assigns a price correctly" do
191
- order = Importer::Order.import(user, params)
192
-
193
- expect(order.currency).to eq "GBP"
194
- expect(order.line_items.first.price).to eq 1.99
195
- expect(order.line_items.first.currency).to eq "GBP"
196
- end
197
- end
198
-
199
- context "and no price is present in the order currency" do
200
- it "raises an exception" do
201
- expect {
202
- Importer::Order.import(user, params)
203
- }.to raise_exception ActiveRecord::RecordInvalid
204
- end
205
- end
206
- end
207
- end
208
-
209
- context "state passed is not associated with country" do
210
- let(:params) do
211
- {
212
- ship_address_attributes: ship_address,
213
- line_items_attributes: line_items
214
- }
215
- end
216
-
217
- let(:other_state) { create(:state, name: "Uhuhuh", country: create(:country)) }
218
-
219
- before do
220
- ship_address.delete(:state_id)
221
- ship_address[:state] = { 'name' => other_state.name }
222
- end
223
-
224
- it 'sets states name instead of state id' do
225
- order = Importer::Order.import(user, params)
226
- expect(order.ship_address.state_name).to eq other_state.name
227
- end
228
- end
229
-
230
- it 'sets state name if state record not found' do
231
- ship_address.delete(:state_id)
232
- ship_address[:state] = { 'name' => 'XXX' }
233
- params = { ship_address_attributes: ship_address,
234
- line_items_attributes: line_items }
235
-
236
- order = Importer::Order.import(user, params)
237
- expect(order.ship_address.state_name).to eq 'XXX'
238
- end
239
-
240
- context 'variant not deleted' do
241
- it 'ensures variant id from api' do
242
- hash = { sku: variant.sku }
243
- Importer::Order.ensure_variant_id_from_params(hash)
244
- expect(hash[:variant_id]).to eq variant.id
245
- end
246
- end
247
-
248
- context 'variant was soft-deleted' do
249
- it 'raise error as variant shouldnt be found' do
250
- variant.product.discard
251
- hash = { sku: variant.sku }
252
- expect {
253
- Importer::Order.ensure_variant_id_from_params(hash)
254
- }.to raise_error ActiveRecord::RecordNotFound
255
- end
256
- end
257
-
258
- it 'ensures_country_id for country fields' do
259
- [:name, :iso, :iso_name, :iso3].each do |field|
260
- address = { country: { field => country.send(field) } }
261
- Importer::Order.ensure_country_id_from_params(address)
262
- expect(address[:country_id]).to eq country.id
263
- end
264
- end
265
-
266
- it "raises with proper message when cant find country" do
267
- address = { country: { "name" => "NoNoCountry" } }
268
- expect {
269
- Importer::Order.ensure_country_id_from_params(address)
270
- }.to raise_error ActiveRecord::RecordNotFound
271
- end
272
-
273
- it 'ensures_state_id for state fields' do
274
- [:name, :abbr].each do |field|
275
- address = { country_id: country.id, state: { field => state.send(field) } }
276
- Importer::Order.ensure_state_id_from_params(address)
277
- expect(address[:state_id]).to eq state.id
278
- end
279
- end
280
-
281
- context "shipments" do
282
- let(:params) do
283
- {
284
- shipments_attributes: [
285
- {
286
- tracking: '123456789',
287
- cost: '14.99',
288
- shipping_method: shipping_method.name,
289
- stock_location: stock_location.name,
290
- inventory_units: [{ sku: sku }]
291
- }
292
- ]
293
- }
294
- end
295
-
296
- it 'ensures variant exists and is not deleted' do
297
- expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_call_original
298
- Importer::Order.import(user, params)
299
- end
300
-
301
- it 'builds them properly' do
302
- order = Importer::Order.import(user, params)
303
- shipment = order.shipments.first
304
-
305
- expect(shipment.cost.to_f).to eq 14.99
306
- expect(shipment.inventory_units.first.variant_id).to eq product.master.id
307
- expect(shipment.tracking).to eq '123456789'
308
- expect(shipment.shipping_rates.first.cost).to eq 14.99
309
- expect(shipment.selected_shipping_rate).to eq(shipment.shipping_rates.first)
310
- expect(shipment.stock_location).to eq stock_location
311
- expect(order.shipment_total.to_f).to eq 14.99
312
- end
313
-
314
- it "accepts admin name for stock location" do
315
- params[:shipments_attributes][0][:stock_location] = stock_location.admin_name
316
- order = Importer::Order.import(user, params)
317
- shipment = order.shipments.first
318
-
319
- expect(shipment.stock_location).to eq stock_location
320
- end
321
-
322
- it "raises if cant find stock location" do
323
- params[:shipments_attributes][0][:stock_location] = "doesnt exist"
324
- expect {
325
- Importer::Order.import(user, params)
326
- }.to raise_error ActiveRecord::RecordNotFound
327
- end
328
-
329
- context 'when completed_at and shipped_at present' do
330
- let(:params) do
331
- {
332
- completed_at: 2.days.ago,
333
- shipments_attributes: [
334
- {
335
- tracking: '123456789',
336
- cost: '4.99',
337
- shipped_at: 1.day.ago,
338
- shipping_method: shipping_method.name,
339
- stock_location: stock_location.name,
340
- inventory_units: [{ sku: sku }]
341
- }
342
- ]
343
- }
344
- end
345
-
346
- it 'builds them properly' do
347
- order = Importer::Order.import(user, params)
348
- shipment = order.shipments.first
349
-
350
- expect(shipment.cost.to_f).to eq 4.99
351
- expect(shipment.inventory_units.first.variant_id).to eq product.master.id
352
- expect(shipment.tracking).to eq '123456789'
353
- expect(shipment.shipped_at).to be_present
354
- expect(shipment.shipping_rates.first.cost).to eq 4.99
355
- expect(shipment.selected_shipping_rate).to eq(shipment.shipping_rates.first)
356
- expect(shipment.stock_location).to eq stock_location
357
- expect(shipment.state).to eq('shipped')
358
- expect(shipment.inventory_units.all?(&:shipped?)).to be true
359
- expect(order.shipment_state).to eq('shipped')
360
- expect(order.shipment_total.to_f).to eq 4.99
361
- end
362
- end
363
-
364
- context "when line items and shipments are present" do
365
- let(:params) do
366
- {
367
- completed_at: 2.days.ago,
368
- line_items_attributes: line_items,
369
- shipments_attributes: [
370
- {
371
- tracking: '123456789',
372
- cost: '4.99',
373
- shipped_at: 1.day.ago,
374
- shipping_method: shipping_method.name,
375
- stock_location: stock_location.name,
376
- inventory_units: [{ sku: sku }]
377
- }
378
- ]
379
- }
380
- end
381
-
382
- it 'builds quantities properly' do
383
- order = Importer::Order.import(user, params)
384
- line_item = order.line_items.first
385
- expect(line_item.quantity).to eq(5)
386
- end
387
- end
388
- end
389
-
390
- it 'adds adjustments' do
391
- params = {
392
- adjustments_attributes: [
393
- { label: 'Shipping Discount', amount: -4.99 },
394
- { label: 'Promotion Discount', amount: -3.00 }
395
- ]
396
- }
397
-
398
- order = Importer::Order.import(user, params)
399
- expect(order.adjustments.all?(&:finalized?)).to be true
400
- expect(order.adjustments.first.label).to eq 'Shipping Discount'
401
- expect(order.adjustments.first.amount).to eq(-4.99)
402
- end
403
-
404
- it "calculates final order total correctly" do
405
- params = {
406
- adjustments_attributes: [
407
- { label: 'Promotion Discount', amount: -3.00 }
408
- ],
409
- line_items_attributes: {
410
- "0" => {
411
- variant_id: variant.id,
412
- quantity: 5
413
- }
414
- }
415
- }
416
-
417
- order = Importer::Order.import(user, params)
418
- expect(order.item_total).to eq(166.1)
419
- expect(order.total).to eq(163.1) # = item_total (166.1) - adjustment_total (3.00)
420
- end
421
-
422
- it 'builds a payment using state' do
423
- params = { payments_attributes: [{ amount: '4.99',
424
- payment_method: payment_method.name,
425
- state: 'completed' }] }
426
- order = Importer::Order.import(user, params)
427
- expect(order.payments.first.amount).to eq 4.99
428
- end
429
-
430
- it 'builds a payment using status as fallback' do
431
- params = { payments_attributes: [{ amount: '4.99',
432
- payment_method: payment_method.name,
433
- status: 'completed' }] }
434
- order = Importer::Order.import(user, params)
435
- expect(order.payments.first.amount).to eq 4.99
436
- end
437
-
438
- it 'build a source payment using years and month' do
439
- params = { payments_attributes: [{
440
- amount: '4.99',
441
- payment_method: payment_method.name,
442
- status: 'completed',
443
- source: {
444
- name: 'Fox',
445
- last_digits: "7424",
446
- cc_type: "visa",
447
- year: '2022',
448
- month: "5"
449
- }
450
- }] }
451
-
452
- order = Importer::Order.import(user, params)
453
- expect(order.payments.first.source.last_digits).to eq '7424'
454
- end
455
-
456
- it 'handles source building exceptions when do not have years and month' do
457
- params = { payments_attributes: [{
458
- amount: '4.99',
459
- payment_method: payment_method.name,
460
- status: 'completed',
461
- source: {
462
- name: 'Fox',
463
- last_digits: "7424",
464
- cc_type: "visa"
465
- }
466
- }] }
467
-
468
- expect {
469
- Importer::Order.import(user, params)
470
- }.to raise_error /Validation failed: Credit card Month is not a number, Credit card Year is not a number/
471
- end
472
-
473
- context "raises error" do
474
- it "clears out order from db" do
475
- params = { payments_attributes: [{ payment_method: "XXX" }] }
476
- count = Order.count
477
-
478
- expect { Importer::Order.import(user, params) }.to raise_error ActiveRecord::RecordNotFound
479
- expect(Order.count).to eq count
480
- end
481
- end
482
- end
483
- end
484
- end