solidus_core 2.10.1 → 2.11.2

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 (496) 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 +60 -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/controller_helpers/strong_parameters.rb +21 -7
  109. data/lib/spree/core/engine.rb +39 -2
  110. data/lib/spree/core/importer/order.rb +26 -11
  111. data/lib/spree/core/permalinks.rb +1 -3
  112. data/lib/spree/core/product_filters.rb +6 -5
  113. data/lib/spree/core/state_machines.rb +20 -1
  114. data/lib/spree/core/state_machines/order.rb +249 -0
  115. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  116. data/lib/spree/core/version.rb +1 -1
  117. data/lib/spree/encryptor.rb +25 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  120. data/lib/spree/event/configuration.rb +11 -6
  121. data/lib/spree/event/subscriber.rb +38 -18
  122. data/lib/spree/event/subscriber_registry.rb +92 -0
  123. data/lib/spree/i18n.rb +1 -1
  124. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  125. data/lib/spree/paranoia_deprecations.rb +32 -12
  126. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  127. data/lib/spree/permission_sets/default_customer.rb +16 -16
  128. data/lib/spree/permission_sets/order_display.rb +11 -11
  129. data/lib/spree/permission_sets/order_management.rb +1 -1
  130. data/lib/spree/permission_sets/product_display.rb +9 -9
  131. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  132. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  133. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  134. data/lib/spree/permission_sets/stock_display.rb +2 -2
  135. data/lib/spree/permission_sets/stock_management.rb +1 -1
  136. data/lib/spree/permission_sets/user_display.rb +3 -3
  137. data/lib/spree/permission_sets/user_management.rb +4 -3
  138. data/lib/spree/permitted_attributes.rb +79 -9
  139. data/lib/spree/preferences/preferable.rb +4 -3
  140. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  141. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  142. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  143. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  144. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  145. data/lib/spree/testing_support/common_rake.rb +3 -3
  146. data/lib/spree/testing_support/dummy_app.rb +44 -23
  147. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  148. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  149. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  150. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  152. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  155. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  156. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  157. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  158. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  159. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  160. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  161. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  162. data/lib/spree/testing_support/job_helpers.rb +24 -0
  163. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  164. data/lib/spree/testing_support/preferences.rb +3 -1
  165. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  166. data/lib/spree/testing_support/translations.rb +25 -0
  167. data/solidus_core.gemspec +8 -5
  168. metadata +99 -376
  169. data/script/rails +0 -10
  170. data/spec/fixtures/thinking-cat.jpg +0 -0
  171. data/spec/helpers/base_helper_spec.rb +0 -168
  172. data/spec/helpers/products_helper_spec.rb +0 -202
  173. data/spec/helpers/taxons_helper_spec.rb +0 -43
  174. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  175. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  176. data/spec/lib/i18n_spec.rb +0 -97
  177. data/spec/lib/search/base_spec.rb +0 -91
  178. data/spec/lib/search/variant_spec.rb +0 -115
  179. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  180. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  181. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  182. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  183. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  184. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  185. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  186. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  187. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  188. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  189. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  190. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  191. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  192. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  193. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  194. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  195. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  197. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  201. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  207. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  209. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  217. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  226. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  229. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  231. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  233. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  240. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  246. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  249. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  250. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  251. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  252. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  253. data/spec/lib/spree/core/version_spec.rb +0 -19
  254. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  255. data/spec/lib/spree/event_spec.rb +0 -130
  256. data/spec/lib/spree/localized_number_spec.rb +0 -45
  257. data/spec/lib/spree/migrations_spec.rb +0 -32
  258. data/spec/lib/spree/money_spec.rb +0 -298
  259. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  260. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  261. data/spec/lib/tasks/dummy_task.rake +0 -12
  262. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  263. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  264. data/spec/mailers/carton_mailer_spec.rb +0 -44
  265. data/spec/mailers/order_mailer_spec.rb +0 -117
  266. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  267. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  268. data/spec/mailers/test_mailer_spec.rb +0 -13
  269. data/spec/models/spree/ability_spec.rb +0 -279
  270. data/spec/models/spree/address_spec.rb +0 -399
  271. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  272. data/spec/models/spree/adjustment_spec.rb +0 -339
  273. data/spec/models/spree/asset_spec.rb +0 -25
  274. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  275. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  276. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  277. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  278. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  279. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  280. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  281. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  282. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  283. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  284. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  285. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  286. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  287. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  288. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  289. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  290. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  291. data/spec/models/spree/calculator_spec.rb +0 -43
  292. data/spec/models/spree/carton_spec.rb +0 -145
  293. data/spec/models/spree/classification_spec.rb +0 -126
  294. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  295. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  296. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  297. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  298. data/spec/models/spree/country_spec.rb +0 -154
  299. data/spec/models/spree/credit_card_spec.rb +0 -373
  300. data/spec/models/spree/customer_return_spec.rb +0 -294
  301. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  302. data/spec/models/spree/exchange_spec.rb +0 -76
  303. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  304. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  306. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  307. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  308. data/spec/models/spree/gateway_spec.rb +0 -14
  309. data/spec/models/spree/image_spec.rb +0 -25
  310. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  311. data/spec/models/spree/line_item_spec.rb +0 -240
  312. data/spec/models/spree/option_type_spec.rb +0 -16
  313. data/spec/models/spree/option_value_spec.rb +0 -52
  314. data/spec/models/spree/order/address_spec.rb +0 -52
  315. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  316. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  317. data/spec/models/spree/order/checkout_spec.rb +0 -740
  318. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  319. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  320. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  321. data/spec/models/spree/order/payment_spec.rb +0 -280
  322. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  323. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  324. data/spec/models/spree/order/totals_spec.rb +0 -26
  325. data/spec/models/spree/order/validations_spec.rb +0 -17
  326. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  327. data/spec/models/spree/order_capturing_spec.rb +0 -16
  328. data/spec/models/spree/order_contents_spec.rb +0 -362
  329. data/spec/models/spree/order_inventory_spec.rb +0 -285
  330. data/spec/models/spree/order_merger_spec.rb +0 -162
  331. data/spec/models/spree/order_mutex_spec.rb +0 -89
  332. data/spec/models/spree/order_promotion_spec.rb +0 -33
  333. data/spec/models/spree/order_shipping_spec.rb +0 -247
  334. data/spec/models/spree/order_spec.rb +0 -1687
  335. data/spec/models/spree/order_taxation_spec.rb +0 -128
  336. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  337. data/spec/models/spree/order_updater_spec.rb +0 -556
  338. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  339. data/spec/models/spree/payment_create_spec.rb +0 -195
  340. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  341. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  342. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  343. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  344. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  345. data/spec/models/spree/payment_method_spec.rb +0 -408
  346. data/spec/models/spree/payment_spec.rb +0 -1270
  347. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  348. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  349. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  350. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  351. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  352. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  353. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  354. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  355. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  356. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  357. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  359. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  360. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  361. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  362. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  363. data/spec/models/spree/preference_spec.rb +0 -79
  364. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  365. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  366. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  367. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  368. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  369. data/spec/models/spree/preferences/store_spec.rb +0 -40
  370. data/spec/models/spree/price_spec.rb +0 -150
  371. data/spec/models/spree/product/scopes_spec.rb +0 -164
  372. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  373. data/spec/models/spree/product_filter_spec.rb +0 -28
  374. data/spec/models/spree/product_property_spec.rb +0 -20
  375. data/spec/models/spree/product_spec.rb +0 -584
  376. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  377. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  378. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  379. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  380. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  381. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  382. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  383. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  384. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  385. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  386. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  387. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  388. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  389. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  390. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  391. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  392. data/spec/models/spree/promotion_action_spec.rb +0 -44
  393. data/spec/models/spree/promotion_category_spec.rb +0 -19
  394. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  395. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  396. data/spec/models/spree/promotion_code_spec.rb +0 -206
  397. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  398. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  399. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  400. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  401. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  402. data/spec/models/spree/promotion_spec.rb +0 -945
  403. data/spec/models/spree/refund_spec.rb +0 -200
  404. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  405. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  406. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  407. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  408. data/spec/models/spree/reimbursement_spec.rb +0 -278
  409. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  410. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  411. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  412. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  413. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  414. data/spec/models/spree/return_authorization_spec.rb +0 -226
  415. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  416. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  417. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  418. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  419. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  420. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  422. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  423. data/spec/models/spree/return_item_spec.rb +0 -785
  424. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  425. data/spec/models/spree/shipment_spec.rb +0 -914
  426. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  427. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  428. data/spec/models/spree/shipping_method_spec.rb +0 -292
  429. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  430. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  431. data/spec/models/spree/state_spec.rb +0 -43
  432. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  433. data/spec/models/spree/stock/availability_spec.rb +0 -143
  434. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  435. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  436. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  437. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  438. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  439. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  440. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  442. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  443. data/spec/models/spree/stock/package_spec.rb +0 -182
  444. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  445. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  446. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  447. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  448. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  449. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  450. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  451. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  452. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  453. data/spec/models/spree/stock_item_spec.rb +0 -348
  454. data/spec/models/spree/stock_location_spec.rb +0 -288
  455. data/spec/models/spree/stock_movement_spec.rb +0 -58
  456. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  457. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  458. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  459. data/spec/models/spree/store_credit_spec.rb +0 -900
  460. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  461. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  462. data/spec/models/spree/store_spec.rb +0 -156
  463. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  464. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  465. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  466. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  467. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  468. data/spec/models/spree/tax_category_spec.rb +0 -50
  469. data/spec/models/spree/tax_rate_spec.rb +0 -317
  470. data/spec/models/spree/taxon_spec.rb +0 -197
  471. data/spec/models/spree/taxonomy_spec.rb +0 -15
  472. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  473. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  474. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  475. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  476. data/spec/models/spree/user_spec.rb +0 -247
  477. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  478. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  479. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  480. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  481. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  482. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  483. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  484. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  485. data/spec/models/spree/variant_spec.rb +0 -862
  486. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  487. data/spec/models/spree/wallet_spec.rb +0 -155
  488. data/spec/models/spree/zone_spec.rb +0 -248
  489. data/spec/rails_helper.rb +0 -46
  490. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  491. data/spec/spec_helper.rb +0 -36
  492. data/spec/support/big_decimal.rb +0 -7
  493. data/spec/support/concerns/default_price.rb +0 -44
  494. data/spec/support/concerns/payment_source.rb +0 -66
  495. data/spec/support/concerns/working_factories.rb +0 -15
  496. 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,41 +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
- expect(controller.permitted_checkout_attributes.class).to eq Array
27
- end
28
- end
29
-
30
- describe '#permitted_order_attributes' do
31
- it 'returns Array class' do
32
- expect(controller.permitted_order_attributes.class).to eq Array
33
- end
34
- end
35
-
36
- describe '#permitted_product_attributes' do
37
- it 'returns Array class' do
38
- expect(controller.permitted_product_attributes.class).to eq Array
39
- end
40
- end
41
- 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