solidus_core 2.4.2 → 2.5.0.beta1

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 (313) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -5
  3. data/Rakefile +23 -6
  4. data/app/helpers/spree/base_helper.rb +15 -10
  5. data/app/helpers/spree/checkout_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/mailers/spree/carton_mailer.rb +2 -2
  8. data/app/mailers/spree/order_mailer.rb +4 -4
  9. data/app/mailers/spree/reimbursement_mailer.rb +2 -2
  10. data/app/mailers/spree/test_mailer.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +17 -11
  12. data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
  13. data/app/models/spree/ability.rb +1 -1
  14. data/app/models/spree/address.rb +7 -0
  15. data/app/models/spree/adjustment.rb +6 -2
  16. data/app/models/spree/calculator.rb +1 -1
  17. data/app/models/spree/calculator/flexi_rate.rb +1 -0
  18. data/app/models/spree/calculator/free_shipping.rb +2 -0
  19. data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
  20. data/app/models/spree/calculator/percent_per_item.rb +2 -0
  21. data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
  22. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
  23. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
  24. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
  25. data/app/models/spree/calculator/shipping/per_item.rb +1 -0
  26. data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
  27. data/app/models/spree/classification.rb +1 -1
  28. data/app/models/spree/customer_return.rb +1 -1
  29. data/app/models/spree/inventory_unit.rb +8 -2
  30. data/app/models/spree/log_entry.rb +0 -11
  31. data/app/models/spree/order.rb +31 -16
  32. data/app/models/spree/order_contents.rb +0 -14
  33. data/app/models/spree/order_shipping.rb +0 -5
  34. data/app/models/spree/order_updater.rb +0 -4
  35. data/app/models/spree/payment.rb +6 -1
  36. data/app/models/spree/payment/processing.rb +4 -4
  37. data/app/models/spree/payment_method.rb +8 -3
  38. data/app/models/spree/payment_method/credit_card.rb +1 -1
  39. data/app/models/spree/payment_method/store_credit.rb +4 -4
  40. data/app/models/spree/price.rb +7 -1
  41. data/app/models/spree/product.rb +34 -6
  42. data/app/models/spree/product/scopes.rb +2 -2
  43. data/app/models/spree/promotion.rb +1 -2
  44. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
  45. data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
  46. data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
  47. data/app/models/spree/promotion/rules/taxon.rb +25 -24
  48. data/app/models/spree/promotion_action.rb +7 -1
  49. data/app/models/spree/promotion_chooser.rb +1 -1
  50. data/app/models/spree/promotion_code.rb +3 -3
  51. data/app/models/spree/promotion_handler/coupon.rb +8 -29
  52. data/app/models/spree/promotion_rule.rb +1 -1
  53. data/app/models/spree/refund.rb +3 -3
  54. data/app/models/spree/reimbursement.rb +1 -1
  55. data/app/models/spree/return_authorization.rb +2 -2
  56. data/app/models/spree/return_item.rb +3 -3
  57. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
  58. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
  59. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
  60. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
  61. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
  62. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  63. data/app/models/spree/shipment.rb +16 -6
  64. data/app/models/spree/shipping_method.rb +7 -0
  65. data/app/models/spree/shipping_rate.rb +6 -6
  66. data/app/models/spree/shipping_rate_tax.rb +2 -2
  67. data/app/models/spree/stock/availability_validator.rb +2 -2
  68. data/app/models/spree/stock/estimator.rb +9 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
  70. data/app/models/spree/stock/inventory_validator.rb +2 -2
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +2 -2
  73. data/app/models/spree/stock_item.rb +6 -0
  74. data/app/models/spree/stock_location.rb +2 -2
  75. data/app/models/spree/store_credit.rb +19 -12
  76. data/app/models/spree/store_credit_category.rb +1 -1
  77. data/app/models/spree/store_credit_event.rb +7 -1
  78. data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
  79. data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
  80. data/app/models/spree/tax_rate.rb +10 -3
  81. data/app/models/spree/taxon.rb +14 -4
  82. data/app/models/spree/taxonomy.rb +1 -1
  83. data/app/models/spree/unit_cancel.rb +1 -1
  84. data/app/models/spree/variant.rb +33 -1
  85. data/app/models/spree/variant/price_selector.rb +1 -1
  86. data/app/models/spree/variant/pricing_options.rb +1 -1
  87. data/app/models/spree/variant/scopes.rb +1 -1
  88. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  89. data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
  90. data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
  91. data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
  92. data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
  93. data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
  94. data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
  95. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
  96. data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
  97. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
  98. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
  99. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
  100. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
  101. data/app/views/spree/shared/_error_messages.html.erb +2 -2
  102. data/app/views/spree/test_mailer/test_email.html.erb +2 -2
  103. data/app/views/spree/test_mailer/test_email.text.erb +2 -2
  104. data/config/initializers/assets.rb +3 -1
  105. data/config/locales/en.yml +44 -48
  106. data/db/default/spree/store_credit.rb +1 -1
  107. data/db/default/spree/stores.rb +7 -8
  108. data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
  109. data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
  110. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
  111. data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
  112. data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
  113. data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
  114. data/lib/generators/spree/install/install_generator.rb +10 -5
  115. data/lib/spree/app_configuration.rb +103 -5
  116. data/lib/spree/core.rb +3 -2
  117. data/lib/spree/core/active_merchant_dependencies.rb +11 -0
  118. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  119. data/lib/spree/core/controller_helpers/common.rb +3 -7
  120. data/lib/spree/core/engine.rb +18 -100
  121. data/lib/spree/core/environment.rb +3 -3
  122. data/lib/spree/core/importer/order.rb +0 -1
  123. data/lib/spree/core/permalinks.rb +9 -15
  124. data/lib/spree/core/product_filters.rb +5 -3
  125. data/lib/spree/core/role_configuration.rb +23 -7
  126. data/lib/spree/core/search/base.rb +16 -13
  127. data/lib/spree/core/version.rb +1 -1
  128. data/lib/spree/paranoia_deprecations.rb +19 -0
  129. data/lib/spree/permission_sets.rb +0 -4
  130. data/lib/spree/permitted_attributes.rb +0 -3
  131. data/lib/spree/preferences/preferable.rb +70 -34
  132. data/lib/spree/preferences/preferable_class_methods.rb +22 -0
  133. data/lib/spree/testing_support/authorization_helpers.rb +2 -0
  134. data/lib/spree/testing_support/common_rake.rb +0 -1
  135. data/lib/spree/testing_support/dummy_app.rb +100 -0
  136. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
  137. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
  138. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
  139. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
  140. data/lib/spree/testing_support/dummy_app/database.yml +31 -0
  141. data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
  142. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
  143. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
  144. data/lib/spree/testing_support/factories.rb +1 -1
  145. data/lib/spree/testing_support/factories/address_factory.rb +2 -2
  146. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
  147. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  148. data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
  149. data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/country_factory.rb +1 -1
  151. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
  152. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  153. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  154. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
  155. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  156. data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
  157. data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
  158. data/lib/spree/testing_support/factories/order_factory.rb +5 -1
  159. data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
  160. data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
  161. data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
  162. data/lib/spree/testing_support/factories/price_factory.rb +1 -1
  163. data/lib/spree/testing_support/factories/product_factory.rb +1 -1
  164. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  165. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  166. data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
  167. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  168. data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/property_factory.rb +1 -1
  170. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  171. data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
  172. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  173. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  174. data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
  175. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  176. data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
  177. data/lib/spree/testing_support/factories/role_factory.rb +1 -1
  178. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
  179. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  180. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
  181. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/state_factory.rb +1 -7
  183. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
  185. data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
  186. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  187. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
  188. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
  189. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  190. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
  191. data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
  192. data/lib/spree/testing_support/factories/store_factory.rb +1 -1
  193. data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
  194. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  195. data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
  196. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  197. data/lib/spree/testing_support/factories/user_factory.rb +4 -10
  198. data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
  199. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
  200. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
  201. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
  202. data/lib/spree/testing_support/factories/zone_factory.rb +2 -4
  203. data/lib/spree/testing_support/flash.rb +2 -2
  204. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  205. data/lib/spree/testing_support/preferences.rb +4 -0
  206. data/lib/spree/testing_support/sequences.rb +3 -12
  207. data/solidus_core.gemspec +12 -8
  208. data/spec/helpers/base_helper_spec.rb +19 -3
  209. data/spec/helpers/products_helper_spec.rb +1 -1
  210. data/spec/lib/calculated_adjustments_spec.rb +20 -0
  211. data/spec/lib/i18n_spec.rb +4 -69
  212. data/spec/lib/search/base_spec.rb +1 -0
  213. data/spec/lib/search/variant_spec.rb +4 -4
  214. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
  215. data/spec/lib/spree/core/importer/order_spec.rb +2 -2
  216. data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
  217. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
  219. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
  220. data/spec/mailers/carton_mailer_spec.rb +3 -7
  221. data/spec/mailers/order_mailer_spec.rb +7 -11
  222. data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
  223. data/spec/mailers/test_mailer_spec.rb +0 -4
  224. data/spec/models/spree/ability_spec.rb +2 -1
  225. data/spec/models/spree/address_spec.rb +32 -19
  226. data/spec/models/spree/app_configuration_spec.rb +1 -1
  227. data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
  228. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
  229. data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
  230. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
  231. data/spec/models/spree/classification_spec.rb +19 -0
  232. data/spec/models/spree/credit_card_spec.rb +1 -1
  233. data/spec/models/spree/customer_return_spec.rb +17 -6
  234. data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
  235. data/spec/models/spree/exchange_spec.rb +1 -1
  236. data/spec/models/spree/inventory_unit_spec.rb +3 -7
  237. data/spec/models/spree/line_item_spec.rb +6 -6
  238. data/spec/models/spree/option_value_spec.rb +11 -6
  239. data/spec/models/spree/order/callbacks_spec.rb +2 -2
  240. data/spec/models/spree/order/checkout_spec.rb +31 -31
  241. data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
  242. data/spec/models/spree/order_contents_spec.rb +1 -9
  243. data/spec/models/spree/order_inventory_spec.rb +2 -2
  244. data/spec/models/spree/order_mutex_spec.rb +3 -1
  245. data/spec/models/spree/order_shipping_spec.rb +7 -4
  246. data/spec/models/spree/order_spec.rb +36 -13
  247. data/spec/models/spree/order_taxation_spec.rb +7 -7
  248. data/spec/models/spree/order_updater_spec.rb +6 -4
  249. data/spec/models/spree/payment/cancellation_spec.rb +1 -1
  250. data/spec/models/spree/payment_create_spec.rb +2 -2
  251. data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
  252. data/spec/models/spree/payment_spec.rb +23 -4
  253. data/spec/models/spree/preferences/preferable_spec.rb +44 -0
  254. data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
  255. data/spec/models/spree/price_spec.rb +6 -4
  256. data/spec/models/spree/product/scopes_spec.rb +1 -1
  257. data/spec/models/spree/product_spec.rb +49 -9
  258. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
  259. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
  260. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
  261. data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
  262. data/spec/models/spree/promotion_code_spec.rb +31 -19
  263. data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
  264. data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
  265. data/spec/models/spree/promotion_spec.rb +14 -14
  266. data/spec/models/spree/refund_spec.rb +1 -1
  267. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
  268. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
  269. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
  270. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  271. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
  272. data/spec/models/spree/return_item_spec.rb +6 -6
  273. data/spec/models/spree/shipment_spec.rb +14 -10
  274. data/spec/models/spree/shipping_manifest_spec.rb +22 -9
  275. data/spec/models/spree/shipping_method_spec.rb +9 -5
  276. data/spec/models/spree/stock/availability_spec.rb +16 -2
  277. data/spec/models/spree/stock/estimator_spec.rb +11 -12
  278. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
  279. data/spec/models/spree/stock/package_spec.rb +3 -2
  280. data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
  281. data/spec/models/spree/stock_item_spec.rb +6 -6
  282. data/spec/models/spree/stock_location_spec.rb +16 -3
  283. data/spec/models/spree/store_credit_spec.rb +12 -6
  284. data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
  285. data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
  286. data/spec/models/spree/taxon_spec.rb +42 -19
  287. data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
  288. data/spec/models/spree/variant_spec.rb +69 -11
  289. data/spec/rails_helper.rb +7 -13
  290. data/spec/spec_helper.rb +3 -12
  291. data/spec/support/concerns/default_price.rb +1 -1
  292. data/spec/support/dummy_ability.rb +2 -0
  293. metadata +144 -73
  294. data/Gemfile +0 -3
  295. data/app/models/spree/order_stock_location.rb +0 -15
  296. data/app/models/spree/stock_transfer.rb +0 -110
  297. data/app/models/spree/transfer_item.rb +0 -54
  298. data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
  299. data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
  300. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
  301. data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
  302. data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
  303. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
  304. data/lib/spree/testing_support/i18n.rb +0 -97
  305. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
  306. data/spec/models/spree/order_stock_location_spec.rb +0 -18
  307. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
  308. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
  309. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
  310. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
  311. data/spec/models/spree/stock_transfer_spec.rb +0 -308
  312. data/spec/models/spree/transfer_item_spec.rb +0 -275
  313. data/spec/support/test_gateway.rb +0 -2
