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,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StoreSelector::ByServerName do
6
- describe "#store" do
7
- subject { described_class.new(request).store }
8
-
9
- context "with a default" do
10
- let(:request) { double(headers: {}, env: {}) }
11
- let!(:store_1) { create :store, default: true }
12
-
13
- it "returns the default store" do
14
- expect(subject).to eq(store_1)
15
- end
16
-
17
- context "with a domain match" do
18
- let(:request) { double(headers: {}, env: { "SERVER_NAME" => url } ) }
19
- let(:url) { "server-name.org" }
20
- let!(:store_2) { create :store, default: false, url: url }
21
-
22
- it "returns the store with the matching domain" do
23
- expect(subject).to eq(store_2)
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StoreSelector::Legacy do
6
- describe "#store" do
7
- subject { described_class.new(request).store }
8
-
9
- context "with a default" do
10
- let(:request) { double(headers: {}, env: {}) }
11
- let!(:store_1) { create :store, default: true }
12
-
13
- it "returns the default store" do
14
- expect(subject).to eq(store_1)
15
- end
16
-
17
- context "with a domain match" do
18
- let(:request) { double(headers: {}, env: { "SERVER_NAME" => url } ) }
19
- let(:url) { "server-name.org" }
20
- let!(:store_2) { create :store, default: false, url: url }
21
-
22
- it "returns the store with the matching domain" do
23
- expect(subject).to eq(store_2)
24
- end
25
-
26
- context 'the store has multiple URLs' do
27
- let!(:store_2) { create :store, default: false, url: "foo\n#{url}\nbar" }
28
-
29
- it "returns the store with the matching domain" do
30
- expect(subject).to eq(store_2)
31
- end
32
- end
33
-
34
- context "with headers" do
35
- let(:request) { double(headers: { "HTTP_SPREE_STORE" => headers_code }, env: {}) }
36
- let(:headers_code) { "HEADERS" }
37
- let!(:store_3) { create :store, code: headers_code, default: false }
38
-
39
- it "returns the store with the matching code" do
40
- expect(subject).to eq(store_3)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,156 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Store, type: :model do
6
- it { is_expected.to respond_to(:cart_tax_country_iso) }
7
-
8
- describe ".by_url (deprecated)" do
9
- let!(:store) { create(:store, url: "website1.com\nwww.subdomain.com") }
10
- let!(:store_2) { create(:store, url: 'freethewhales.com') }
11
-
12
- around do |example|
13
- Spree::Deprecation.silence { example.run }
14
- end
15
-
16
- it "should find stores by url" do
17
- by_domain = Spree::Store.by_url('www.subdomain.com')
18
-
19
- expect(by_domain).to include(store)
20
- expect(by_domain).not_to include(store_2)
21
- end
22
- end
23
-
24
- describe '.current (deprecated)' do
25
- let!(:store_1) { create(:store) }
26
- let!(:store_default) { create(:store, name: 'default', default: true) }
27
- let!(:store_2) { create(:store, default: false, url: 'www.subdomain.com') }
28
- let!(:store_3) { create(:store, default: false, url: 'www.another.com', code: 'CODE') }
29
-
30
- delegate :current, to: :described_class
31
-
32
- around do |example|
33
- Spree::Deprecation.silence { example.run }
34
- end
35
-
36
- context "with no match" do
37
- it 'should return the default domain' do
38
- expect(current('foobar.com')).to eql(store_default)
39
- end
40
- end
41
-
42
- context "with matching url" do
43
- it 'should return matching store' do
44
- expect(current('www.subdomain.com')).to eql(store_2)
45
- end
46
- end
47
-
48
- context "with matching code" do
49
- it 'should return matching store' do
50
- expect(current('CODE')).to eql(store_3)
51
- end
52
- end
53
- end
54
-
55
- describe ".default" do
56
- it "should ensure saved store becomes default if one doesn't exist yet" do
57
- expect(Spree::Store.where(default: true).count).to eq(0)
58
- store = build(:store)
59
- expect(store.default).not_to be true
60
-
61
- store.save!
62
-
63
- expect(store.default).to be true
64
- end
65
-
66
- it "should ensure there is only one default" do
67
- orig_default_store = create(:store, default: true)
68
- expect(orig_default_store.reload.default).to be true
69
-
70
- new_default_store = create(:store, default: true)
71
-
72
- expect(Spree::Store.where(default: true).count).to eq(1)
73
-
74
- [orig_default_store, new_default_store].each(&:reload)
75
-
76
- expect(new_default_store.default).to be true
77
- expect(orig_default_store.default).not_to be true
78
- end
79
- end
80
-
81
- describe '#default_cart_tax_location' do
82
- subject { described_class.new(cart_tax_country_iso: cart_tax_country_iso) }
83
- context "when there is no cart_tax_country_iso set" do
84
- let(:cart_tax_country_iso) { '' }
85
- it "responds with an empty default_cart_tax_location" do
86
- expect(subject.default_cart_tax_location).to be_empty
87
- end
88
- end
89
-
90
- context "when there is a cart_tax_country_iso set" do
91
- let(:country) { create(:country, iso: "DE") }
92
- let(:cart_tax_country_iso) { country.iso }
93
-
94
- it "responds with a default_cart_tax_location with that country" do
95
- expect(subject.default_cart_tax_location).to eq(Spree::Tax::TaxLocation.new(country: country))
96
- end
97
- end
98
- end
99
-
100
- describe '#available_locales' do
101
- let(:store) { described_class.new(available_locales: locales) }
102
- subject { store.available_locales }
103
-
104
- context 'with available_locales: []' do
105
- let(:locales) { [] }
106
-
107
- it "returns all available locales" do
108
- expect(subject).to eq([:en])
109
- end
110
-
111
- it "serializes as nil" do
112
- expect(store[:available_locales]).to be nil
113
- end
114
- end
115
-
116
- context 'with available_locales: [:en]' do
117
- let(:locales) { [:en] }
118
-
119
- it "returns [:en]" do
120
- expect(subject).to eq([:en])
121
- end
122
-
123
- it "serializes correctly" do
124
- expect(store[:available_locales]).to eq("en")
125
- end
126
- end
127
-
128
- context 'with available_locales: [:en, :fr]' do
129
- let(:locales) { [:en, :fr] }
130
-
131
- it "returns [:fr]" do
132
- expect(subject).to eq([:en, :fr])
133
- end
134
-
135
- it "serializes correctly" do
136
- expect(store[:available_locales]).to eq("en,fr")
137
- end
138
- end
139
-
140
- context 'with available_locales: [:fr]' do
141
- let(:locales) { [:fr] }
142
-
143
- it "returns [:fr]" do
144
- expect(subject).to eq([:fr])
145
- end
146
- end
147
-
148
- context 'with available_locales: ["fr"]' do
149
- let(:locales) { ["fr"] }
150
-
151
- it "returns symbols [:fr]" do
152
- expect(subject).to eq([:fr])
153
- end
154
- end
155
- end
156
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Tax::OrderAdjuster do
6
- subject(:adjuster) { described_class.new(order) }
7
-
8
- describe 'initialization' do
9
- let(:order) { Spree::Order.new }
10
-
11
- it 'sets order to adjustable' do
12
- expect(adjuster.order).to eq(order)
13
- end
14
- end
15
-
16
- describe '#adjust!' do
17
- let(:order) { Spree::Order.new }
18
-
19
- let(:custom_calculator_class) { double }
20
- let(:custom_calculator_instance) { double }
21
-
22
- before do
23
- stub_spree_preferences(tax_calculator_class: custom_calculator_class)
24
- end
25
-
26
- it 'calls the configured tax calculator' do
27
- expect(custom_calculator_class).to receive(:new).with(order).at_least(:once).and_return(custom_calculator_instance)
28
- expect(custom_calculator_instance).to receive(:calculate).at_least(:once).and_return(
29
- Spree::Tax::OrderTax.new(order_id: order.id, line_item_taxes: [], shipment_taxes: [])
30
- )
31
-
32
- adjuster.adjust!
33
- end
34
- end
35
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Tax::ShippingRateTaxer do
6
- let(:shipping_rate) { build_stubbed(:shipping_rate) }
7
-
8
- subject(:taxer) { described_class.new(shipping_rate) }
9
-
10
- describe '#tax' do
11
- subject(:taxer) { described_class.new.tax(shipping_rate) }
12
-
13
- context 'with no matching tax rates' do
14
- it 'returns the object' do
15
- expect(subject).to eq(shipping_rate)
16
- expect(subject.taxes).to eq([])
17
- end
18
- end
19
-
20
- context 'with tax rates' do
21
- let(:ship_address) { create :address }
22
- let(:tax_category) { create :tax_category }
23
- let(:order) { create :order, ship_address: ship_address }
24
- let(:shipment) { create :shipment, order: order }
25
- let!(:shipping_method) { create :shipping_method, tax_category: tax_category, zones: [zone] }
26
- let(:zone) { create :zone, countries: [ship_address.country] }
27
- let!(:tax_rate_one) { create :tax_rate, tax_categories: [tax_category], zone: zone, amount: 0.1 }
28
- let!(:tax_rate_two) do
29
- create(
30
- :tax_rate,
31
- tax_categories: [create(:tax_category), tax_category],
32
- zone: zone,
33
- amount: 0.2
34
- )
35
- end
36
- let!(:non_applicable_rate) { create :tax_rate, zone: zone }
37
- let(:shipping_rate) { create :shipping_rate, cost: 10, shipping_method: shipping_method }
38
-
39
- it 'builds a shipping rate tax for every matching tax rate' do
40
- expect(subject.taxes.length).to eq(2)
41
- expect(subject.taxes.map(&:tax_rate)).to include(tax_rate_one)
42
- expect(subject.taxes.map(&:tax_rate)).to include(tax_rate_two)
43
- # This rate has a different tax category.
44
- expect(subject.taxes.map(&:tax_rate)).not_to include(non_applicable_rate)
45
- end
46
-
47
- it 'will produce a shipping rate that, when saved, also saves the taxes' do
48
- expect { subject.save }.to change(Spree::ShippingRateTax, :count).by(2)
49
- end
50
-
51
- it 'will produce a shipping rate with correct taxes' do
52
- tax_one = subject.taxes.detect { |tax| tax.tax_rate == tax_rate_one }
53
- tax_two = subject.taxes.detect { |tax| tax.tax_rate == tax_rate_two }
54
- expect(tax_one.amount).to eq(shipping_rate.cost * tax_rate_one.amount)
55
- expect(tax_two.amount).to eq(shipping_rate.cost * tax_rate_two.amount)
56
- end
57
- end
58
- end
59
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Tax::TaxLocation do
6
- let(:country) { build_stubbed(:country) }
7
- let(:state) { build_stubbed(:state) }
8
-
9
- subject { described_class.new }
10
-
11
- it { is_expected.to respond_to(:state_id) }
12
- it { is_expected.to respond_to(:country_id) }
13
-
14
- describe "default values" do
15
- it "has a nil state and country id" do
16
- expect(subject.state_id).to eq(nil)
17
- expect(subject.country_id).to eq(nil)
18
- end
19
- end
20
-
21
- describe '#==' do
22
- let(:other) { described_class.new(state: nil, country: nil) }
23
-
24
- it 'compares the values of state id and country id and does not care about object identity' do
25
- expect(subject).to eq(other)
26
- end
27
- end
28
-
29
- describe "initialization" do
30
- subject { described_class.new(args) }
31
-
32
- context 'with a country object' do
33
- let(:args) { { country: country } }
34
-
35
- it "will yield a location with that country's id" do
36
- expect(subject.country_id).to eq(country.id)
37
- end
38
- end
39
- end
40
-
41
- describe "#country" do
42
- let(:country) { create(:country) }
43
- subject { described_class.new(args).country }
44
-
45
- context 'with a country object' do
46
- let(:args) { { country: country } }
47
-
48
- it { is_expected.to eq(country) }
49
- end
50
-
51
- context 'with no country object' do
52
- let(:args) { { country: nil } }
53
-
54
- it { is_expected.to be nil }
55
- end
56
- end
57
-
58
- describe "#empty?" do
59
- subject { described_class.new(args).empty? }
60
-
61
- context 'with a country present' do
62
- let(:args) { { country: country } }
63
-
64
- it { is_expected.to be false }
65
- end
66
-
67
- context 'with a state present' do
68
- let(:args) { { state: state } }
69
-
70
- it { is_expected.to be false }
71
- end
72
-
73
- context 'with no region data present' do
74
- let(:args) { {} }
75
-
76
- it { is_expected.to be true }
77
- end
78
- end
79
- end
@@ -1,815 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe "Taxation system integration tests" do
6
- let(:order) { create :order, ship_address: shipping_address, state: "delivery" }
7
- let(:book_product) do
8
- create :product,
9
- price: 20,
10
- name: "Book",
11
- tax_category: books_category,
12
- shipping_category: books_shipping_category
13
- end
14
- let(:download_product) do
15
- create :product,
16
- price: 10,
17
- name: "Download",
18
- tax_category: digital_category,
19
- shipping_category: digital_shipping_category
20
- end
21
- let(:sweater_product) do
22
- create :product,
23
- price: 30,
24
- name: "Download",
25
- tax_category: normal_category,
26
- shipping_category: normal_shipping_category
27
- end
28
- let(:fruit_product) do
29
- create :product,
30
- price: 5,
31
- name: "Food",
32
- tax_category: fruit_category,
33
- shipping_category: normal_shipping_category
34
- end
35
-
36
- let(:book) { book_product.master }
37
- let(:download) { download_product.master }
38
- let(:sweater) { sweater_product.master }
39
- let(:fruit) { fruit_product.master }
40
-
41
- let(:books_category) { create :tax_category, name: "Books" }
42
- let(:normal_category) { create :tax_category, name: "Normal" }
43
- let(:digital_category) { create :tax_category, name: "Digital Goods" }
44
- let(:fruit_category) { create :tax_category, name: "Fruit Product" }
45
- let(:milk_category) { create :tax_category, name: "Milk Product" }
46
-
47
- let(:books_shipping_category) { create :shipping_category, name: "Book Shipping" }
48
- let(:normal_shipping_category) { create :shipping_category, name: "Normal Shipping" }
49
- let(:digital_shipping_category) { create :shipping_category, name: "Digital Premium Download" }
50
-
51
- let(:line_item) { order.line_items.first }
52
- let(:shipment) { order.shipments.first }
53
- let(:shipping_rate) { shipment.shipping_rates.first }
54
-
55
- context 'selling from germany' do
56
- let(:germany) { create :country, iso: "DE" }
57
- let!(:germany_zone) { create :zone, countries: [germany] }
58
- let(:romania) { create(:country, iso: "RO") }
59
- let(:romania_zone) { create(:zone, countries: [romania] ) }
60
- let(:eu_zone) { create(:zone, countries: [romania, germany]) }
61
- let(:world_zone) { create(:zone, :with_country) }
62
-
63
- let!(:german_book_vat) do
64
- create(
65
- :tax_rate,
66
- name: "German reduced VAT",
67
- included_in_price: true,
68
- amount: 0.07,
69
- tax_categories: [books_category],
70
- zone: eu_zone
71
- )
72
- end
73
- let!(:german_normal_vat) do
74
- create(
75
- :tax_rate,
76
- name: "German VAT",
77
- included_in_price: true,
78
- amount: 0.19,
79
- tax_categories: [normal_category],
80
- zone: eu_zone
81
- )
82
- end
83
- let!(:german_digital_vat) do
84
- create(
85
- :tax_rate,
86
- name: "German VAT",
87
- included_in_price: true,
88
- amount: 0.19,
89
- tax_categories: [digital_category],
90
- zone: germany_zone
91
- )
92
- end
93
- let!(:german_food_vat) do
94
- create(
95
- :tax_rate,
96
- name: "German Food VAT",
97
- included_in_price: true,
98
- amount: 0.09,
99
- tax_categories: [fruit_category, milk_category],
100
- zone: germany_zone
101
- )
102
- end
103
- let!(:romanian_digital_vat) do
104
- create(
105
- :tax_rate,
106
- name: "Romanian VAT",
107
- included_in_price: true,
108
- amount: 0.24,
109
- tax_categories: [digital_category],
110
- zone: romania_zone
111
- )
112
- end
113
- let!(:book_shipping_method) do
114
- create :shipping_method,
115
- cost: 8.00,
116
- shipping_categories: [books_shipping_category],
117
- tax_category: books_category,
118
- zones: [eu_zone, world_zone]
119
- end
120
-
121
- let!(:sweater_shipping_method) do
122
- create :shipping_method,
123
- cost: 16.00,
124
- shipping_categories: [normal_shipping_category],
125
- tax_category: normal_category,
126
- zones: [eu_zone, world_zone]
127
- end
128
-
129
- let!(:premium_download_shipping_method) do
130
- create :shipping_method,
131
- cost: 2.00,
132
- shipping_categories: [digital_shipping_category],
133
- tax_category: digital_category,
134
- zones: [eu_zone, world_zone]
135
- end
136
-
137
- before do
138
- stub_spree_preferences(admin_vat_country_iso: "DE")
139
- order.contents.add(variant)
140
- end
141
-
142
- context 'to germany' do
143
- let(:shipping_address) { create :address, country_iso_code: "DE" }
144
-
145
- context 'an order with a book' do
146
- let(:variant) { book }
147
-
148
- it 'still has the original price' do
149
- expect(line_item.price).to eq(20)
150
- end
151
-
152
- it 'has one tax adjustment' do
153
- expect(line_item.adjustments.tax.count).to eq(1)
154
- end
155
-
156
- it 'has 1.13 cents of included tax' do
157
- expect(line_item.included_tax_total).to eq(1.31)
158
- end
159
- end
160
-
161
- context 'an order with a book and a shipment' do
162
- let(:variant) { book }
163
-
164
- before { 2.times { order.next! } }
165
-
166
- it 'has a shipment for 8.00 dollars' do
167
- expect(shipment.amount).to eq(8.00)
168
- end
169
-
170
- it 'has a shipment with 0.52 included tax' do
171
- expect(shipment.included_tax_total).to eq(0.52)
172
- end
173
-
174
- it 'has a shipping rate that correctly reflects the shipment' do
175
- expect(shipping_rate.display_price).to eq("$8.00 (incl. $0.52 German reduced VAT)")
176
- end
177
- end
178
-
179
- context 'an order with a sweater' do
180
- let(:variant) { sweater }
181
-
182
- it 'still has the original price' do
183
- expect(line_item.price).to eq(30)
184
- end
185
-
186
- it 'has one tax adjustment' do
187
- expect(line_item.adjustments.tax.count).to eq(1)
188
- end
189
-
190
- it 'has 4,78 of included tax' do
191
- expect(line_item.included_tax_total).to eq(4.79)
192
- end
193
- end
194
-
195
- context 'an order with a sweater and a shipment' do
196
- let(:variant) { sweater }
197
-
198
- before { 2.times { order.next! } }
199
-
200
- it 'has a shipment for 16.00 dollars' do
201
- expect(shipment.amount).to eq(16.00)
202
- end
203
-
204
- it 'has a shipment with 2.55 included tax' do
205
- expect(shipment.included_tax_total).to eq(2.55)
206
- end
207
-
208
- it 'has a shipping rate that correctly reflects the shipment' do
209
- expect(shipping_rate.display_price).to eq("$16.00 (incl. $2.55 German VAT)")
210
- end
211
- end
212
-
213
- context 'an order with a download' do
214
- let(:variant) { download }
215
-
216
- it 'still has the original price' do
217
- expect(line_item.price).to eq(10)
218
- end
219
-
220
- it 'has one tax adjustment' do
221
- expect(line_item.adjustments.tax.count).to eq(1)
222
- end
223
-
224
- it 'has 1.60 of included tax' do
225
- expect(line_item.included_tax_total).to eq(1.60)
226
- end
227
- end
228
-
229
- context 'an order with a download and a shipment' do
230
- let(:variant) { download }
231
-
232
- before { 2.times { order.next! } }
233
-
234
- it 'has a shipment for 4.00 dollars' do
235
- expect(shipment.amount).to eq(2.00)
236
- end
237
-
238
- it 'has a shipment with 0.64 included tax' do
239
- expect(shipment.included_tax_total).to eq(0.32)
240
- end
241
-
242
- it 'has a shipping rate that correctly reflects the shipment' do
243
- expect(shipping_rate.display_price).to eq("$2.00 (incl. $0.32 German VAT)")
244
- end
245
- end
246
-
247
- context 'an order containg a fruit' do
248
- let(:variant) { fruit }
249
-
250
- it 'still has the original price' do
251
- expect(line_item.price).to eq(5)
252
- end
253
-
254
- it 'has one tax adjustment' do
255
- expect(line_item.adjustments.tax.count).to eq(1)
256
- end
257
-
258
- it 'has 0.45 of included tax' do
259
- expect(line_item.included_tax_total).to eq(0.41)
260
- end
261
- end
262
- end
263
-
264
- context 'to romania' do
265
- let(:shipping_address) { create :address, country_iso_code: "RO" }
266
-
267
- context 'an order with a book' do
268
- let(:variant) { book }
269
-
270
- it 'still has the original price' do
271
- expect(line_item.price).to eq(20)
272
- end
273
-
274
- it 'is adjusted to the original price' do
275
- expect(line_item.total).to eq(20)
276
- end
277
-
278
- it 'has one tax adjustment' do
279
- expect(line_item.adjustments.tax.count).to eq(1)
280
- end
281
-
282
- it 'has 1.13 cents of included tax' do
283
- expect(line_item.included_tax_total).to eq(1.31)
284
- end
285
-
286
- it 'has a constant amount pre tax' do
287
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69)
288
- end
289
- end
290
-
291
- context 'an order with a book and a shipment' do
292
- let(:variant) { book }
293
-
294
- before { 2.times { order.next! } }
295
-
296
- it 'has a shipment for 8.00 dollars' do
297
- expect(shipment.amount).to eq(8.00)
298
- end
299
-
300
- it 'has a shipment with 0.52 included tax' do
301
- expect(shipment.included_tax_total).to eq(0.52)
302
- end
303
-
304
- it 'has a shipping rate that correctly reflects the shipment' do
305
- expect(shipping_rate.display_price).to eq("$8.00 (incl. $0.52 German reduced VAT)")
306
- end
307
- end
308
-
309
- context 'an order with a sweater' do
310
- let(:variant) { sweater }
311
-
312
- it 'still has the original price' do
313
- expect(line_item.price).to eq(30)
314
- end
315
-
316
- it 'has one tax adjustment' do
317
- expect(line_item.adjustments.tax.count).to eq(1)
318
- end
319
-
320
- it 'has 4.79 of included tax' do
321
- expect(line_item.included_tax_total).to eq(4.79)
322
- end
323
-
324
- it 'has a constant amount pre tax' do
325
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(25.21)
326
- end
327
- end
328
-
329
- context 'an order with a sweater and a shipment' do
330
- let(:variant) { sweater }
331
-
332
- before { 2.times { order.next! } }
333
-
334
- it 'has a shipment for 16.00 dollars' do
335
- expect(shipment.amount).to eq(16.00)
336
- end
337
-
338
- it 'has a shipment with 2.55 included tax' do
339
- expect(shipment.included_tax_total).to eq(2.55)
340
- end
341
-
342
- it 'has a shipping rate that correctly reflects the shipment' do
343
- expect(shipping_rate.display_price).to eq("$16.00 (incl. $2.55 German VAT)")
344
- end
345
- end
346
-
347
- context 'an order with a download' do
348
- let(:variant) { download }
349
-
350
- it 'still has an adjusted price for romania' do
351
- expect(line_item.price).to eq(10.42)
352
- end
353
-
354
- it 'has one tax adjustment' do
355
- expect(line_item.adjustments.tax.count).to eq(1)
356
- end
357
-
358
- it 'has 2.02 of included tax' do
359
- expect(line_item.included_tax_total).to eq(2.02)
360
- end
361
-
362
- it 'has a constant amount pre tax' do
363
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(8.40)
364
- end
365
- end
366
-
367
- context 'an order with a download and a shipment' do
368
- let(:variant) { download }
369
-
370
- before { 2.times { order.next! } }
371
-
372
- it 'it has a shipment with worth 2.00' do
373
- expect(shipment.amount).to eq(2.00)
374
- end
375
-
376
- it 'has a shipment with 0.40 included tax' do
377
- expect(shipment.included_tax_total).to eq(0.39)
378
- end
379
-
380
- it 'has a shipping rate that correctly reflects the shipment' do
381
- expect(shipping_rate.display_price).to eq("$2.00 (incl. $0.39 Romanian VAT)")
382
- end
383
- end
384
- end
385
- # Technically, this can't be the case yet as the order won't pass the shipment stage,
386
- # but the taxation code shouldn't implicitly depend on the shipping code.
387
- context 'to an address that does not have a zone associated' do
388
- let(:shipping_address) { create :address, country_iso_code: "IT" }
389
-
390
- context 'an order with a book' do
391
- let(:variant) { book }
392
-
393
- it 'should sell at the net price' do
394
- expect(line_item.price).to eq(18.69)
395
- end
396
-
397
- it 'is adjusted to the net price' do
398
- expect(line_item.total).to eq(18.69)
399
- end
400
-
401
- it 'has no tax adjustments' do
402
- expect(line_item.adjustments.tax.count).to eq(0)
403
- end
404
-
405
- it 'has no included tax' do
406
- expect(line_item.included_tax_total).to eq(0)
407
- end
408
-
409
- it 'has no additional tax' do
410
- expect(line_item.additional_tax_total).to eq(0)
411
- end
412
-
413
- it 'has a constant amount pre tax' do
414
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69)
415
- end
416
- end
417
- end
418
-
419
- # International delivery, no tax applies whatsoever
420
- context 'to anywhere else in the world' do
421
- let(:shipping_address) { create :address, country: world_zone.countries.first }
422
-
423
- context 'an order with a book' do
424
- let(:variant) { book }
425
-
426
- it 'should sell at the net price' do
427
- expect(line_item.price).to eq(18.69)
428
- end
429
-
430
- it 'is adjusted to the net price' do
431
- expect(line_item.total).to eq(18.69)
432
- end
433
-
434
- it 'has no tax adjustments' do
435
- expect(line_item.adjustments.tax.count).to eq(0)
436
- end
437
-
438
- it 'has no included tax' do
439
- expect(line_item.included_tax_total).to eq(0)
440
- end
441
-
442
- it 'has no additional tax' do
443
- expect(line_item.additional_tax_total).to eq(0)
444
- end
445
-
446
- it 'has a constant amount pre tax' do
447
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(18.69)
448
- end
449
-
450
- context 'an order with a book and a shipment' do
451
- let(:variant) { book }
452
-
453
- before { 2.times { order.next! } }
454
-
455
- it 'it has a shipment that costs $8.00' do
456
- expect(shipment.amount).to eq(8.00)
457
- end
458
-
459
- it 'has a shipment with no included tax' do
460
- expect(shipment.included_tax_total).to eq(0)
461
- end
462
-
463
- it 'has a shipping rate that correctly reflects the shipment' do
464
- expect(shipping_rate.display_price).to eq("$8.00")
465
- end
466
- end
467
- end
468
-
469
- context 'an order with a sweater' do
470
- let(:variant) { sweater }
471
-
472
- it 'should sell at the net price' do
473
- expect(line_item.price).to eq(25.21)
474
- end
475
-
476
- it 'has no tax adjustments' do
477
- expect(line_item.adjustments.tax.count).to eq(0)
478
- end
479
-
480
- it 'has no included tax' do
481
- expect(line_item.included_tax_total).to eq(0)
482
- end
483
-
484
- it 'has no additional tax' do
485
- expect(line_item.additional_tax_total).to eq(0)
486
- end
487
-
488
- it 'has a constant amount pre tax' do
489
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(25.21)
490
- end
491
-
492
- context 'an order with a sweater and a shipment' do
493
- let(:variant) { sweater }
494
-
495
- before { 2.times { order.next! } }
496
-
497
- it 'it has a shipment costing $16.00' do
498
- expect(shipment.amount).to eq(16.00)
499
- end
500
-
501
- it 'has a shipment with no included tax' do
502
- expect(shipment.included_tax_total).to eq(0)
503
- end
504
-
505
- it 'has a shipping rate that correctly reflects the shipment' do
506
- expect(shipping_rate.display_price).to eq("$16.00")
507
- end
508
- end
509
- end
510
-
511
- context 'an order with a download' do
512
- let(:variant) { download }
513
-
514
- it 'should sell at the net price' do
515
- expect(line_item.price).to eq(8.40)
516
- end
517
-
518
- it 'has no tax adjustments' do
519
- expect(line_item.adjustments.tax.count).to eq(0)
520
- end
521
-
522
- it 'has no included tax' do
523
- expect(line_item.included_tax_total).to eq(0)
524
- end
525
-
526
- it 'has no additional tax' do
527
- expect(line_item.additional_tax_total).to eq(0)
528
- end
529
-
530
- it 'has a constant amount pre tax' do
531
- expect(line_item.total_before_tax - line_item.included_tax_total).to eq(8.40)
532
- end
533
- end
534
-
535
- context 'an order with a download and a shipment' do
536
- let(:variant) { download }
537
-
538
- before { 2.times { order.next! } }
539
-
540
- it 'it has a shipment costing 2.00' do
541
- expect(shipment.amount).to eq(2.00)
542
- end
543
-
544
- it 'has a shipment with no included tax' do
545
- expect(shipment.included_tax_total).to eq(0)
546
- end
547
-
548
- it 'has a shipping rate that correctly reflects the shipment' do
549
- expect(shipping_rate.display_price).to eq("$2.00")
550
- end
551
- end
552
- end
553
- end
554
-
555
- # Choosing New York here because in the US, states matter
556
- context 'selling from new york' do
557
- let(:new_york) { create(:state, state_code: "NY") }
558
- let(:united_states) { new_york.country }
559
- let(:new_york_zone) { create(:zone, states: [new_york]) }
560
- let(:united_states_zone) { create(:zone, countries: [united_states]) }
561
- # Creating two rates for books here to
562
- # mimick the existing specs
563
- let!(:new_york_books_tax) do
564
- create(
565
- :tax_rate,
566
- name: "New York Sales Tax",
567
- tax_categories: [books_category],
568
- zone: new_york_zone,
569
- included_in_price: false,
570
- amount: 0.05
571
- )
572
- end
573
-
574
- let!(:federal_books_tax) do
575
- create(
576
- :tax_rate,
577
- name: "Federal Sales Tax",
578
- tax_categories: [books_category],
579
- zone: united_states_zone,
580
- included_in_price: false,
581
- amount: 0.10
582
- )
583
- end
584
-
585
- let!(:federal_digital_tax) do
586
- create(
587
- :tax_rate,
588
- name: "Federal Sales Tax",
589
- tax_categories: [digital_category],
590
- zone: united_states_zone,
591
- included_in_price: false,
592
- amount: 0.20
593
- )
594
- end
595
-
596
- let!(:book_shipping_method) do
597
- create :shipping_method,
598
- cost: 8.00,
599
- shipping_categories: [books_shipping_category],
600
- tax_category: books_category,
601
- zones: [united_states_zone]
602
- end
603
-
604
- let!(:sweater_shipping_method) do
605
- create :shipping_method,
606
- cost: 16.00,
607
- shipping_categories: [normal_shipping_category],
608
- tax_category: normal_category,
609
- zones: [united_states_zone]
610
- end
611
-
612
- let!(:premium_download_shipping_method) do
613
- create :shipping_method,
614
- cost: 2.00,
615
- shipping_categories: [digital_shipping_category],
616
- tax_category: digital_category,
617
- zones: [united_states_zone]
618
- end
619
-
620
- before do
621
- order.contents.add(variant)
622
- end
623
-
624
- context 'to new york' do
625
- let(:shipping_address) { create :address, state_code: "NY" }
626
-
627
- # A fictional case for an item with two applicable rates
628
- context 'an order with a book' do
629
- let(:variant) { book }
630
-
631
- it 'still has the original price' do
632
- expect(line_item.price).to eq(20)
633
- end
634
-
635
- it 'sells for the line items amount plus additional tax' do
636
- expect(line_item.total).to eq(23)
637
- end
638
-
639
- it 'has two tax adjustments' do
640
- expect(line_item.adjustments.tax.count).to eq(2)
641
- end
642
-
643
- it 'has no included tax' do
644
- expect(line_item.included_tax_total).to eq(0)
645
- end
646
-
647
- it 'has 15% additional tax' do
648
- expect(line_item.additional_tax_total).to eq(3)
649
- end
650
-
651
- it "should delete adjustments for open order when taxrate is soft-deleted" do
652
- new_york_books_tax.discard
653
- federal_books_tax.discard
654
- expect(line_item.adjustments.count).to eq(0)
655
- end
656
-
657
- it "should not delete adjustments for complete order when taxrate is soft-deleted" do
658
- order.update_column :completed_at, Time.now
659
- new_york_books_tax.discard
660
- federal_books_tax.discard
661
- expect(line_item.adjustments.count).to eq(2)
662
- end
663
-
664
- context 'when tax address is later cleared' do
665
- before do
666
- order.ship_address = nil
667
- order.recalculate
668
- end
669
-
670
- it 'removes all tax adjustments' do
671
- aggregate_failures do
672
- expect(line_item.adjustments.tax.count).to eq(0)
673
- expect(line_item).to have_attributes(
674
- price: 20,
675
- total: 20,
676
- included_tax_total: 0,
677
- additional_tax_total: 0
678
- )
679
- end
680
- end
681
- end
682
- end
683
-
684
- context 'an order with a book and a shipment' do
685
- let(:variant) { book }
686
-
687
- before { 2.times { order.next! } }
688
-
689
- it 'it has a shipment with a price of 8.00' do
690
- expect(shipment.amount).to eq(8.00)
691
- end
692
-
693
- it 'has a shipment with no included tax' do
694
- expect(shipment.included_tax_total).to eq(0)
695
- end
696
-
697
- it 'has a shipment with additional tax of 1.20' do
698
- expect(shipment.additional_tax_total).to eq(1.20)
699
- end
700
-
701
- it 'has a shipping rate that correctly reflects the shipment' do
702
- expect(shipping_rate.display_price).to include("$8.00")
703
- expect(shipping_rate.display_price).to include("+ $0.80 Federal Sales Tax")
704
- expect(shipping_rate.display_price).to include("+ $0.40 New York Sales Tax")
705
- end
706
- end
707
-
708
- # This is a fictional case for when no taxes apply at all.
709
- context 'an order with a sweater' do
710
- let(:variant) { sweater }
711
-
712
- it 'still has the original price' do
713
- expect(line_item.price).to eq(30)
714
- end
715
-
716
- it 'sells for the line items amount plus additional tax' do
717
- expect(line_item.total).to eq(30)
718
- end
719
-
720
- it 'has no tax adjustments' do
721
- expect(line_item.adjustments.tax.count).to eq(0)
722
- end
723
-
724
- it 'has no included tax' do
725
- expect(line_item.included_tax_total).to eq(0)
726
- end
727
-
728
- it 'has no additional tax' do
729
- expect(line_item.additional_tax_total).to eq(0)
730
- end
731
- end
732
-
733
- context 'an order with a sweater and a shipment' do
734
- let(:variant) { sweater }
735
-
736
- before { 2.times { order.next! } }
737
-
738
- it 'it has a shipment with a price of 16.00' do
739
- expect(shipment.amount).to eq(16.00)
740
- end
741
-
742
- it 'has a shipment with no included tax' do
743
- expect(shipment.included_tax_total).to eq(0)
744
- end
745
-
746
- it 'has a shipment with no additional tax' do
747
- expect(shipment.additional_tax_total).to eq(0)
748
- end
749
-
750
- it 'has a shipping rate that correctly reflects the shipment' do
751
- expect(shipping_rate.display_price).to eq("$16.00")
752
- end
753
- end
754
-
755
- # A fictional case with one applicable rate
756
- context 'an order with a download' do
757
- let(:variant) { download }
758
-
759
- it 'still has the original price' do
760
- expect(line_item.price).to eq(10)
761
- end
762
-
763
- it 'sells for the line items amount plus additional tax' do
764
- expect(line_item.total).to eq(12)
765
- end
766
-
767
- it 'has one tax adjustments' do
768
- expect(line_item.adjustments.tax.count).to eq(1)
769
- end
770
-
771
- it 'has no included tax' do
772
- expect(line_item.included_tax_total).to eq(0)
773
- end
774
-
775
- it 'has 15% additional tax' do
776
- expect(line_item.additional_tax_total).to eq(2)
777
- end
778
- end
779
-
780
- context 'an order with a download and a shipment' do
781
- let(:variant) { download }
782
-
783
- before { 2.times { order.next! } }
784
-
785
- it 'it has a shipment with a price of 2.00' do
786
- expect(shipment.amount).to eq(2.00)
787
- end
788
-
789
- it 'has a shipment with no included tax' do
790
- expect(shipment.included_tax_total).to eq(0)
791
- end
792
-
793
- it 'has a shipment with additional tax of 0.40' do
794
- expect(shipment.additional_tax_total).to eq(0.40)
795
- end
796
-
797
- it 'has a shipping rate that correctly reflects the shipment' do
798
- expect(shipping_rate.display_price).to eq("$2.00 (+ $0.40 Federal Sales Tax)")
799
- end
800
- end
801
- end
802
-
803
- context 'when no tax zone is given' do
804
- let(:shipping_address) { nil }
805
-
806
- context 'and we buy a book' do
807
- let(:variant) { book }
808
-
809
- it 'does not create adjustments' do
810
- expect(line_item.adjustments.count).to eq(0)
811
- end
812
- end
813
- end
814
- end
815
- end