solidus_core 2.10.3 → 2.11.4

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.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (552) 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 +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. data/spec/support/dummy_ability.rb +0 -7
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Spree::ProductDuplicator, type: :model do
7
- let(:product) { create(:product, properties: [create(:property, name: "MyProperty")]) }
8
- let!(:duplicator) { Spree::ProductDuplicator.new(product) }
9
-
10
- let(:image) { File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __dir__)) }
11
- let(:params) { { viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 1", position: 1 } }
12
-
13
- before do
14
- Spree::Image.create(params)
15
- end
16
-
17
- it "will duplicate the product" do
18
- expect{ duplicator.duplicate }.to change{ Spree::Product.count }.by(1)
19
- end
20
-
21
- context 'when image duplication enabled' do
22
- it "will duplicate the product images" do
23
- expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(1)
24
- end
25
- end
26
-
27
- context 'when image duplication disabled' do
28
- let!(:duplicator) { Spree::ProductDuplicator.new(product, false) }
29
-
30
- it "will not duplicate the product images" do
31
- expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(0)
32
- end
33
- end
34
-
35
- context 'image duplication default' do
36
- context 'when default is set to true' do
37
- it 'clones images if no flag passed to initializer' do
38
- expect{ duplicator.duplicate }.to change{ Spree::Image.count }.by(1)
39
- end
40
- end
41
-
42
- context 'when default is set to false' do
43
- before do
44
- ProductDuplicator.clone_images_default = false
45
- end
46
-
47
- after do
48
- ProductDuplicator.clone_images_default = true
49
- end
50
-
51
- it 'does not clone images if no flag passed to initializer' do
52
- expect{ ProductDuplicator.new(product).duplicate }.to change{ Spree::Image.count }.by(0)
53
- end
54
- end
55
- end
56
-
57
- context "product attributes" do
58
- let!(:new_product) { duplicator.duplicate }
59
-
60
- it "will set an unique name" do
61
- expect(new_product.name).to eql "COPY OF #{product.name}"
62
- end
63
-
64
- it "will set an unique sku" do
65
- expect(new_product.sku).to include "COPY OF SKU"
66
- end
67
-
68
- it "copied the properties" do
69
- expect(new_product.product_properties.count).to be 1
70
- expect(new_product.product_properties.first.property.name).to eql "MyProperty"
71
- end
72
- end
73
-
74
- context "with variants" do
75
- let(:option_type) { create(:option_type, name: "MyOptionType") }
76
- let(:option_value1) { create(:option_value, name: "OptionValue1", option_type: option_type) }
77
- let(:option_value2) { create(:option_value, name: "OptionValue2", option_type: option_type) }
78
-
79
- let!(:variant1) { create(:variant, product: product, option_values: [option_value1]) }
80
- let!(:variant2) { create(:variant, product: product, option_values: [option_value2]) }
81
-
82
- it "will duplciate the variants" do
83
- # will change the count by 3, since there will be a master variant as well
84
- expect{ duplicator.duplicate }.to change{ Spree::Variant.count }.by(3)
85
- end
86
-
87
- it "will not duplicate the option values" do
88
- expect{ duplicator.duplicate }.to change{ Spree::OptionValue.count }.by(0)
89
- end
90
- end
91
- end
92
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'spree/core/product_filters'
5
-
6
- RSpec.describe 'product filters', type: :model do
7
- # Regression test for https://github.com/spree/spree/issues/1709
8
- context 'finds products filtered by brand' do
9
- let(:product) { create(:product) }
10
- before do
11
- Spree::Property.create!(name: "brand", presentation: "brand")
12
- product.set_property("brand", "Nike")
13
- end
14
-
15
- it "does not attempt to call value method on Arel::Table" do
16
- Spree::Core::ProductFilters.brand_filter
17
- end
18
-
19
- it "can find products in the 'Nike' brand" do
20
- expect(Spree::Product.brand_any("Nike")).to include(product)
21
- end
22
- it "sorts products without brand specified" do
23
- product.set_property("brand", "Nike")
24
- create(:product).set_property("brand", nil)
25
- Spree::Core::ProductFilters.brand_filter[:labels]
26
- end
27
- end
28
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ProductProperty, type: :model do
6
- context "touching" do
7
- let(:product_property) { create(:product_property) }
8
- let(:product) { product_property.product }
9
-
10
- before do
11
- product.update_columns(updated_at: 1.day.ago)
12
- end
13
-
14
- subject { product_property.touch }
15
-
16
- it "touches the product" do
17
- expect { subject }.to change { product.reload.updated_at }
18
- end
19
- end
20
- end
@@ -1,584 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module ThirdParty
6
- class Extension < Spree::Base
7
- # nasty hack so we don't have to create a table to back this fake model
8
- self.table_name = 'spree_products'
9
- end
10
- end
11
-
12
- RSpec.describe Spree::Product, type: :model do
13
- context 'product instance' do
14
- let(:product) { create(:product) }
15
- let(:variant) { create(:variant, product: product) }
16
-
17
- context '#duplicate' do
18
- before do
19
- allow(product).to receive_messages taxons: [create(:taxon)]
20
- end
21
-
22
- it 'duplicates product' do
23
- clone = product.duplicate
24
- expect(clone.name).to eq('COPY OF ' + product.name)
25
- expect(clone.master.sku).to eq('COPY OF ' + product.master.sku)
26
- expect(clone.taxons).to eq(product.taxons)
27
- expect(clone.images.size).to eq(product.images.size)
28
- end
29
-
30
- it 'calls #duplicate_extra', partial_double_verification: false do
31
- expect_any_instance_of(Spree::Product).to receive(:duplicate_extra) do |product, old_product|
32
- product.name = old_product.name.reverse
33
- end
34
-
35
- clone = product.duplicate
36
- expect(clone.name).to eq(product.name.reverse)
37
- end
38
- end
39
-
40
- describe "#save" do
41
- before { product.update_columns(updated_at: 1.day.ago) }
42
- subject { product.save! }
43
-
44
- shared_examples "a change occurred" do
45
- it "should change updated_at" do
46
- expect { subject }.to change{ product.updated_at }
47
- end
48
-
49
- it "should touch taxons" do
50
- taxon = create(:taxon, product_ids: [product.id])
51
- taxon.update_columns(updated_at: 1.day.ago)
52
- product.taxons.reload
53
- expect { subject }.to change{ taxon.reload.updated_at }
54
- end
55
- end
56
-
57
- shared_examples "no change occurred" do
58
- it "should not change updated_at" do
59
- expect { subject }.not_to change{ product.updated_at }
60
- end
61
-
62
- it "should not touch taxons" do
63
- taxon = create(:taxon, products: [product])
64
- taxon.update_columns(updated_at: 1.day.ago)
65
- product.taxons.reload
66
- expect { subject }.not_to change{ taxon.reload.updated_at }
67
- end
68
- end
69
-
70
- context "when nothing has changed" do
71
- it_behaves_like "no change occurred"
72
- end
73
-
74
- context "when the product itself was changed" do
75
- before do
76
- product.name = "Perri-air"
77
- end
78
-
79
- it_behaves_like "a change occurred"
80
- end
81
-
82
- context "when master variant changed" do
83
- before do
84
- product.master.sku = "Something changed"
85
- end
86
-
87
- it_behaves_like "a change occurred"
88
-
89
- it "saves the master" do
90
- product.save!
91
- expect(product.reload.master.sku).to eq "Something changed"
92
- end
93
- end
94
-
95
- context "when master default price changed" do
96
- before do
97
- master = product.master
98
- master.default_price.price = 11
99
- master.save!
100
- product.update_columns(updated_at: 1.day.ago)
101
- product.master.default_price.price = 12
102
- end
103
-
104
- it_behaves_like "a change occurred"
105
-
106
- it "saves the default_price" do
107
- product.save!
108
- expect(product.reload.master.default_price.price).to eq 12
109
- end
110
- end
111
- end
112
-
113
- context "product has no variants" do
114
- context "#discard" do
115
- it "should set deleted_at value" do
116
- product.discard
117
- expect(product.deleted_at).not_to be_nil
118
- expect(product.master.reload.deleted_at).not_to be_nil
119
- end
120
- end
121
- end
122
-
123
- context "product has variants" do
124
- before do
125
- create(:variant, product: product)
126
- end
127
-
128
- context "#discard" do
129
- it "should set deleted_at value" do
130
- product.discard
131
- expect(product.deleted_at).not_to be_nil
132
- expect(product.variants_including_master).to all(be_discarded)
133
- end
134
- end
135
- end
136
-
137
- context "#price" do
138
- # Regression test for https://github.com/spree/spree/issues/1173
139
- it 'strips non-price characters' do
140
- product.price = "$10"
141
- expect(product.price).to eq(10.0)
142
- end
143
- end
144
-
145
- context "#display_price" do
146
- before { product.price = 10.55 }
147
-
148
- it "shows the amount" do
149
- expect(product.display_price.to_s).to eq("$10.55")
150
- end
151
-
152
- context "with currency set to JPY" do
153
- before do
154
- product.master.default_price.currency = 'JPY'
155
- product.master.default_price.save!
156
- stub_spree_preferences(currency: 'JPY')
157
- end
158
-
159
- it "displays the currency in yen" do
160
- expect(product.display_price.to_s).to eq("¥11")
161
- end
162
- end
163
- end
164
-
165
- context "#available?" do
166
- it "should be available if date is in the past" do
167
- product.available_on = 1.day.ago
168
- expect(product).to be_available
169
- end
170
-
171
- it "should not be available if date is nil or in the future" do
172
- product.available_on = nil
173
- expect(product).not_to be_available
174
-
175
- product.available_on = 1.day.from_now
176
- expect(product).not_to be_available
177
- end
178
-
179
- it "should not be available if soft-destroyed" do
180
- product.discard
181
- expect(product).not_to be_available
182
- end
183
- end
184
-
185
- context "variants_and_option_values" do
186
- let!(:high) { create(:variant, product: product) }
187
- let!(:low) { create(:variant, product: product) }
188
-
189
- before { high.option_values.destroy_all }
190
-
191
- it "returns only variants with option values" do
192
- Spree::Deprecation.silence do
193
- expect(product.variants_and_option_values).to eq([low])
194
- end
195
- end
196
- end
197
-
198
- context "variants_and_option_values_for" do
199
- let!(:high) { create(:variant, product: product) }
200
- let!(:low) { create(:variant, product: product) }
201
-
202
- context "when one product does not have option values" do
203
- before { high.option_values.destroy_all }
204
-
205
- it "returns only variants with option values" do
206
- expect(product.variants_and_option_values_for).to eq([low])
207
- end
208
- end
209
-
210
- context "when asking with different pricing options" do
211
- let(:pricing_options) { Spree::Config.pricing_options_class.new(currency: "EUR") }
212
-
213
- before do
214
- low.prices.create(amount: 99.00, currency: "EUR")
215
- end
216
-
217
- it "returns only variants which have matching prices" do
218
- expect(product.variants_and_option_values_for).to contain_exactly(low, high)
219
- expect(product.variants_and_option_values_for(pricing_options)).to contain_exactly(low)
220
- end
221
- end
222
-
223
- context 'when a variant has a fallback price' do
224
- before do
225
- low.prices.create(country_iso: nil)
226
- end
227
-
228
- it "returns that variant once" do
229
- expect(product.variants_and_option_values_for.length).to eq(2)
230
- end
231
- end
232
- end
233
-
234
- describe "#variant_option_values_by_option_type" do
235
- let(:size) { create(:option_type, name: 'size') }
236
- let(:length) { create(:option_type, name: 'length') }
237
- let(:product) { create(:product, option_types: [size, length]) }
238
- let(:size_small) { create(:option_value, name: 'small', option_type: size, position: 3) }
239
- let(:size_medium) { create(:option_value, name: 'medium', option_type: size, position: 1) }
240
- let(:size_large) { create(:option_value, name: 'large', option_type: size, position: 2) }
241
- let!(:variant) { create(:variant, product: product, option_values: [size_small, size_medium]) }
242
-
243
- subject { product.variant_option_values_by_option_type }
244
-
245
- it "returns the option values associated with the product's variants grouped by option type" do
246
- expect(subject).to eq({ size => [size_medium, size_small] })
247
- end
248
- end
249
-
250
- describe "#find_variant_property_rule" do
251
- let(:option_value) { create(:option_value) }
252
-
253
- subject { product.find_variant_property_rule([option_value.id]) }
254
-
255
- context "a matching rule exists" do
256
- let!(:rule) do
257
- create(:variant_property_rule, product: product, option_value: option_value)
258
- end
259
-
260
- it "returns the rule" do
261
- expect(subject).to eq rule
262
- end
263
- end
264
-
265
- context "a matching rule doesn't exist" do
266
- it "returns nil" do
267
- expect(subject).to be_nil
268
- end
269
- end
270
- end
271
-
272
- describe 'Variants sorting' do
273
- let(:master){ product.master }
274
-
275
- let!(:second) { create(:variant, product: product) }
276
- let!(:third) { create(:variant, product: product) }
277
- let!(:first) { create(:variant, product: product) }
278
-
279
- before do
280
- first.update_columns(position: 2)
281
- second.update_columns(position: 3)
282
- third.update_columns(position: 4)
283
- end
284
-
285
- context 'without master variant' do
286
- it 'sorts variants by position' do
287
- expect(product.variants).to eq([first, second, third])
288
- end
289
- end
290
-
291
- context 'with master variant' do
292
- it 'sorts variants by position' do
293
- expect(product.variants_including_master).to eq([master, first, second, third])
294
- end
295
- end
296
- end
297
-
298
- context "has stock movements" do
299
- let(:product) { create(:product) }
300
- let(:variant) { product.master }
301
- let(:stock_item) { variant.stock_items.first }
302
-
303
- it "doesnt raise ReadOnlyRecord error" do
304
- Spree::StockMovement.create!(stock_item: stock_item, quantity: 1)
305
- product.discard
306
- end
307
- end
308
-
309
- # Regression test for https://github.com/spree/spree/issues/3737
310
- context "has stock items" do
311
- let(:product) { create(:product) }
312
- it "can retrieve stock items" do
313
- expect(product.master.stock_items.first).not_to be_nil
314
- expect(product.stock_items.first).not_to be_nil
315
- end
316
- end
317
-
318
- context "slugs" do
319
- it "normalizes slug on update validation" do
320
- product.slug = "hey//joe"
321
- product.valid?
322
- expect(product.slug).not_to match "/"
323
- end
324
-
325
- it "renames slug on destroy" do
326
- old_slug = product.slug
327
- product.discard
328
- expect(old_slug).to_not eq product.slug
329
- end
330
-
331
- it "validates slug uniqueness" do
332
- existing_product = product
333
- new_product = create(:product)
334
- new_product.slug = existing_product.slug
335
-
336
- expect(new_product.valid?).to eq false
337
- end
338
-
339
- it "falls back to 'name-sku' for slug if regular name-based slug already in use" do
340
- product1 = build(:product)
341
- product1.name = "test"
342
- product1.sku = "123"
343
- product1.save!
344
-
345
- product2 = build(:product)
346
- product2.name = "test"
347
- product2.sku = "456"
348
- product2.save!
349
-
350
- expect(product2.slug).to eq 'test-456'
351
- end
352
- end
353
-
354
- describe "#discard" do
355
- let(:product) { create(:product, slug: 'my-awesome-product') }
356
-
357
- it "destroys related associations" do
358
- create(:variant, product: product)
359
- product.option_types = [create(:option_type)]
360
- product.master.images = [create(:image)]
361
- product.taxons = [create(:taxon)]
362
- product.properties = [create(:property)]
363
-
364
- product.discard
365
-
366
- product.reload
367
- expect(product.option_types).to be_empty
368
- expect(product.images).to be_empty
369
- expect(product.taxons).to be_empty
370
- expect(product.properties).to be_empty
371
- end
372
-
373
- it "removes from product promotion rules" do
374
- promotion = create(:promotion)
375
- rule = promotion.rules.create!(type: 'Spree::Promotion::Rules::Product', products: [product])
376
-
377
- product.discard
378
-
379
- rule.reload
380
- expect(rule.products).to be_empty
381
- end
382
-
383
- it "replaces the slug" do
384
- product.discard
385
-
386
- expect(product.slug).to match /\A\d+_my-awesome-product\z/
387
-
388
- # Ensure a new product can be created with the slug
389
- new_product = create(:product, slug: 'my-awesome-product')
390
- expect(new_product.slug).to eq('my-awesome-product')
391
- end
392
- end
393
-
394
- context "associations" do
395
- describe "product_option_types" do
396
- context "with no existing option types" do
397
- before { product.update_columns(updated_at: 1.day.ago) }
398
-
399
- it "touches the product instance when an option type is added" do
400
- expect {
401
- product.product_option_types.create(option_type: create(:option_type, name: 'new-option-type'))
402
- }.to change { product.reload.updated_at }
403
- end
404
- end
405
-
406
- context "with an existing option type" do
407
- before do
408
- product.product_option_types.create(option_type: create(:option_type, name: 'new-option-type'))
409
- product.update_columns(updated_at: 1.day.ago)
410
- end
411
-
412
- it "touches product instance when an option type is removed" do
413
- expect {
414
- product.product_option_types = []
415
- }.to change { product.reload.updated_at }
416
- end
417
- end
418
- end
419
- end
420
-
421
- context "#really_destroy!" do
422
- it "destroy the product" do
423
- product.really_destroy!
424
- expect(product).not_to be_persisted
425
- end
426
- end
427
- end
428
-
429
- context "properties" do
430
- let(:product) { create(:product) }
431
-
432
- it "should properly assign properties" do
433
- product.set_property('the_prop', 'value1')
434
- expect(product.property('the_prop')).to eq('value1')
435
-
436
- product.set_property('the_prop', 'value2')
437
- expect(product.property('the_prop')).to eq('value2')
438
- end
439
-
440
- it "should not create duplicate properties when set_property is called" do
441
- expect {
442
- product.set_property('the_prop', 'value2')
443
- product.save
444
- product.reload
445
- }.not_to change(product.properties, :length)
446
-
447
- expect {
448
- product.set_property('the_prop_new', 'value')
449
- product.save
450
- product.reload
451
- expect(product.property('the_prop_new')).to eq('value')
452
- }.to change { product.properties.length }.by(1)
453
- end
454
-
455
- # Regression test for https://github.com/spree/spree/issues/2455
456
- it "should not overwrite properties' presentation names" do
457
- Spree::Property.where(name: 'foo').first_or_create!(presentation: "Foo's Presentation Name")
458
- product.set_property('foo', 'value1')
459
- product.set_property('bar', 'value2')
460
- expect(Spree::Property.where(name: 'foo').first.presentation).to eq("Foo's Presentation Name")
461
- expect(Spree::Property.where(name: 'bar').first.presentation).to eq("bar")
462
- end
463
-
464
- # Regression test for https://github.com/spree/spree/issues/4416
465
- context "#possible_promotions" do
466
- let!(:promotion) do
467
- create(:promotion, advertise: true, starts_at: 1.day.ago)
468
- end
469
- let!(:rule) do
470
- Spree::Promotion::Rules::Product.create(
471
- promotion: promotion,
472
- products: [product]
473
- )
474
- end
475
-
476
- it "lists the promotion as a possible promotion" do
477
- expect(product.possible_promotions).to include(promotion)
478
- end
479
- end
480
- end
481
-
482
- context "#images" do
483
- let(:product) { create(:product) }
484
- let(:image) { File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __dir__)) }
485
- let(:params) { { viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 2", position: 2 } }
486
-
487
- before do
488
- Spree::Image.create(params)
489
- Spree::Image.create(params.merge({ alt: "position 1", position: 1 }))
490
- Spree::Image.create(params.merge({ viewable_type: 'ThirdParty::Extension', alt: "position 1", position: 2 }))
491
- end
492
-
493
- it "only looks for variant images" do
494
- expect(product.images.size).to eq(2)
495
- end
496
-
497
- it "should be sorted by position" do
498
- expect(product.images.pluck(:alt)).to eq(["position 1", "position 2"])
499
- end
500
- end
501
-
502
- # Regression tests for https://github.com/spree/spree/issues/2352
503
- context "classifications and taxons" do
504
- it "is joined through classifications" do
505
- reflection = Spree::Product.reflect_on_association(:taxons)
506
- expect(reflection.options[:through]).to eq(:classifications)
507
- end
508
-
509
- it "will delete all classifications" do
510
- reflection = Spree::Product.reflect_on_association(:classifications)
511
- expect(reflection.options[:dependent]).to eq(:delete_all)
512
- end
513
- end
514
-
515
- context '#total_on_hand' do
516
- it 'should be infinite if track_inventory_levels is false' do
517
- stub_spree_preferences(track_inventory_levels: false)
518
- expect(build(:product, variants_including_master: [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY)
519
- end
520
-
521
- it 'should be infinite if variant is on demand' do
522
- stub_spree_preferences(track_inventory_levels: true)
523
- expect(build(:product, variants_including_master: [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY)
524
- end
525
-
526
- it 'should return sum of stock items count_on_hand' do
527
- product = create(:product)
528
- product.stock_items.first.set_count_on_hand 5
529
- product.variants_including_master.reload # force load association
530
- expect(product.total_on_hand).to eql(5)
531
- end
532
-
533
- it 'should return sum of stock items count_on_hand when variants_including_master is not loaded' do
534
- product = create(:product)
535
- product.stock_items.first.set_count_on_hand 5
536
- expect(product.reload.total_on_hand).to eql(5)
537
- end
538
- end
539
-
540
- # Regression spec for https://github.com/spree/spree/issues/5588
541
- context '#validate_master when duplicate SKUs entered' do
542
- let!(:first_product) { create(:product, sku: 'a-sku') }
543
- let(:second_product) { build(:product, sku: 'a-sku') }
544
-
545
- subject { second_product }
546
- it { is_expected.to be_invalid }
547
- end
548
-
549
- describe '.new' do
550
- let(:product) { Spree::Product.new(attributes) }
551
-
552
- shared_examples "new product with master" do
553
- it "initializes master correctly" do
554
- expect(product.master.is_master).to be true
555
- expect(product.master.product).to be product
556
- end
557
- end
558
-
559
- context 'no attributes' do
560
- let(:attributes) { {} }
561
- it_behaves_like "new product with master"
562
- end
563
-
564
- context 'initializing with variant attributes' do
565
- let(:attributes) { { sku: 'FOO' } }
566
-
567
- it_behaves_like "new product with master"
568
-
569
- it "initializes the variant with the correct attributes" do
570
- expect(product.master.sku).to eq 'FOO'
571
- expect(product.sku).to eq 'FOO'
572
- end
573
- end
574
- end
575
-
576
- describe '#gallery' do
577
- let(:product) { Spree::Product.new }
578
- subject { product.gallery }
579
-
580
- it 'responds to #images' do
581
- expect(subject).to respond_to(:images)
582
- end
583
- end
584
- end