@@ -67,7 +67,7 @@ RSpec.describe Spree::OrderInventory, type: :model do
67
67
  before { Spree::Config.track_inventory_levels = false }
68
68
 
69
69
  it "creates on hand inventory units" do
70
- variant.stock_items.destroy_all
70
+ variant.stock_items.each(&:really_destroy!)
71
71
 
72
72
  subject.verify(shipment)
73
73
 
@@ -82,7 +82,7 @@ RSpec.describe Spree::OrderInventory, type: :model do
82
82
  let(:new_quantity) { 1 }
83
83
 
84
84
  it "creates on hand inventory units" do
85
- variant.stock_items.destroy_all
85
+ variant.stock_items.each(&:really_destroy!)
86
86
 
87
87
  subject.verify(shipment)
88
88
 
@@ -1,6 +1,8 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe Spree::OrderMutex do
4
+ include ActiveSupport::Testing::TimeHelpers
5
+
4
6
  let(:order) { create(:order) }
5
7
 
6
8
  context "without an existing lock" do
@@ -42,7 +44,7 @@ RSpec.describe Spree::OrderMutex do
42
44
  around do |example|
43
45
  Spree::OrderMutex.with_lock!(order) do
44
46
  future = Spree::Config[:order_mutex_max_age].seconds.from_now + 1.second
