solidus_core 2.10.2 → 2.11.3

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