45
- Timecop.freeze(future) do
47
+ travel_to(future) do
46
48
  example.run
47
49
  end
48
50
  end
@@ -1,6 +1,8 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe Spree::OrderShipping do
4
+ include ActiveSupport::Testing::TimeHelpers
5
+
4
6
  let(:order) { create(:order_ready_to_ship, line_items_count: 1) }
5
7
 
6
8
  def emails
@@ -33,7 +35,8 @@ RSpec.describe Spree::OrderShipping do
33
35
  end
34
36
 
35
37
  it "updates shipment.shipped_at" do
36
- Timecop.freeze do |now|
38
+ now = Time.current
39
+ travel_to(now) do
37
40
  expect { subject }.to change { shipment.shipped_at }.from(nil).to be_within(1.second).of(now)
38
41
  end
39
42
  end
@@ -41,7 +44,7 @@ RSpec.describe Spree::OrderShipping do
41
44
  it "updates order.updated_at" do
42
45
  future = 1.minute.from_now
43
46
  expect do
44
- Timecop.freeze(future) do
47
+ travel_to(future) do
45
48
  subject
46
49
  end
47
50
  end.to change { order.updated_at }.to be_within(1.second).of(future)
@@ -223,9 +226,9 @@ RSpec.describe Spree::OrderShipping do
223
226
  end
224
227
 
225
228
  context "with stale inventory units (regression test)" do
226
- let(:order) { FactoryGirl.create(:order_ready_to_ship, line_items_count: 1) }
229
+ let(:order) { FactoryBot.create(:order_ready_to_ship, line_items_count: 1) }
227
230
  let(:shipment) do
228
- FactoryGirl.create(
231
+ FactoryBot.create(
229
232
  :shipment,
230
233
  order: order
231
234
  )
@@ -5,7 +5,7 @@ RSpec.describe Spree::Order, type: :model do
5
5
  let(:user) { create(:user, email: "spree@example.com") }
6
6
  let(:order) { create(:order, user: user, store: store) }
7
7
  let(:promotion) do
8
- FactoryGirl.create(
8
+ FactoryBot.create(
9
9
  :promotion,
10
10
  :with_order_adjustment,
11
11
  code: "discount"
@@ -43,6 +43,8 @@ RSpec.describe Spree::Order, type: :model do
43
43
  end
44
44
 
45
45
  describe "#cancel!" do
46
+ subject { order.cancel! }
47
+
46
48
  context "with captured store credit" do
47
49
  let!(:store_credit_payment_method) { create(:store_credit_payment_method) }
48
50
  let(:order_total) { 500.00 }
@@ -55,7 +57,28 @@ RSpec.describe Spree::Order, type: :model do
55
57
  order.capture_payments!
56
58
  end
57
59
 
58
- subject { order.cancel! }
60
+ it "cancels the order" do
61
+ expect{ subject }.to change{ order.can_cancel? }.from(true).to(false)
62
+ expect(order).to be_canceled
63
+ end
64
+
65
+ it "places the order into the canceled scope" do
66
+ expect{ subject }.to change{ Spree::Order.canceled.include?(order) }.from(false).to(true)
67
+ end
68
+
69
+ it "removes the order from the not_canceled scope" do
70
+ expect{ subject }.to change{ Spree::Order.not_canceled.include?(order) }.from(true).to(false)
71
+ end
72
+ end
73
+
74
+ context "with fully refunded payment" do
75
+ let(:order) { create(:completed_order_with_totals) }
76
+ let(:payment_amount) { 50 }
77
+ let(:payment) { create(:payment, order: order, amount: payment_amount, state: 'completed') }
78
+
79
+ before do
80
+ create(:refund, payment: payment, amount: payment_amount)
81
+ end
59
82
 
60
83
  it "cancels the order" do
61
84
  expect{ subject }.to change{ order.can_cancel? }.from(true).to(false)
@@ -142,7 +165,7 @@ RSpec.describe Spree::Order, type: :model do
142
165
  context 'when variant is destroyed' do
143
166
  before do
144
167
  allow(order).to receive(:restart_checkout_flow)
145
- order.line_items.first.variant.destroy
168
+ order.line_items.first.variant.discard
146
169
  end
147
170
 
148
171
  it 'should restart checkout flow' do
@@ -152,7 +175,7 @@ RSpec.describe Spree::Order, type: :model do
152
175
 
153
176
  it 'should have error message' do
154
177
  subject
155
- expect(order.errors[:base]).to include(Spree.t(:deleted_variants_present))
178
+ expect(order.errors[:base]).to include(I18n.t('spree.deleted_variants_present'))
156
179
  end
157
180
 
158
181
  it 'should be false' do
@@ -497,7 +520,7 @@ RSpec.describe Spree::Order, type: :model do
497
520
  end
498
521
  it "updates the state column to the first checkout_steps value" do
499
522
  order = create(:order_with_totals, state: "delivery")
500
- expect(order.checkout_steps).to eql ["address", "delivery", "confirm", "complete"]
523
+ expect(order.checkout_steps).to eql %w(address delivery payment confirm complete)
501
524
  expect{ order.restart_checkout_flow }.to change{ order.state }.from("delivery").to("address")
502
525
  end
503
526
 
@@ -511,7 +534,7 @@ RSpec.describe Spree::Order, type: :model do
511
534
 
512
535
  # Regression tests for https://github.com/spree/spree/issues/4072
513
536
  context "#state_changed" do
514
- let(:order) { FactoryGirl.create(:order) }
537
+ let(:order) { FactoryBot.create(:order) }
515
538
 
516
539
  it "logs state changes" do
517
540
  order.update_column(:payment_state, 'balance_due')
@@ -581,9 +604,9 @@ RSpec.describe Spree::Order, type: :model do
581
604
  context "with more than one payment method" do
582
605
  subject { order.available_payment_methods }
583
606
 
584
- let!(:first_method) { FactoryGirl.create(:payment_method, available_to_users: true,
607
+ let!(:first_method) { FactoryBot.create(:payment_method, available_to_users: true,
585
608
  available_to_admin: true) }
586
- let!(:second_method) { FactoryGirl.create(:payment_method, available_to_users: true,
609
+ let!(:second_method) { FactoryBot.create(:payment_method, available_to_users: true,
587
610
  available_to_admin: true) }
588
611
 
589
612
  before do
@@ -756,10 +779,10 @@ RSpec.describe Spree::Order, type: :model do
756
779
  end
757
780
 
758
781
  context "#associate_user!" do
759
- let!(:user) { FactoryGirl.create(:user) }
782
+ let!(:user) { FactoryBot.create(:user) }
760
783
 
761
784
  it "should associate a user with a persisted order" do
762
- order = FactoryGirl.create(:order_with_line_items, created_by: nil)
785
+ order = FactoryBot.create(:order_with_line_items, created_by: nil)
763
786
  order.user = nil
764
787
  order.email = nil
765
788
  order.associate_user!(user)
@@ -776,7 +799,7 @@ RSpec.describe Spree::Order, type: :model do
776
799
 
777
800
  it "should not overwrite the created_by if it already is set" do
778
801
  creator = create(:user)
779
- order = FactoryGirl.create(:order_with_line_items, created_by: creator)
802
+ order = FactoryBot.create(:order_with_line_items, created_by: creator)
780
803
 
781
804
  order.user = nil
782
805
  order.email = nil
@@ -1232,7 +1255,7 @@ RSpec.describe Spree::Order, type: :model do
1232
1255
  context "there are no other payments" do
1233
1256
  it "adds an error to the model" do
1234
1257
  expect(subject).to be false
1235
- expect(order.errors.full_messages).to include(Spree.t("store_credit.errors.unable_to_fund"))
1258
+ expect(order.errors.full_messages).to include(I18n.t('spree.store_credit.errors.unable_to_fund'))
1236
1259
  end
1237
1260
  end
1238
1261
 
@@ -1545,7 +1568,7 @@ RSpec.describe Spree::Order, type: :model do
1545
1568
  it 'is deprecated' do
1546
1569
  subject.instance_variable_set('@updating_params', {})
1547
1570
  expect(Spree::Deprecation).to receive(:warn)
1548
- subject.update_params_payment_source
1571
+ subject.send(:update_params_payment_source)
1549
1572
  end
1550
1573
  end
1551
1574
 
@@ -1,15 +1,15 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe Spree::OrderTaxation do
4
- let(:shipping_address) { FactoryGirl.create(:address, state: new_york) }
5
- let(:order) { FactoryGirl.create(:order, ship_address: shipping_address, state: "delivery") }
4
+ let(:shipping_address) { FactoryBot.create(:address, state: new_york) }
5
+ let(:order) { FactoryBot.create(:order, ship_address: shipping_address, state: "delivery") }
6
6
 
7
- let(:new_york) { FactoryGirl.create(:state, state_code: "NY") }
8
- let(:new_york_zone) { FactoryGirl.create(:zone, states: [new_york]) }
7
+ let(:new_york) { FactoryBot.create(:state, state_code: "NY") }
8
+ let(:new_york_zone) { FactoryBot.create(:zone, states: [new_york]) }
9
9
 
10
- let(:books_category) { FactoryGirl.create(:tax_category, name: "Books") }
10
+ let(:books_category) { FactoryBot.create(:tax_category, name: "Books") }
11
11
  let(:book_tax_rate) do
12
- FactoryGirl.create(
12
+ FactoryBot.create(
13
13
  :tax_rate,
14
14
  name: "New York Sales Tax",
15
15
  tax_categories: [books_category],
@@ -20,7 +20,7 @@ RSpec.describe Spree::OrderTaxation do
20
20
  end
21
21
 
22
22
  let(:book) do
23
- FactoryGirl.create(
23
+ FactoryBot.create(
24
24
  :product,
25
25
  price: 20,
26
26
  name: "Book",
@@ -2,6 +2,8 @@ require 'rails_helper'
2
2
 
3
3
  module Spree
4
4
  RSpec.describe OrderUpdater, type: :model do
5
+ include ActiveSupport::Testing::TimeHelpers
6
+
5
7
  let!(:store) { create :store }
6
8
  let(:order) { Spree::Order.create }
7
9
  let(:updater) { Spree::OrderUpdater.new(order) }
@@ -163,8 +165,8 @@ module Spree
163
165
  end
164
166
 
165
167
  it 'should choose the most recent promotion adjustment when amounts are equal' do
166
- # Using Timecop is a regression test
167
- Timecop.freeze do
168
+ # Freezing time is a regression test
169
+ travel_to(Time.current) do
168
170
  create_adjustment('Promotion A', -200)
169
171
  create_adjustment('Promotion B', -200)
170
172
  end
@@ -177,8 +179,8 @@ module Spree
177
179
  end
178
180
 
179
181
  it 'should choose the most recent promotion adjustment when amounts are equal' do
180
- # Using Timecop is a regression test
181
- Timecop.freeze do
182
+ # Freezing time is a regression test
183
+ travel_to(Time.current) do
182
184
  create_adjustment('Promotion A', -200)
183
185
  create_adjustment('Promotion B', -200)
184
186
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  RSpec.describe Spree::Payment::Cancellation do
4
4
  describe '#initialize' do
@@ -62,8 +62,8 @@ module Spree
62
62
  expect(new_payment).not_to be_persisted
63
63
  expect(new_payment.source).not_to be_persisted
64
64
  expect(new_payment.source).not_to be_valid
65
- expect(new_payment.source.error_on(:number)).to be_present
66
- expect(new_payment.source.error_on(:verification_value).size).to be_present
65
+ expect(new_payment.source.errors[:number]).to be_present
66
+ expect(new_payment.source.errors[:verification_value].size).to be_present
67
67
  end
68
68
  end
69
69
  end
@@ -21,7 +21,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
21
21
 
22
22
  it "declines an unknown store credit" do
23
23
  expect(subject.success?).to be false
24
- expect(subject.message).to include Spree.t('store_credit.unable_to_find')
24
+ expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find')
25
25
  end
26
26
  end
27
27
 
@@ -30,7 +30,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
30
30
 
31
31
  it "declines a store credit" do
32
32
  expect(subject.success?).to be false
33
- expect(subject.message).to include Spree.t('store_credit.insufficient_funds')
33
+ expect(subject.message).to include I18n.t('spree.store_credit.insufficient_funds')
34
34
  end
35
35
  end
36
36
 
@@ -39,7 +39,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
39
39
 
40
40
  it "declines the credit" do
41
41
  expect(subject.success?).to be false
42
- expect(subject.message).to include Spree.t('store_credit.currency_mismatch')
42
+ expect(subject.message).to include I18n.t('spree.store_credit.currency_mismatch')
43
43
  end
44
44
  end
45
45
 
@@ -80,7 +80,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
80
80
 
81
81
  it "declines an unknown store credit" do
82
82
  expect(subject.success?).to be false
83
- expect(subject.message).to include Spree.t('store_credit.unable_to_find')
83
+ expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find')
84
84
  end
85
85
  end
86
86
 
@@ -93,7 +93,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
93
93
 
94
94
  it "declines a store credit" do
95
95
  expect(subject.success?).to be false
96
- expect(subject.message).to include Spree.t('store_credit.insufficient_authorized_amount')
96
+ expect(subject.message).to include I18n.t('spree.store_credit.insufficient_authorized_amount')
97
97
  end
98
98
  end
99
99
 
@@ -102,13 +102,13 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
102
102
 
103
103
  it "declines the credit" do
104
104
  expect(subject.success?).to be false
105
- expect(subject.message).to include Spree.t('store_credit.currency_mismatch')
105
+ expect(subject.message).to include I18n.t('spree.store_credit.currency_mismatch')
106
106
  end
107
107
  end
108
108
 
109
109
  context 'with a valid request' do
110
110
  it "captures the store credit" do
111
- expect(subject.message).to include Spree.t('store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION)
111
+ expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION)
112
112
  expect(subject.success?).to be true
113
113
  end
114
114
 
@@ -139,7 +139,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
139
139
 
140
140
  it "declines an unknown store credit" do
141
141
  expect(subject.success?).to be false
142
- expect(subject.message).to include Spree.t('store_credit.unable_to_find')
142
+ expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find')
143
143
  end
144
144
  end
145
145
 
@@ -153,7 +153,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
153
153
 
154
154
  it "voids a valid store credit void request" do
155
155
  expect(subject.success?).to be true
156
- expect(subject.message).to include Spree.t('store_credit.successful_action', action: Spree::StoreCredit::VOID_ACTION)
156
+ expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::VOID_ACTION)
157
157
  end
158
158
 
159
159
  context 'with an originator' do
@@ -181,7 +181,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
181
181
 
182
182
  resp = subject.purchase(amount * 100.0, store_credit, gateway_options)
183
183
  expect(resp.success?).to be false
184
- expect(resp.message).to include Spree.t('store_credit.unable_to_find')
184
+ expect(resp.message).to include I18n.t('spree.store_credit.unable_to_find')
185
185
  end
186
186
 
187
187
  it "captures a purchase if it can find a pending credit for the correct amount" do
@@ -194,7 +194,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
194
194
 
195
195
  resp = subject.purchase(amount * 100.0, store_credit, gateway_options)
196
196
  expect(resp.success?).to be true
197
- expect(resp.message).to include Spree.t('store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION)
197
+ expect(resp.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CAPTURE_ACTION)
198
198
  end
199
199
  end
200
200
 
@@ -214,7 +214,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
214
214
 
215
215
  it "declines an unknown store credit" do
216
216
  expect(subject.success?).to be false
217
- expect(subject.message).to include Spree.t('store_credit.unable_to_find')
217
+ expect(subject.message).to include I18n.t('spree.store_credit.unable_to_find')
218
218
  end
219
219
  end
220
220
 
@@ -231,7 +231,7 @@ RSpec.describe Spree::PaymentMethod::StoreCredit do
231
231
 
232
232
  it "credits a valid store credit credit request" do
233
233
  expect(subject.success?).to be true
234
- expect(subject.message).to include Spree.t('store_credit.successful_action', action: Spree::StoreCredit::CREDIT_ACTION)
234
+ expect(subject.message).to include I18n.t('spree.store_credit.successful_action', action: Spree::StoreCredit::CREDIT_ACTION)
235
235
  end
236
236
  end
237
237
 
@@ -589,7 +589,7 @@ RSpec.describe Spree::Payment, type: :model do
589
589
  end
590
590
 
591
591
  specify do
592
- expect { payment.process! }.to raise_error(Spree::Core::GatewayError, Spree.t(:payment_processing_failed))
592
+ expect { payment.process! }.to raise_error(Spree::Core::GatewayError, I18n.t('spree.payment_processing_failed'))
593
593
  end
594
594
  end
595
595
  end
@@ -630,6 +630,25 @@ RSpec.describe Spree::Payment, type: :model do
630
630
  end
631
631
  end
632
632
 
633
+ describe "#fully_refunded?" do
634
+ subject { payment.fully_refunded? }
635
+
636
+ before { payment.amount = 100 }
637
+
638
+ context 'before refund' do
639
+ it { is_expected.to be false }
640
+ end
641
+
642
+ context 'when refund total equals payment amount' do
643
+ before do
644
+ create(:refund, payment: payment, amount: 50)
645
+ create(:refund, payment: payment, amount: 50)
646
+ end
647
+
648
+ it { is_expected.to be true }
649
+ end
650
+ end
651
+
633
652
  describe "#save" do
634
653
  context "captured payments" do
635
654
  it "update order payment total" do
@@ -855,8 +874,8 @@ RSpec.describe Spree::Payment, type: :model do
855
874
  payment = Spree::PaymentCreate.new(order, params).build
856
875
  expect(payment).not_to be_valid
857
876
  expect(payment.source).not_to be_nil
858
- expect(payment.source.error_on(:number).size).to eq(1)
859
- expect(payment.source.error_on(:verification_value).size).to eq(1)
877
+ expect(payment.source.errors[:number].size).to eq(1)
878
+ expect(payment.source.errors[:verification_value].size).to eq(1)
860
879
  end
861
880
  end
862
881
 
@@ -1242,7 +1261,7 @@ RSpec.describe Spree::Payment, type: :model do
1242
1261
  before do
1243
1262
  gateway.save!
1244
1263
  payment.save!
1245
- gateway.destroy
1264
+ gateway.discard
1246
1265
  end
1247
1266
 
1248
1267
  it "works with a soft deleted payment method" do