solidus_core_devise_token_auth 2.8.0.alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/LICENSE +26 -0
  4. data/README.md +69 -0
  5. data/Rakefile +37 -0
  6. data/app/assets/config/solidus_core_manifest.js +1 -0
  7. data/app/assets/images/logo/solidus_logo.png +0 -0
  8. data/app/assets/images/noimage/large.png +0 -0
  9. data/app/assets/images/noimage/mini.png +0 -0
  10. data/app/assets/images/noimage/product.png +0 -0
  11. data/app/assets/images/noimage/small.png +0 -0
  12. data/app/assets/javascripts/spree.js.erb +72 -0
  13. data/app/controllers/spree/base_controller.rb +15 -0
  14. data/app/helpers/spree/base_helper.rb +160 -0
  15. data/app/helpers/spree/checkout_helper.rb +33 -0
  16. data/app/helpers/spree/products_helper.rb +74 -0
  17. data/app/helpers/spree/store_helper.rb +23 -0
  18. data/app/helpers/spree/taxons_helper.rb +22 -0
  19. data/app/jobs/spree/promotion_code_batch_job.rb +26 -0
  20. data/app/mailers/spree/base_mailer.rb +18 -0
  21. data/app/mailers/spree/carton_mailer.rb +29 -0
  22. data/app/mailers/spree/order_mailer.rb +36 -0
  23. data/app/mailers/spree/promotion_code_batch_mailer.rb +15 -0
  24. data/app/mailers/spree/reimbursement_mailer.rb +13 -0
  25. data/app/mailers/spree/test_mailer.rb +11 -0
  26. data/app/models/concerns/spree/adjustment_source.rb +27 -0
  27. data/app/models/concerns/spree/calculated_adjustments.rb +40 -0
  28. data/app/models/concerns/spree/default_price.rb +27 -0
  29. data/app/models/concerns/spree/display_money.rb +34 -0
  30. data/app/models/concerns/spree/named_type.rb +14 -0
  31. data/app/models/concerns/spree/ordered_property_value_list.rb +28 -0
  32. data/app/models/concerns/spree/ransackable_attributes.rb +22 -0
  33. data/app/models/concerns/spree/user_address_book.rb +149 -0
  34. data/app/models/concerns/spree/user_methods.rb +77 -0
  35. data/app/models/concerns/spree/user_payment_source.rb +26 -0
  36. data/app/models/concerns/spree/user_reporting.rb +24 -0
  37. data/app/models/spree/ability.rb +64 -0
  38. data/app/models/spree/address.rb +222 -0
  39. data/app/models/spree/adjustment.rb +168 -0
  40. data/app/models/spree/adjustment_reason.rb +12 -0
  41. data/app/models/spree/asset.rb +8 -0
  42. data/app/models/spree/base.rb +46 -0
  43. data/app/models/spree/billing_integration.rb +23 -0
  44. data/app/models/spree/calculator/default_tax.rb +60 -0
  45. data/app/models/spree/calculator/distributed_amount.rb +33 -0
  46. data/app/models/spree/calculator/flat_percent_item_total.rb +20 -0
  47. data/app/models/spree/calculator/flat_rate.rb +18 -0
  48. data/app/models/spree/calculator/flexi_rate.rb +27 -0
  49. data/app/models/spree/calculator/free_shipping.rb +21 -0
  50. data/app/models/spree/calculator/percent_on_line_item.rb +13 -0
  51. data/app/models/spree/calculator/percent_per_item.rb +49 -0
  52. data/app/models/spree/calculator/price_sack.rb +27 -0
  53. data/app/models/spree/calculator/returns/default_refund_amount.rb +34 -0
  54. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +21 -0
  55. data/app/models/spree/calculator/shipping/flat_rate.rb +17 -0
  56. data/app/models/spree/calculator/shipping/flexi_rate.rb +34 -0
  57. data/app/models/spree/calculator/shipping/per_item.rb +21 -0
  58. data/app/models/spree/calculator/shipping/price_sack.rb +27 -0
  59. data/app/models/spree/calculator/tiered_flat_rate.rb +52 -0
  60. data/app/models/spree/calculator/tiered_percent.rb +61 -0
  61. data/app/models/spree/calculator.rb +49 -0
  62. data/app/models/spree/carton.rb +59 -0
  63. data/app/models/spree/classification.rb +13 -0
  64. data/app/models/spree/country.rb +28 -0
  65. data/app/models/spree/credit_card.rb +197 -0
  66. data/app/models/spree/customer_return.rb +78 -0
  67. data/app/models/spree/distributed_amounts_handler.rb +43 -0
  68. data/app/models/spree/exchange.rb +45 -0
  69. data/app/models/spree/fulfilment_changer.rb +135 -0
  70. data/app/models/spree/gallery/product_gallery.rb +18 -0
  71. data/app/models/spree/gallery/variant_gallery.rb +18 -0
  72. data/app/models/spree/gateway/bogus.rb +13 -0
  73. data/app/models/spree/gateway/bogus_simple.rb +13 -0
  74. data/app/models/spree/gateway.rb +14 -0
  75. data/app/models/spree/image.rb +56 -0
  76. data/app/models/spree/inventory_unit.rb +159 -0
  77. data/app/models/spree/legacy_user.rb +26 -0
  78. data/app/models/spree/line_item.rb +206 -0
  79. data/app/models/spree/line_item_action.rb +8 -0
  80. data/app/models/spree/log_entry.rb +11 -0
  81. data/app/models/spree/option_type.rb +32 -0
  82. data/app/models/spree/option_value.rb +33 -0
  83. data/app/models/spree/option_values_variant.rb +8 -0
  84. data/app/models/spree/order/checkout.rb +243 -0
  85. data/app/models/spree/order/number_generator.rb +45 -0
  86. data/app/models/spree/order/payments.rb +55 -0
  87. data/app/models/spree/order.rb +914 -0
  88. data/app/models/spree/order_cancellations.rb +125 -0
  89. data/app/models/spree/order_capturing.rb +50 -0
  90. data/app/models/spree/order_contents.rb +126 -0
  91. data/app/models/spree/order_inventory.rb +115 -0
  92. data/app/models/spree/order_merger.rb +143 -0
  93. data/app/models/spree/order_mutex.rb +35 -0
  94. data/app/models/spree/order_promotion.rb +27 -0
  95. data/app/models/spree/order_shipping.rb +89 -0
  96. data/app/models/spree/order_taxation.rb +81 -0
  97. data/app/models/spree/order_update_attributes.rb +41 -0
  98. data/app/models/spree/order_updater.rb +271 -0
  99. data/app/models/spree/payment/cancellation.rb +62 -0
  100. data/app/models/spree/payment/processing.rb +225 -0
  101. data/app/models/spree/payment.rb +284 -0
  102. data/app/models/spree/payment_capture_event.rb +11 -0
  103. data/app/models/spree/payment_create.rb +93 -0
  104. data/app/models/spree/payment_method/bogus_credit_card.rb +90 -0
  105. data/app/models/spree/payment_method/check.rb +40 -0
  106. data/app/models/spree/payment_method/credit_card.rb +43 -0
  107. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +26 -0
  108. data/app/models/spree/payment_method/store_credit.rb +122 -0
  109. data/app/models/spree/payment_method.rb +281 -0
  110. data/app/models/spree/payment_source.rb +47 -0
  111. data/app/models/spree/preference.rb +7 -0
  112. data/app/models/spree/price.rb +89 -0
  113. data/app/models/spree/product/scopes.rb +259 -0
  114. data/app/models/spree/product.rb +400 -0
  115. data/app/models/spree/product_option_type.rb +9 -0
  116. data/app/models/spree/product_promotion_rule.rb +8 -0
  117. data/app/models/spree/product_property.rb +14 -0
  118. data/app/models/spree/promotion/actions/create_adjustment.rb +80 -0
  119. data/app/models/spree/promotion/actions/create_item_adjustments.rb +102 -0
  120. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +142 -0
  121. data/app/models/spree/promotion/actions/free_shipping.rb +57 -0
  122. data/app/models/spree/promotion/rules/first_order.rb +40 -0
  123. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +36 -0
  124. data/app/models/spree/promotion/rules/item_total.rb +45 -0
  125. data/app/models/spree/promotion/rules/nth_order.rb +45 -0
  126. data/app/models/spree/promotion/rules/one_use_per_user.rb +25 -0
  127. data/app/models/spree/promotion/rules/option_value.rb +50 -0
  128. data/app/models/spree/promotion/rules/product.rb +74 -0
  129. data/app/models/spree/promotion/rules/store.rb +22 -0
  130. data/app/models/spree/promotion/rules/taxon.rb +103 -0
  131. data/app/models/spree/promotion/rules/user.rb +30 -0
  132. data/app/models/spree/promotion/rules/user_logged_in.rb +20 -0
  133. data/app/models/spree/promotion/rules/user_role.rb +45 -0
  134. data/app/models/spree/promotion.rb +260 -0
  135. data/app/models/spree/promotion_action.rb +53 -0
  136. data/app/models/spree/promotion_category.rb +8 -0
  137. data/app/models/spree/promotion_chooser.rb +34 -0
  138. data/app/models/spree/promotion_code/batch_builder.rb +78 -0
  139. data/app/models/spree/promotion_code.rb +44 -0
  140. data/app/models/spree/promotion_code_batch.rb +27 -0
  141. data/app/models/spree/promotion_handler/cart.rb +55 -0
  142. data/app/models/spree/promotion_handler/coupon.rb +92 -0
  143. data/app/models/spree/promotion_handler/free_shipping.rb +9 -0
  144. data/app/models/spree/promotion_handler/page.rb +26 -0
  145. data/app/models/spree/promotion_handler/shipping.rb +61 -0
  146. data/app/models/spree/promotion_rule.rb +51 -0
  147. data/app/models/spree/promotion_rule_role.rb +8 -0
  148. data/app/models/spree/promotion_rule_store.rb +10 -0
  149. data/app/models/spree/promotion_rule_taxon.rb +8 -0
  150. data/app/models/spree/promotion_rule_user.rb +10 -0
  151. data/app/models/spree/property.rb +20 -0
  152. data/app/models/spree/refund.rb +90 -0
  153. data/app/models/spree/refund_reason.rb +15 -0
  154. data/app/models/spree/reimbursement/credit.rb +29 -0
  155. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
  156. data/app/models/spree/reimbursement/reimbursement_type_validator.rb +17 -0
  157. data/app/models/spree/reimbursement.rb +186 -0
  158. data/app/models/spree/reimbursement_performer.rb +40 -0
  159. data/app/models/spree/reimbursement_tax_calculator.rb +35 -0
  160. data/app/models/spree/reimbursement_type/credit.rb +15 -0
  161. data/app/models/spree/reimbursement_type/exchange.rb +11 -0
  162. data/app/models/spree/reimbursement_type/original_payment.rb +15 -0
  163. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +72 -0
  164. data/app/models/spree/reimbursement_type/store_credit.rb +29 -0
  165. data/app/models/spree/reimbursement_type.rb +18 -0
  166. data/app/models/spree/return_authorization.rb +90 -0
  167. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +30 -0
  168. data/app/models/spree/return_item/eligibility_validator/default.rb +36 -0
  169. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +22 -0
  170. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +22 -0
  171. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +22 -0
  172. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +22 -0
  173. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +22 -0
  174. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +47 -0
  175. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +13 -0
  176. data/app/models/spree/return_item.rb +320 -0
  177. data/app/models/spree/return_reason.rb +14 -0
  178. data/app/models/spree/returns_calculator.rb +9 -0
  179. data/app/models/spree/role.rb +14 -0
  180. data/app/models/spree/role_user.rb +11 -0
  181. data/app/models/spree/shipment.rb +431 -0
  182. data/app/models/spree/shipping_calculator.rb +23 -0
  183. data/app/models/spree/shipping_category.rb +10 -0
  184. data/app/models/spree/shipping_manifest.rb +30 -0
  185. data/app/models/spree/shipping_method.rb +133 -0
  186. data/app/models/spree/shipping_method_category.rb +8 -0
  187. data/app/models/spree/shipping_method_stock_location.rb +6 -0
  188. data/app/models/spree/shipping_method_zone.rb +8 -0
  189. data/app/models/spree/shipping_rate.rb +48 -0
  190. data/app/models/spree/shipping_rate_tax.rb +39 -0
  191. data/app/models/spree/state.rb +40 -0
  192. data/app/models/spree/state_change.rb +17 -0
  193. data/app/models/spree/stock/availability.rb +72 -0
  194. data/app/models/spree/stock/availability_validator.rb +36 -0
  195. data/app/models/spree/stock/content_item.rb +50 -0
  196. data/app/models/spree/stock/differentiator.rb +47 -0
  197. data/app/models/spree/stock/estimator.rb +71 -0
  198. data/app/models/spree/stock/inventory_unit_builder.rb +23 -0
  199. data/app/models/spree/stock/inventory_validator.rb +16 -0
  200. data/app/models/spree/stock/location_sorter/base.rb +38 -0
  201. data/app/models/spree/stock/location_sorter/default_first.rb +15 -0
  202. data/app/models/spree/stock/location_sorter/unsorted.rb +14 -0
  203. data/app/models/spree/stock/package.rb +142 -0
  204. data/app/models/spree/stock/quantifier.rb +49 -0
  205. data/app/models/spree/stock/shipping_rate_selector.rb +17 -0
  206. data/app/models/spree/stock/shipping_rate_sorter.rb +17 -0
  207. data/app/models/spree/stock/simple_coordinator.rb +119 -0
  208. data/app/models/spree/stock/splitter/backordered.rb +23 -0
  209. data/app/models/spree/stock/splitter/base.rb +35 -0
  210. data/app/models/spree/stock/splitter/shipping_category.rb +35 -0
  211. data/app/models/spree/stock/splitter/weight.rb +32 -0
  212. data/app/models/spree/stock/splitter_chain.rb +34 -0
  213. data/app/models/spree/stock_item.rb +128 -0
  214. data/app/models/spree/stock_location.rb +127 -0
  215. data/app/models/spree/stock_movement.rb +28 -0
  216. data/app/models/spree/stock_quantities.rb +83 -0
  217. data/app/models/spree/store.rb +83 -0
  218. data/app/models/spree/store_credit.rb +293 -0
  219. data/app/models/spree/store_credit_category.rb +18 -0
  220. data/app/models/spree/store_credit_event.rb +66 -0
  221. data/app/models/spree/store_credit_type.rb +10 -0
  222. data/app/models/spree/store_credit_update_reason.rb +4 -0
  223. data/app/models/spree/store_payment_method.rb +8 -0
  224. data/app/models/spree/store_selector/by_server_name.rb +32 -0
  225. data/app/models/spree/store_selector/legacy.rb +50 -0
  226. data/app/models/spree/store_shipping_method.rb +8 -0
  227. data/app/models/spree/tax/item_tax.rb +22 -0
  228. data/app/models/spree/tax/order_adjuster.rb +22 -0
  229. data/app/models/spree/tax/order_tax.rb +20 -0
  230. data/app/models/spree/tax/shipping_rate_taxer.rb +24 -0
  231. data/app/models/spree/tax/tax_helpers.rb +17 -0
  232. data/app/models/spree/tax/tax_location.rb +39 -0
  233. data/app/models/spree/tax_calculator/default.rb +85 -0
  234. data/app/models/spree/tax_calculator/shipping_rate.rb +58 -0
  235. data/app/models/spree/tax_category.rb +30 -0
  236. data/app/models/spree/tax_rate.rb +147 -0
  237. data/app/models/spree/tax_rate_tax_category.rb +8 -0
  238. data/app/models/spree/taxon.rb +144 -0
  239. data/app/models/spree/taxonomy.rb +29 -0
  240. data/app/models/spree/unit_cancel.rb +36 -0
  241. data/app/models/spree/user_address.rb +23 -0
  242. data/app/models/spree/user_class_handle.rb +28 -0
  243. data/app/models/spree/user_stock_location.rb +8 -0
  244. data/app/models/spree/validations/db_maximum_length_validator.rb +23 -0
  245. data/app/models/spree/variant/price_selector.rb +37 -0
  246. data/app/models/spree/variant/pricing_options.rb +98 -0
  247. data/app/models/spree/variant/scopes.rb +42 -0
  248. data/app/models/spree/variant/vat_price_generator.rb +63 -0
  249. data/app/models/spree/variant.rb +465 -0
  250. data/app/models/spree/variant_property_rule.rb +44 -0
  251. data/app/models/spree/variant_property_rule_condition.rb +10 -0
  252. data/app/models/spree/variant_property_rule_value.rb +12 -0
  253. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +40 -0
  254. data/app/models/spree/wallet/default_payment_builder.rb +28 -0
  255. data/app/models/spree/wallet.rb +78 -0
  256. data/app/models/spree/wallet_payment_source.rb +19 -0
  257. data/app/models/spree/zone.rb +148 -0
  258. data/app/models/spree/zone_member.rb +10 -0
  259. data/app/views/layouts/spree/base_mailer.html.erb +784 -0
  260. data/app/views/spree/carton_mailer/shipped_email.html.erb +34 -0
  261. data/app/views/spree/carton_mailer/shipped_email.text.erb +16 -0
  262. data/app/views/spree/order_mailer/cancel_email.html.erb +45 -0
  263. data/app/views/spree/order_mailer/cancel_email.text.erb +16 -0
  264. data/app/views/spree/order_mailer/confirm_email.html.erb +84 -0
  265. data/app/views/spree/order_mailer/confirm_email.text.erb +38 -0
  266. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +26 -0
  267. data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +10 -0
  268. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +2 -0
  269. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +2 -0
  270. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +39 -0
  271. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +17 -0
  272. data/app/views/spree/shared/_base_mailer_footer.html.erb +1 -0
  273. data/app/views/spree/shared/_base_mailer_header.html.erb +1 -0
  274. data/app/views/spree/shared/_error_messages.html.erb +11 -0
  275. data/app/views/spree/test_mailer/test_email.html.erb +40 -0
  276. data/app/views/spree/test_mailer/test_email.text.erb +4 -0
  277. data/config/initializers/assets.rb +5 -0
  278. data/config/initializers/friendly_id.rb +90 -0
  279. data/config/locales/en.yml +2107 -0
  280. data/db/default/spree/countries.rb +45 -0
  281. data/db/default/spree/refund_reasons.rb +3 -0
  282. data/db/default/spree/return_reasons.rb +11 -0
  283. data/db/default/spree/roles.rb +3 -0
  284. data/db/default/spree/shipping_categories.rb +3 -0
  285. data/db/default/spree/states.rb +14 -0
  286. data/db/default/spree/stock_locations.rb +4 -0
  287. data/db/default/spree/store_credit.rb +22 -0
  288. data/db/default/spree/stores.rb +10 -0
  289. data/db/default/spree/zones.rb +13 -0
  290. data/db/migrate/20160101010000_solidus_one_four.rb +1102 -0
  291. data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +27 -0
  292. data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +29 -0
  293. data/db/migrate/20160924135758_remove_is_default_from_prices.rb +7 -0
  294. data/db/migrate/20161009141333_remove_currency_from_line_items.rb +7 -0
  295. data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +30 -0
  296. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +38 -0
  297. data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +22 -0
  298. data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +7 -0
  299. data/db/migrate/20170223235001_remove_spree_store_credits_column.rb +7 -0
  300. data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +8 -0
  301. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +30 -0
  302. data/db/migrate/20170412103617_transform_tax_rate_category_relation.rb +50 -0
  303. data/db/migrate/20170422134804_add_roles_unique_constraints.rb +8 -0
  304. data/db/migrate/20170522143442_add_time_range_to_tax_rate.rb +8 -0
  305. data/db/migrate/20170608074534_rename_bogus_gateways.rb +17 -0
  306. data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +7 -0
  307. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +12 -0
  308. data/db/migrate/20180202222641_create_store_shipping_methods.rb +12 -0
  309. data/db/migrate/20180313220213_add_available_locales_to_stores.rb +9 -0
  310. data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +61 -0
  311. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +11 -0
  312. data/db/seeds.rb +17 -0
  313. data/lib/generators/spree/custom_user/custom_user_generator.rb +43 -0
  314. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +40 -0
  315. data/lib/generators/spree/custom_user/templates/migration.rb.tt +30 -0
  316. data/lib/generators/spree/dummy/dummy_generator.rb +148 -0
  317. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +10 -0
  318. data/lib/generators/spree/dummy/templates/rails/boot.rb +6 -0
  319. data/lib/generators/spree/dummy/templates/rails/database.yml +71 -0
  320. data/lib/generators/spree/dummy/templates/rails/routes.rb +2 -0
  321. data/lib/generators/spree/dummy/templates/rails/script/rails +6 -0
  322. data/lib/generators/spree/dummy/templates/rails/test.rb +33 -0
  323. data/lib/generators/spree/install/install_generator.rb +189 -0
  324. data/lib/generators/spree/install/templates/config/initializers/spree.rb.tt +67 -0
  325. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +10 -0
  326. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +10 -0
  327. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +9 -0
  328. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +9 -0
  329. data/lib/solidus/migrations/rename_gateways.rb +39 -0
  330. data/lib/solidus_core.rb +3 -0
  331. data/lib/spree/app_configuration.rb +529 -0
  332. data/lib/spree/config.rb +5 -0
  333. data/lib/spree/core/active_merchant_dependencies.rb +13 -0
  334. data/lib/spree/core/class_constantizer.rb +33 -0
  335. data/lib/spree/core/controller_helpers/auth.rb +83 -0
  336. data/lib/spree/core/controller_helpers/common.rb +82 -0
  337. data/lib/spree/core/controller_helpers/order.rb +107 -0
  338. data/lib/spree/core/controller_helpers/payment_parameters.rb +221 -0
  339. data/lib/spree/core/controller_helpers/pricing.rb +30 -0
  340. data/lib/spree/core/controller_helpers/search.rb +16 -0
  341. data/lib/spree/core/controller_helpers/store.rb +19 -0
  342. data/lib/spree/core/controller_helpers/strong_parameters.rb +63 -0
  343. data/lib/spree/core/current_store.rb +24 -0
  344. data/lib/spree/core/engine.rb +61 -0
  345. data/lib/spree/core/environment/calculators.rb +18 -0
  346. data/lib/spree/core/environment.rb +22 -0
  347. data/lib/spree/core/environment_extension.rb +31 -0
  348. data/lib/spree/core/importer/order.rb +203 -0
  349. data/lib/spree/core/importer/product.rb +65 -0
  350. data/lib/spree/core/importer.rb +11 -0
  351. data/lib/spree/core/permalinks.rb +67 -0
  352. data/lib/spree/core/product_duplicator.rb +75 -0
  353. data/lib/spree/core/product_filters.rb +197 -0
  354. data/lib/spree/core/role_configuration.rb +88 -0
  355. data/lib/spree/core/search/base.rb +120 -0
  356. data/lib/spree/core/search/variant.rb +66 -0
  357. data/lib/spree/core/stock_configuration.rb +26 -0
  358. data/lib/spree/core/validators/email.rb +30 -0
  359. data/lib/spree/core/version.rb +11 -0
  360. data/lib/spree/core.rb +92 -0
  361. data/lib/spree/deprecation.rb +7 -0
  362. data/lib/spree/i18n.rb +35 -0
  363. data/lib/spree/localized_number.rb +30 -0
  364. data/lib/spree/mailer_previews/carton_preview.rb +13 -0
  365. data/lib/spree/mailer_previews/order_preview.rb +25 -0
  366. data/lib/spree/mailer_previews/reimbursement_preview.rb +13 -0
  367. data/lib/spree/migration_helpers.rb +21 -0
  368. data/lib/spree/migrations.rb +85 -0
  369. data/lib/spree/money.rb +133 -0
  370. data/lib/spree/paranoia_deprecations.rb +21 -0
  371. data/lib/spree/permission_sets/base.rb +32 -0
  372. data/lib/spree/permission_sets/configuration_display.rb +25 -0
  373. data/lib/spree/permission_sets/configuration_management.rb +25 -0
  374. data/lib/spree/permission_sets/dashboard_display.rb +11 -0
  375. data/lib/spree/permission_sets/default_customer.rb +37 -0
  376. data/lib/spree/permission_sets/order_display.rb +21 -0
  377. data/lib/spree/permission_sets/order_management.rb +22 -0
  378. data/lib/spree/permission_sets/product_display.rb +19 -0
  379. data/lib/spree/permission_sets/product_management.rb +21 -0
  380. data/lib/spree/permission_sets/promotion_display.rb +15 -0
  381. data/lib/spree/permission_sets/promotion_management.rb +14 -0
  382. data/lib/spree/permission_sets/restricted_stock_display.rb +18 -0
  383. data/lib/spree/permission_sets/restricted_stock_management.rb +18 -0
  384. data/lib/spree/permission_sets/stock_display.rb +12 -0
  385. data/lib/spree/permission_sets/stock_management.rb +12 -0
  386. data/lib/spree/permission_sets/super_user.rb +11 -0
  387. data/lib/spree/permission_sets/user_display.rb +13 -0
  388. data/lib/spree/permission_sets/user_management.rb +21 -0
  389. data/lib/spree/permission_sets.rb +20 -0
  390. data/lib/spree/permitted_attributes.rb +133 -0
  391. data/lib/spree/preferences/configuration.rb +107 -0
  392. data/lib/spree/preferences/preferable.rb +180 -0
  393. data/lib/spree/preferences/preferable_class_methods.rb +88 -0
  394. data/lib/spree/preferences/scoped_store.rb +36 -0
  395. data/lib/spree/preferences/static_model_preferences.rb +49 -0
  396. data/lib/spree/preferences/statically_configurable.rb +39 -0
  397. data/lib/spree/preferences/store.rb +91 -0
  398. data/lib/spree/promo/environment.rb +13 -0
  399. data/lib/spree/testing_support/ability_helpers.rb +107 -0
  400. data/lib/spree/testing_support/authorization_helpers.rb +69 -0
  401. data/lib/spree/testing_support/bar_ability.rb +19 -0
  402. data/lib/spree/testing_support/caching.rb +33 -0
  403. data/lib/spree/testing_support/capybara_ext.rb +147 -0
  404. data/lib/spree/testing_support/common_rake.rb +38 -0
  405. data/lib/spree/testing_support/controller_requests.rb +108 -0
  406. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
  407. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
  408. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
  409. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
  410. data/lib/spree/testing_support/dummy_app/database.yml +33 -0
  411. data/lib/spree/testing_support/dummy_app/migrations.rb +47 -0
  412. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +67 -0
  413. data/lib/spree/testing_support/dummy_app/routes.rb +5 -0
  414. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
  415. data/lib/spree/testing_support/dummy_app.rb +120 -0
  416. data/lib/spree/testing_support/extension_rake.rb +11 -0
  417. data/lib/spree/testing_support/factories/address_factory.rb +45 -0
  418. data/lib/spree/testing_support/factories/adjustment_factory.rb +45 -0
  419. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +8 -0
  420. data/lib/spree/testing_support/factories/calculator_factory.rb +26 -0
  421. data/lib/spree/testing_support/factories/carton_factory.rb +26 -0
  422. data/lib/spree/testing_support/factories/country_factory.rb +21 -0
  423. data/lib/spree/testing_support/factories/credit_card_factory.rb +17 -0
  424. data/lib/spree/testing_support/factories/customer_return_factory.rb +35 -0
  425. data/lib/spree/testing_support/factories/image_factory.rb +7 -0
  426. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +26 -0
  427. data/lib/spree/testing_support/factories/line_item_factory.rb +18 -0
  428. data/lib/spree/testing_support/factories/option_type_factory.rb +8 -0
  429. data/lib/spree/testing_support/factories/option_value_factory.rb +10 -0
  430. data/lib/spree/testing_support/factories/order_factory.rb +160 -0
  431. data/lib/spree/testing_support/factories/order_promotion_factory.rb +11 -0
  432. data/lib/spree/testing_support/factories/payment_factory.rb +51 -0
  433. data/lib/spree/testing_support/factories/payment_method_factory.rb +32 -0
  434. data/lib/spree/testing_support/factories/price_factory.rb +11 -0
  435. data/lib/spree/testing_support/factories/product_factory.rb +50 -0
  436. data/lib/spree/testing_support/factories/product_option_type_factory.rb +11 -0
  437. data/lib/spree/testing_support/factories/product_property_factory.rb +11 -0
  438. data/lib/spree/testing_support/factories/promotion_category_factory.rb +7 -0
  439. data/lib/spree/testing_support/factories/promotion_code_factory.rb +11 -0
  440. data/lib/spree/testing_support/factories/promotion_factory.rb +64 -0
  441. data/lib/spree/testing_support/factories/property_factory.rb +8 -0
  442. data/lib/spree/testing_support/factories/refund_factory.rb +21 -0
  443. data/lib/spree/testing_support/factories/refund_reason_factory.rb +7 -0
  444. data/lib/spree/testing_support/factories/reimbursement_factory.rb +21 -0
  445. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +9 -0
  446. data/lib/spree/testing_support/factories/return_authorization_factory.rb +20 -0
  447. data/lib/spree/testing_support/factories/return_item_factory.rb +23 -0
  448. data/lib/spree/testing_support/factories/return_reason_factory.rb +7 -0
  449. data/lib/spree/testing_support/factories/role_factory.rb +11 -0
  450. data/lib/spree/testing_support/factories/shipment_factory.rb +37 -0
  451. data/lib/spree/testing_support/factories/shipping_category_factory.rb +7 -0
  452. data/lib/spree/testing_support/factories/shipping_method_factory.rb +42 -0
  453. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +11 -0
  454. data/lib/spree/testing_support/factories/state_factory.rb +28 -0
  455. data/lib/spree/testing_support/factories/stock_item_factory.rb +14 -0
  456. data/lib/spree/testing_support/factories/stock_location_factory.rb +41 -0
  457. data/lib/spree/testing_support/factories/stock_movement_factory.rb +15 -0
  458. data/lib/spree/testing_support/factories/stock_package_factory.rb +28 -0
  459. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +7 -0
  460. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +30 -0
  461. data/lib/spree/testing_support/factories/store_credit_factory.rb +16 -0
  462. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +13 -0
  463. data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +7 -0
  464. data/lib/spree/testing_support/factories/store_factory.rb +10 -0
  465. data/lib/spree/testing_support/factories/tax_category_factory.rb +10 -0
  466. data/lib/spree/testing_support/factories/tax_rate_factory.rb +14 -0
  467. data/lib/spree/testing_support/factories/taxon_factory.rb +11 -0
  468. data/lib/spree/testing_support/factories/taxonomy_factory.rb +7 -0
  469. data/lib/spree/testing_support/factories/user_factory.rb +21 -0
  470. data/lib/spree/testing_support/factories/variant_factory.rb +43 -0
  471. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +11 -0
  472. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +22 -0
  473. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +11 -0
  474. data/lib/spree/testing_support/factories/zone_factory.rb +24 -0
  475. data/lib/spree/testing_support/factories.rb +7 -0
  476. data/lib/spree/testing_support/flash.rb +29 -0
  477. data/lib/spree/testing_support/order_walkthrough.rb +87 -0
  478. data/lib/spree/testing_support/preferences.rb +34 -0
  479. data/lib/spree/testing_support/sequences.rb +8 -0
  480. data/lib/spree/testing_support/shared_examples/gallery.rb +18 -0
  481. data/lib/spree/testing_support/url_helpers.rb +11 -0
  482. data/lib/spree_core.rb +3 -0
  483. data/lib/tasks/core.rake +104 -0
  484. data/lib/tasks/email.rake +9 -0
  485. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +115 -0
  486. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +20 -0
  487. data/lib/tasks/migrations/migrate_user_addresses.rake +31 -0
  488. data/lib/tasks/migrations/rename_gateways.rake +21 -0
  489. data/lib/tasks/order_capturing.rake +25 -0
  490. data/script/rails +10 -0
  491. data/solidus_core.gemspec +48 -0
  492. data/spec/fixtures/thinking-cat.jpg +0 -0
  493. data/spec/helpers/base_helper_spec.rb +168 -0
  494. data/spec/helpers/products_helper_spec.rb +200 -0
  495. data/spec/helpers/taxons_helper_spec.rb +41 -0
  496. data/spec/jobs/promotion_code_batch_job_spec.rb +96 -0
  497. data/spec/lib/calculated_adjustments_spec.rb +133 -0
  498. data/spec/lib/i18n_spec.rb +92 -0
  499. data/spec/lib/search/base_spec.rb +87 -0
  500. data/spec/lib/search/variant_spec.rb +115 -0
  501. data/spec/lib/spree/core/class_constantizer_spec.rb +71 -0
  502. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +69 -0
  503. data/spec/lib/spree/core/controller_helpers/order_spec.rb +126 -0
  504. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +195 -0
  505. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +81 -0
  506. data/spec/lib/spree/core/controller_helpers/search_spec.rb +21 -0
  507. data/spec/lib/spree/core/controller_helpers/store_spec.rb +18 -0
  508. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +41 -0
  509. data/spec/lib/spree/core/current_store_spec.rb +33 -0
  510. data/spec/lib/spree/core/environment_extension_spec.rb +36 -0
  511. data/spec/lib/spree/core/importer/order_spec.rb +484 -0
  512. data/spec/lib/spree/core/role_configuration_spec.rb +155 -0
  513. data/spec/lib/spree/core/stock_configuration_spec.rb +59 -0
  514. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +61 -0
  515. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +20 -0
  516. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +14 -0
  517. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +44 -0
  518. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +14 -0
  519. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +14 -0
  520. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +14 -0
  521. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +39 -0
  522. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +14 -0
  523. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +14 -0
  524. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +14 -0
  525. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +14 -0
  526. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +14 -0
  527. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +376 -0
  528. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +14 -0
  529. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +40 -0
  530. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +32 -0
  531. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +14 -0
  532. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +32 -0
  533. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +14 -0
  534. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +14 -0
  535. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +14 -0
  536. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +14 -0
  537. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +32 -0
  538. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +14 -0
  539. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +14 -0
  540. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +14 -0
  541. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +20 -0
  542. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +14 -0
  543. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +14 -0
  544. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +20 -0
  545. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +14 -0
  546. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +20 -0
  547. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +14 -0
  548. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +14 -0
  549. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +44 -0
  550. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +14 -0
  551. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +59 -0
  552. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +14 -0
  553. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +35 -0
  554. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +14 -0
  555. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +28 -0
  556. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +14 -0
  557. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +43 -0
  558. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +14 -0
  559. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +20 -0
  560. data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +14 -0
  561. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +14 -0
  562. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +14 -0
  563. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +14 -0
  564. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +14 -0
  565. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +14 -0
  566. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +24 -0
  567. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +56 -0
  568. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +14 -0
  569. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +14 -0
  570. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +14 -0
  571. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +20 -0
  572. data/spec/lib/spree/core/testing_support/preferences_spec.rb +28 -0
  573. data/spec/lib/spree/core/validators/email_spec.rb +53 -0
  574. data/spec/lib/spree/core/version_spec.rb +19 -0
  575. data/spec/lib/spree/localized_number_spec.rb +45 -0
  576. data/spec/lib/spree/migrations_spec.rb +32 -0
  577. data/spec/lib/spree/money_spec.rb +305 -0
  578. data/spec/lib/spree/permission_sets/default_customer_spec.rb +22 -0
  579. data/spec/lib/tasks/dummy_task.rake +12 -0
  580. data/spec/lib/tasks/dummy_task_spec.rb +30 -0
  581. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +19 -0
  582. data/spec/mailers/carton_mailer_spec.rb +44 -0
  583. data/spec/mailers/order_mailer_spec.rb +117 -0
  584. data/spec/mailers/promotion_code_batch_mailer_spec.rb +47 -0
  585. data/spec/mailers/reimbursement_mailer_spec.rb +36 -0
  586. data/spec/mailers/test_mailer_spec.rb +11 -0
  587. data/spec/models/spree/ability_spec.rb +279 -0
  588. data/spec/models/spree/address_spec.rb +375 -0
  589. data/spec/models/spree/adjustment_reason_spec.rb +11 -0
  590. data/spec/models/spree/adjustment_spec.rb +339 -0
  591. data/spec/models/spree/app_configuration_spec.rb +55 -0
  592. data/spec/models/spree/asset_spec.rb +25 -0
  593. data/spec/models/spree/calculator/default_tax_spec.rb +260 -0
  594. data/spec/models/spree/calculator/distributed_amount_spec.rb +82 -0
  595. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +30 -0
  596. data/spec/models/spree/calculator/flat_rate_spec.rb +52 -0
  597. data/spec/models/spree/calculator/flexi_rate_spec.rb +158 -0
  598. data/spec/models/spree/calculator/free_shipping_spec.rb +8 -0
  599. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +20 -0
  600. data/spec/models/spree/calculator/percent_per_item_spec.rb +12 -0
  601. data/spec/models/spree/calculator/price_sack_spec.rb +35 -0
  602. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +70 -0
  603. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +39 -0
  604. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +18 -0
  605. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +56 -0
  606. data/spec/models/spree/calculator/shipping/per_item_spec.rb +25 -0
  607. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +35 -0
  608. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +99 -0
  609. data/spec/models/spree/calculator/tiered_percent_spec.rb +191 -0
  610. data/spec/models/spree/calculator_spec.rb +43 -0
  611. data/spec/models/spree/carton_spec.rb +137 -0
  612. data/spec/models/spree/classification_spec.rb +114 -0
  613. data/spec/models/spree/concerns/display_money_spec.rb +44 -0
  614. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +52 -0
  615. data/spec/models/spree/concerns/user_address_book_spec.rb +358 -0
  616. data/spec/models/spree/concerns/user_methods_spec.rb +121 -0
  617. data/spec/models/spree/country_spec.rb +78 -0
  618. data/spec/models/spree/credit_card_spec.rb +373 -0
  619. data/spec/models/spree/customer_return_spec.rb +293 -0
  620. data/spec/models/spree/distributed_amounts_handler_spec.rb +83 -0
  621. data/spec/models/spree/exchange_spec.rb +76 -0
  622. data/spec/models/spree/fulfilment_changer_spec.rb +307 -0
  623. data/spec/models/spree/gallery/product_gallery_spec.rb +21 -0
  624. data/spec/models/spree/gallery/variant_gallery_spec.rb +21 -0
  625. data/spec/models/spree/gateway/bogus_simple.rb +14 -0
  626. data/spec/models/spree/gateway/bogus_spec.rb +14 -0
  627. data/spec/models/spree/gateway_spec.rb +14 -0
  628. data/spec/models/spree/image_spec.rb +25 -0
  629. data/spec/models/spree/inventory_unit_spec.rb +312 -0
  630. data/spec/models/spree/line_item_spec.rb +240 -0
  631. data/spec/models/spree/option_type_spec.rb +16 -0
  632. data/spec/models/spree/option_value_spec.rb +52 -0
  633. data/spec/models/spree/order/address_spec.rb +52 -0
  634. data/spec/models/spree/order/adjustments_spec.rb +29 -0
  635. data/spec/models/spree/order/callbacks_spec.rb +44 -0
  636. data/spec/models/spree/order/checkout_spec.rb +744 -0
  637. data/spec/models/spree/order/finalizing_spec.rb +111 -0
  638. data/spec/models/spree/order/number_generator_spec.rb +47 -0
  639. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +137 -0
  640. data/spec/models/spree/order/payment_spec.rb +280 -0
  641. data/spec/models/spree/order/risk_assessment_spec.rb +70 -0
  642. data/spec/models/spree/order/state_machine_spec.rb +122 -0
  643. data/spec/models/spree/order/totals_spec.rb +26 -0
  644. data/spec/models/spree/order/updating_spec.rb +18 -0
  645. data/spec/models/spree/order/validations_spec.rb +17 -0
  646. data/spec/models/spree/order_cancellations_spec.rb +192 -0
  647. data/spec/models/spree/order_capturing_spec.rb +16 -0
  648. data/spec/models/spree/order_contents_spec.rb +362 -0
  649. data/spec/models/spree/order_inventory_spec.rb +278 -0
  650. data/spec/models/spree/order_merger_spec.rb +159 -0
  651. data/spec/models/spree/order_mutex_spec.rb +89 -0
  652. data/spec/models/spree/order_promotion_spec.rb +33 -0
  653. data/spec/models/spree/order_shipping_spec.rb +247 -0
  654. data/spec/models/spree/order_spec.rb +1633 -0
  655. data/spec/models/spree/order_taxation_spec.rb +128 -0
  656. data/spec/models/spree/order_update_attributes_spec.rb +49 -0
  657. data/spec/models/spree/order_updater_spec.rb +560 -0
  658. data/spec/models/spree/payment/cancellation_spec.rb +83 -0
  659. data/spec/models/spree/payment_create_spec.rb +205 -0
  660. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +10 -0
  661. data/spec/models/spree/payment_method/check_spec.rb +80 -0
  662. data/spec/models/spree/payment_method/credit_card_spec.rb +68 -0
  663. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +20 -0
  664. data/spec/models/spree/payment_method/store_credit_spec.rb +325 -0
  665. data/spec/models/spree/payment_method_spec.rb +408 -0
  666. data/spec/models/spree/payment_spec.rb +1274 -0
  667. data/spec/models/spree/permission_sets/base_spec.rb +14 -0
  668. data/spec/models/spree/permission_sets/configuration_display.rb +79 -0
  669. data/spec/models/spree/permission_sets/configuration_management_spec.rb +49 -0
  670. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +23 -0
  671. data/spec/models/spree/permission_sets/order_display_spec.rb +56 -0
  672. data/spec/models/spree/permission_sets/order_management_spec.rb +43 -0
  673. data/spec/models/spree/permission_sets/product_display_spec.rb +57 -0
  674. data/spec/models/spree/permission_sets/product_management_spec.rb +39 -0
  675. data/spec/models/spree/permission_sets/promotion_display_spec.rb +41 -0
  676. data/spec/models/spree/permission_sets/promotion_management_spec.rb +27 -0
  677. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +42 -0
  678. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +42 -0
  679. data/spec/models/spree/permission_sets/stock_display_spec.rb +25 -0
  680. data/spec/models/spree/permission_sets/stock_management_spec.rb +23 -0
  681. data/spec/models/spree/permission_sets/user_display_spec.rb +39 -0
  682. data/spec/models/spree/permission_sets/user_management_spec.rb +56 -0
  683. data/spec/models/spree/preference_spec.rb +79 -0
  684. data/spec/models/spree/preferences/configuration_spec.rb +27 -0
  685. data/spec/models/spree/preferences/preferable_spec.rb +334 -0
  686. data/spec/models/spree/preferences/scoped_store_spec.rb +62 -0
  687. data/spec/models/spree/preferences/static_model_preferences_spec.rb +79 -0
  688. data/spec/models/spree/preferences/statically_configurable_spec.rb +67 -0
  689. data/spec/models/spree/preferences/store_spec.rb +40 -0
  690. data/spec/models/spree/price_spec.rb +150 -0
  691. data/spec/models/spree/product/scopes_spec.rb +164 -0
  692. data/spec/models/spree/product_duplicator_spec.rb +92 -0
  693. data/spec/models/spree/product_filter_spec.rb +28 -0
  694. data/spec/models/spree/product_property_spec.rb +20 -0
  695. data/spec/models/spree/product_spec.rb +584 -0
  696. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +126 -0
  697. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +198 -0
  698. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +298 -0
  699. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +61 -0
  700. data/spec/models/spree/promotion/rules/first_order_spec.rb +77 -0
  701. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +71 -0
  702. data/spec/models/spree/promotion/rules/item_total_spec.rb +113 -0
  703. data/spec/models/spree/promotion/rules/nth_order_spec.rb +72 -0
  704. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +44 -0
  705. data/spec/models/spree/promotion/rules/option_value_spec.rb +96 -0
  706. data/spec/models/spree/promotion/rules/product_spec.rb +178 -0
  707. data/spec/models/spree/promotion/rules/store_spec.rb +35 -0
  708. data/spec/models/spree/promotion/rules/taxon_spec.rb +174 -0
  709. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +28 -0
  710. data/spec/models/spree/promotion/rules/user_role_spec.rb +88 -0
  711. data/spec/models/spree/promotion/rules/user_spec.rb +39 -0
  712. data/spec/models/spree/promotion_action_spec.rb +44 -0
  713. data/spec/models/spree/promotion_category_spec.rb +19 -0
  714. data/spec/models/spree/promotion_code/batch_builder_spec.rb +107 -0
  715. data/spec/models/spree/promotion_code_batch_spec.rb +54 -0
  716. data/spec/models/spree/promotion_code_spec.rb +206 -0
  717. data/spec/models/spree/promotion_handler/cart_spec.rb +132 -0
  718. data/spec/models/spree/promotion_handler/coupon_spec.rb +365 -0
  719. data/spec/models/spree/promotion_handler/page_spec.rb +45 -0
  720. data/spec/models/spree/promotion_handler/shipping_spec.rb +96 -0
  721. data/spec/models/spree/promotion_rule_spec.rb +34 -0
  722. data/spec/models/spree/promotion_spec.rb +834 -0
  723. data/spec/models/spree/refund_spec.rb +199 -0
  724. data/spec/models/spree/reimbursement/credit_spec.rb +38 -0
  725. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +144 -0
  726. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +85 -0
  727. data/spec/models/spree/reimbursement_performer_spec.rb +32 -0
  728. data/spec/models/spree/reimbursement_spec.rb +253 -0
  729. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +52 -0
  730. data/spec/models/spree/reimbursement_type/credit_spec.rb +55 -0
  731. data/spec/models/spree/reimbursement_type/exchange_spec.rb +47 -0
  732. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +109 -0
  733. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +99 -0
  734. data/spec/models/spree/return_authorization_spec.rb +226 -0
  735. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +79 -0
  736. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +59 -0
  737. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +86 -0
  738. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +35 -0
  739. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +31 -0
  740. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +42 -0
  741. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +66 -0
  742. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  743. data/spec/models/spree/return_item_spec.rb +776 -0
  744. data/spec/models/spree/returns_calculator_spec.rb +16 -0
  745. data/spec/models/spree/shipment_spec.rb +907 -0
  746. data/spec/models/spree/shipping_calculator_spec.rb +57 -0
  747. data/spec/models/spree/shipping_manifest_spec.rb +110 -0
  748. data/spec/models/spree/shipping_method_spec.rb +260 -0
  749. data/spec/models/spree/shipping_rate_spec.rb +154 -0
  750. data/spec/models/spree/shipping_rate_tax_spec.rb +79 -0
  751. data/spec/models/spree/state_spec.rb +43 -0
  752. data/spec/models/spree/stock/availability_spec.rb +143 -0
  753. data/spec/models/spree/stock/availability_validator_spec.rb +140 -0
  754. data/spec/models/spree/stock/content_item_spec.rb +70 -0
  755. data/spec/models/spree/stock/differentiator_spec.rb +41 -0
  756. data/spec/models/spree/stock/estimator_spec.rb +240 -0
  757. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +34 -0
  758. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +20 -0
  759. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +19 -0
  760. data/spec/models/spree/stock/package_spec.rb +182 -0
  761. data/spec/models/spree/stock/quantifier_spec.rb +113 -0
  762. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +18 -0
  763. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +18 -0
  764. data/spec/models/spree/stock/simple_coordinator_spec.rb +247 -0
  765. data/spec/models/spree/stock/splitter/backordered_spec.rb +31 -0
  766. data/spec/models/spree/stock/splitter/base_spec.rb +22 -0
  767. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +48 -0
  768. data/spec/models/spree/stock/splitter/weight_spec.rb +31 -0
  769. data/spec/models/spree/stock/splitter_chain_spec.rb +66 -0
  770. data/spec/models/spree/stock_item_spec.rb +347 -0
  771. data/spec/models/spree/stock_location_spec.rb +288 -0
  772. data/spec/models/spree/stock_movement_spec.rb +58 -0
  773. data/spec/models/spree/stock_quantities_spec.rb +249 -0
  774. data/spec/models/spree/store_credit_category_spec.rb +19 -0
  775. data/spec/models/spree/store_credit_event_spec.rb +328 -0
  776. data/spec/models/spree/store_credit_spec.rb +900 -0
  777. data/spec/models/spree/store_selector/by_server_name_spec.rb +28 -0
  778. data/spec/models/spree/store_selector/legacy_spec.rb +46 -0
  779. data/spec/models/spree/store_spec.rb +156 -0
  780. data/spec/models/spree/tax/order_adjuster_spec.rb +35 -0
  781. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +59 -0
  782. data/spec/models/spree/tax/tax_location_spec.rb +79 -0
  783. data/spec/models/spree/tax/taxation_integration_spec.rb +815 -0
  784. data/spec/models/spree/tax_calculator/default_spec.rb +56 -0
  785. data/spec/models/spree/tax_category_spec.rb +29 -0
  786. data/spec/models/spree/tax_rate_spec.rb +316 -0
  787. data/spec/models/spree/taxon_spec.rb +169 -0
  788. data/spec/models/spree/taxonomy_spec.rb +15 -0
  789. data/spec/models/spree/unit_cancel_spec.rb +61 -0
  790. data/spec/models/spree/user_spec.rb +247 -0
  791. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +33 -0
  792. data/spec/models/spree/variant/price_selector_spec.rb +90 -0
  793. data/spec/models/spree/variant/pricing_options_spec.rb +181 -0
  794. data/spec/models/spree/variant/scopes_spec.rb +94 -0
  795. data/spec/models/spree/variant/vat_price_generator_spec.rb +77 -0
  796. data/spec/models/spree/variant_property_rule_condition_spec.rb +17 -0
  797. data/spec/models/spree/variant_property_rule_spec.rb +85 -0
  798. data/spec/models/spree/variant_property_rule_value_spec.rb +20 -0
  799. data/spec/models/spree/variant_spec.rb +822 -0
  800. data/spec/models/spree/wallet_payment_source_spec.rb +48 -0
  801. data/spec/models/spree/wallet_spec.rb +155 -0
  802. data/spec/models/spree/zone_spec.rb +248 -0
  803. data/spec/rails_helper.rb +45 -0
  804. data/spec/shared_examples/calculator_shared_examples.rb +10 -0
  805. data/spec/spec_helper.rb +39 -0
  806. data/spec/support/big_decimal.rb +7 -0
  807. data/spec/support/concerns/default_price.rb +36 -0
  808. data/spec/support/concerns/payment_source.rb +66 -0
  809. data/spec/support/concerns/working_factories.rb +15 -0
  810. data/spec/support/dummy_ability.rb +7 -0
  811. data/spec/support/shared_contexts/rake.rb +32 -0
  812. data/vendor/assets/javascripts/jquery.payment.js +648 -0
  813. data/vendor/assets/javascripts/jsuri.js +2 -0
  814. data/vendor/assets/stylesheets/normalize.css +375 -0
  815. metadata +1226 -0
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace 'spree:migrations:copy_order_bill_address_to_credit_card' do
4
+ # This copies the billing address from the order associated with a
5
+ # credit card's most recent payment to the credit card.
6
+
7
+ # Used in the migration CopyOrderBillAddressToCreditCard and made available as a
8
+ # rake task to allow running it a second time after deploying the new code, in
9
+ # case some order->credit card data was missed between the time that the
10
+ # migration was run and the application servers were restarted with the new
11
+ # code.
12
+
13
+ # This task should be safe to run multiple times.
14
+
15
+ task up: :environment do
16
+ if Spree::CreditCard.connection.adapter_name =~ /postgres/i
17
+ postgres_copy
18
+ else
19
+ ruby_copy
20
+ end
21
+ end
22
+
23
+ task down: :environment do
24
+ Spree::CreditCard.update_all(address_id: nil)
25
+ end
26
+
27
+ def ruby_copy
28
+ scope = Spree::CreditCard.where(address_id: nil).includes(payments: :order)
29
+
30
+ scope.find_each(batch_size: 500) do |cc|
31
+ # remove payments that lack a bill address
32
+ payments = cc.payments.select { |p| p.order.bill_address_id }
33
+
34
+ payment = payments.sort_by do |p|
35
+ [
36
+ %w(failed invalid).include?(p.state) ? 0 : 1, # prioritize valid payments
37
+ p.created_at, # prioritize more recent payments
38
+ ]
39
+ end.last
40
+
41
+ next if payment.nil?
42
+
43
+ cc.update_column(:address_id, payment.order.bill_address_id)
44
+ puts "Successfully associated billing address (#{payment.order.bill_address_id}) with credit card (#{cc.id})"
45
+ end
46
+ end
47
+
48
+ # This was 20x faster for us but the syntax is postgres-specific. I'm sure
49
+ # there are equivalent versions for other DBs if someone wants to write them.
50
+ # I took a quick stab at crafting a cross-db compatible version but it was
51
+ # slow.
52
+ def postgres_copy
53
+ batch_size = 10_000
54
+
55
+ current_start_id = 1
56
+
57
+ while current_start_id <= last_credit_card_id
58
+ current_end_id = current_start_id + batch_size
59
+ puts "updating #{current_start_id} to #{current_end_id}"
60
+
61
+ # first try to find a valid payment for each credit card
62
+ Spree::CreditCard.connection.execute(
63
+ postgres_sql(
64
+ start_id: current_start_id,
65
+ end_id: current_end_id,
66
+ payment_state: "not in ('failed', 'invalid')"
67
+ )
68
+ )
69
+
70
+ # fall back to using invalid payments for each credit card
71
+ Spree::CreditCard.connection.execute(
72
+ postgres_sql(
73
+ start_id: current_start_id,
74
+ end_id: current_end_id,
75
+ payment_state: "in ('failed', 'invalid')"
76
+ )
77
+ )
78
+
79
+ current_start_id += batch_size
80
+ end
81
+ end
82
+
83
+ def postgres_sql(start_id:, end_id:, payment_state:)
84
+ <<-SQL
85
+ update spree_credit_cards c
86
+ set address_id = o.bill_address_id
87
+ from spree_payments p
88
+ inner join spree_orders o
89
+ on o.id = p.order_id
90
+ and o.bill_address_id is not null
91
+ left join (
92
+ select p2.*
93
+ from spree_payments p2
94
+ inner join spree_orders o2
95
+ on o2.id = p2.order_id
96
+ and o2.bill_address_id is not null
97
+ ) more_recent_payment
98
+ on more_recent_payment.source_id = p.source_id
99
+ and more_recent_payment.source_type = 'Spree::CreditCard'
100
+ and more_recent_payment.created_at > p.created_at
101
+ and more_recent_payment.state #{payment_state}
102
+ where c.address_id is null
103
+ and p.source_id = c.id
104
+ and p.source_type = 'Spree::CreditCard'
105
+ and p.state #{payment_state}
106
+ and more_recent_payment.id is null
107
+ and o.bill_address_id is not null
108
+ and c.id between #{start_id} and #{end_id}
109
+ SQL
110
+ end
111
+
112
+ def last_credit_card_id
113
+ Spree::CreditCard.last.try!(:id) || 0
114
+ end
115
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :solidus do
4
+ namespace :migrations do
5
+ namespace :migrate_shipping_rate_taxes do
6
+ task up: :environment do
7
+ print "Adding persisted tax notes to historic shipping rates ... "
8
+ Spree::ShippingRate.where.not(tax_rate_id: nil).find_each do |shipping_rate|
9
+ tax_rate = Spree::TaxRate.unscoped.find(shipping_rate.tax_rate_id)
10
+ shipping_rate.taxes.find_or_create_by!(
11
+ tax_rate: tax_rate,
12
+ amount: tax_rate.compute_amount(shipping_rate)
13
+ )
14
+ end
15
+ Spree::ShippingRate.where.not(tax_rate_id: nil).update_all(tax_rate_id: nil)
16
+ puts "Success."
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace 'spree:migrations:migrate_user_addresses' do
4
+ # This creates an entry in the user_addresses table for a user's currently
5
+ # associated shipping and billing addresses.
6
+
7
+ # This task should not need to be run more than once. But the de-dup behavior in
8
+ # UserAddressBook should make it safe.
9
+ # When the code (in the same PR) is deployed, each new order's addresses will be added
10
+ # to the user's address book. This will catch up all the historical data.
11
+
12
+ task up: :environment do
13
+ Spree.user_class.find_each(batch_size: 500) do |user|
14
+ ship_address = Spree::Address.find_by(id: user.ship_address_id)
15
+ bill_address = Spree::Address.find_by(id: user.bill_address_id)
16
+
17
+ current_addresses = [bill_address, ship_address].compact.uniq
18
+
19
+ current_addresses.each do |address|
20
+ # since ship_address is last, it will override bill_address as default when both are present
21
+ user.save_in_address_book(address.attributes, true)
22
+ end
23
+
24
+ puts "Migrated addresses for user ##{user.id}"
25
+ end
26
+ end
27
+
28
+ task down: :environment do
29
+ Spree::UserAddress.delete_all
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'solidus/migrations/rename_gateways'
4
+
5
+ namespace 'solidus:migrations:rename_gateways' do
6
+ task up: :environment do
7
+ count = Solidus::Migrations::RenameGateways.new.up
8
+
9
+ unless ENV['VERBOSE'] == 'false' || !verbose
10
+ puts "Renamed #{count} gateways into payment methods."
11
+ end
12
+ end
13
+
14
+ task down: :environment do
15
+ count = Solidus::Migrations::RenameGateways.new.down
16
+
17
+ unless ENV['VERBOSE'] == 'false' || !verbose
18
+ puts "Renamed #{count} payment methods into gateways."
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :order_capturing do
4
+ desc "Looks for orders with inventory that is fully shipped/short-shipped, and captures money for it"
5
+ task capture_payments: :environment do
6
+ failures = []
7
+ orders = Spree::Order.complete.where(payment_state: 'balance_due').where('completed_at > ?', Spree::Config[:order_capturing_time_window].days.ago)
8
+
9
+ orders.find_each do |order|
10
+ if order.inventory_units.all? { |iu| iu.canceled? || iu.shipped? }
11
+ if Spree::OrderCapturing.failure_handler
12
+ begin
13
+ Spree::OrderCapturing.new(order).capture_payments
14
+ rescue StandardError => e
15
+ failures << { message: "Order #{order.number} unable to capture. #{e.class}: #{e.message}" }
16
+ end
17
+ else
18
+ Spree::OrderCapturing.new(order).capture_payments
19
+ end
20
+ end
21
+ end
22
+
23
+ Spree::OrderCapturing.failure_handler.call(failures) if failures.any?
24
+ end
25
+ end
data/script/rails ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
5
+
6
+ ENGINE_ROOT = File.expand_path('..', __dir__)
7
+ ENGINE_PATH = File.expand_path('../lib/spree/core/engine', __dir__)
8
+
9
+ require 'rails/all'
10
+ require 'rails/engine/commands'
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../core/lib/spree/core/version.rb'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.platform = Gem::Platform::RUBY
7
+ s.name = 'solidus_core_devise_token_auth'
8
+ s.version = Spree.solidus_version
9
+ s.summary = 'Essential models, mailers, and classes for the Solidus e-commerce project (devise_token_auth revised version)'
10
+ s.description = s.summary
11
+
12
+ s.author = 'Michał Siwek (skycocker)'
13
+ s.email = 'mike21@aol.pl'
14
+ s.homepage = 'https://github.com/skycocker/solidus/tree/master/core'
15
+ s.license = 'BSD-3-Clause'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.require_path = 'lib'
19
+
20
+ s.required_ruby_version = '>= 2.2.2'
21
+ s.required_rubygems_version = '>= 1.8.23'
22
+
23
+ %w[
24
+ actionmailer actionpack actionview activejob activemodel activerecord
25
+ activesupport railties
26
+ ].each do |rails_dep|
27
+ s.add_dependency rails_dep, ['>= 5.1', '< 5.3.x']
28
+ end
29
+
30
+ s.add_dependency 'activemerchant', '~> 1.66'
31
+ s.add_dependency 'acts_as_list', '~> 0.3'
32
+ s.add_dependency 'awesome_nested_set', '~> 3.0', '>= 3.0.1'
33
+ s.add_dependency 'cancancan', '~> 2.2'
34
+ s.add_dependency 'carmen', '~> 1.1.0'
35
+ s.add_dependency 'discard', '~> 1.0'
36
+ s.add_dependency 'friendly_id', '~> 5.0'
37
+ s.add_dependency 'kaminari-activerecord', '~> 1.1'
38
+ s.add_dependency 'monetize', '~> 1.8'
39
+ s.add_dependency 'paperclip', ['>= 4.2', '< 6']
40
+ s.add_dependency 'paranoia', '~> 2.4'
41
+ s.add_dependency 'ransack', '~> 2.0'
42
+ s.add_dependency 'state_machines-activerecord', '~> 0.4'
43
+
44
+ # it's simply the latest rubygems published version
45
+ # at the time of writing it,
46
+ # feel free to update
47
+ s.add_dependency 'devise_token_auth', '~> 1.0.0rc2'
48
+ end
Binary file
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe Spree::BaseHelper, type: :helper do
6
+ include Spree::BaseHelper
7
+
8
+ let(:current_store){ create :store }
9
+
10
+ context "available_countries" do
11
+ let(:country) { create(:country) }
12
+
13
+ before do
14
+ 3.times { create(:country) }
15
+ end
16
+
17
+ context "with no checkout zone defined" do
18
+ before do
19
+ Spree::Config[:checkout_zone] = nil
20
+ end
21
+
22
+ it "return complete list of countries" do
23
+ expect(available_countries.count).to eq(Spree::Country.count)
24
+ end
25
+
26
+ it "uses locales for country names" do
27
+ expect(available_countries).to include(having_attributes(name: "United States of America"))
28
+ end
29
+ end
30
+
31
+ context "with a checkout zone defined" do
32
+ context "checkout zone is of type country" do
33
+ before do
34
+ @country_zone = create(:zone, name: "CountryZone")
35
+ @country_zone.members.create(zoneable: country)
36
+ Spree::Config[:checkout_zone] = @country_zone.name
37
+ end
38
+
39
+ it "return only the countries defined by the checkout zone" do
40
+ expect(available_countries).to eq([country])
41
+ end
42
+
43
+ it "returns only the countries defined by the checkout zone passed as parameter" do
44
+ expect(available_countries(restrict_to_zone: @country_zone.name)).to eq([country])
45
+ end
46
+ end
47
+
48
+ context "checkout zone is of type state" do
49
+ before do
50
+ state_zone = create(:zone, name: "StateZone")
51
+ state = create(:state, country: country)
52
+ state_zone.members.create(zoneable: state)
53
+ Spree::Config[:checkout_zone] = state_zone.name
54
+ end
55
+
56
+ it "return complete list of countries" do
57
+ expect(available_countries.count).to eq(Spree::Country.count)
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ # Regression test for https://github.com/spree/spree/issues/2034
64
+ context "flash_message" do
65
+ let(:flash) { { "notice" => "ok", "foo" => "foo", "bar" => "bar" } }
66
+
67
+ it "should output all flash content" do
68
+ flash_messages
69
+ html = Nokogiri::HTML(helper.output_buffer)
70
+ expect(html.css(".notice").text).to eq("ok")
71
+ expect(html.css(".foo").text).to eq("foo")
72
+ expect(html.css(".bar").text).to eq("bar")
73
+ end
74
+
75
+ it "should output flash content except one key" do
76
+ flash_messages(ignore_types: :bar)
77
+ html = Nokogiri::HTML(helper.output_buffer)
78
+ expect(html.css(".notice").text).to eq("ok")
79
+ expect(html.css(".foo").text).to eq("foo")
80
+ expect(html.css(".bar").text).to be_empty
81
+ end
82
+
83
+ it "should output flash content except some keys" do
84
+ flash_messages(ignore_types: [:foo, :bar])
85
+ html = Nokogiri::HTML(helper.output_buffer)
86
+ expect(html.css(".notice").text).to eq("ok")
87
+ expect(html.css(".foo").text).to be_empty
88
+ expect(html.css(".bar").text).to be_empty
89
+ expect(helper.output_buffer).to eq("<div class=\"flash notice\">ok</div>")
90
+ end
91
+ end
92
+
93
+ context "link_to_tracking" do
94
+ it "returns tracking link if available" do
95
+ a = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: 'http://g.c/?t=123').css('a')
96
+
97
+ expect(a.text).to eq '123'
98
+ expect(a.attr('href').value).to eq 'http://g.c/?t=123'
99
+ end
100
+
101
+ it "returns tracking without link if link unavailable" do
102
+ html = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: nil)
103
+ expect(html.css('span').text).to eq '123'
104
+ end
105
+
106
+ it "returns nothing when no shipping method" do
107
+ html = link_to_tracking_html(shipping_method: nil, tracking: '123')
108
+ expect(html.css('span').text).to eq ''
109
+ end
110
+
111
+ it "returns nothing when no tracking" do
112
+ html = link_to_tracking_html(tracking: nil)
113
+ expect(html.css('span').text).to eq ''
114
+ end
115
+
116
+ def link_to_tracking_html(options = {})
117
+ node = link_to_tracking(double(:shipment, options))
118
+ Nokogiri::HTML(node.to_s)
119
+ end
120
+ end
121
+
122
+ # Regression test for https://github.com/spree/spree/issues/2396
123
+ context "meta_data_tags" do
124
+ it "truncates a product description to 160 characters" do
125
+ # Because the controller_name method returns "test"
126
+ # controller_name is used by this method to infer what it is supposed
127
+ # to be generating meta_data_tags for
128
+ @test = Spree::Product.new(description: "a" * 200)
129
+ tags = Nokogiri::HTML.parse(meta_data_tags)
130
+ content = tags.css("meta[name=description]").first["content"]
131
+ expect(content.length).to be <= 160
132
+ end
133
+ end
134
+
135
+ describe "#pretty_time" do
136
+ subject { pretty_time(date) }
137
+
138
+ let(:date) { Time.new(2012, 11, 6, 13, 33) }
139
+
140
+ it "pretty prints time in long format" do
141
+ is_expected.to eq "November 06, 2012 1:33 PM"
142
+ end
143
+
144
+ context 'with format set to short' do
145
+ subject { pretty_time(date, :short) }
146
+
147
+ it "pretty prints time in short format" do
148
+ is_expected.to eq "Nov 6 '12 1:33pm"
149
+ end
150
+ end
151
+ end
152
+
153
+ context "plural_resource_name" do
154
+ let(:plural_config) { Spree::I18N_GENERIC_PLURAL }
155
+ let(:base_class) { Spree::Product }
156
+
157
+ subject { plural_resource_name(base_class) }
158
+
159
+ it "should use ActiveModel::Naming module to pluralize model names" do
160
+ expect(subject).to eq base_class.model_name.human(count: plural_config)
161
+ end
162
+
163
+ it "should use the Spree::I18N_GENERIC_PLURAL constant" do
164
+ expect(base_class.model_name).to receive(:human).with(hash_including(count: plural_config))
165
+ subject
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,200 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ module Spree
6
+ RSpec.describe ProductsHelper, type: :helper do
7
+ include ProductsHelper
8
+
9
+ let(:product) { create(:product, price: product_price) }
10
+ let(:product_price) { 10 }
11
+ let(:variant) { create(:variant, product: product, price: variant_price) }
12
+ let(:currency) { 'USD' }
13
+ let(:pricing_options) do
14
+ Spree::Config.pricing_options_class.new(currency: currency)
15
+ end
16
+
17
+ before do
18
+ allow(helper).to receive(:current_pricing_options) { pricing_options }
19
+ end
20
+
21
+ context "#variant_price_diff" do
22
+ let(:variant_price) { 10 }
23
+
24
+ subject { helper.variant_price(variant) }
25
+
26
+ context "when variant is same as master" do
27
+ it { is_expected.to be_nil }
28
+ end
29
+
30
+ context "when currency is default" do
31
+ context "when variant is more than master" do
32
+ let(:variant_price) { 15 }
33
+
34
+ it { is_expected.to eq("(Add: $5.00)") }
35
+ # Regression test for https://github.com/spree/spree/issues/2737
36
+ it { is_expected.to be_html_safe }
37
+ end
38
+
39
+ context "when variant is less than master" do
40
+ let(:product_price) { 15 }
41
+
42
+ it { is_expected.to eq("(Subtract: $5.00)") }
43
+ end
44
+ end
45
+
46
+ context "when currency is JPY" do
47
+ let(:variant_price) { 100 }
48
+ let(:product_price) { 100 }
49
+ let(:currency) { 'JPY' }
50
+
51
+ before do
52
+ variant
53
+ product.prices.update_all(currency: currency)
54
+ end
55
+
56
+ context "when variant is more than master" do
57
+ let(:variant_price) { 150 }
58
+
59
+ it { is_expected.to eq("(Add: &#x00A5;50)") }
60
+ end
61
+
62
+ context "when variant is less than master" do
63
+ let(:product_price) { 150 }
64
+
65
+ it { is_expected.to eq("(Subtract: &#x00A5;50)") }
66
+ end
67
+ end
68
+ end
69
+
70
+ context "#variant_price_full" do
71
+ let!(:variant_2) { create(:variant, product: product, price: variant_2_price) }
72
+ let(:variant_2_price) { 20 }
73
+ let(:variant_price) { 15 }
74
+
75
+ before do
76
+ Spree::Config[:show_variant_full_price] = true
77
+ variant
78
+ end
79
+
80
+ context "when currency is default" do
81
+ it "should return the variant price if the price is different than master" do
82
+ expect(helper.variant_price(variant)).to eq("$15.00")
83
+ expect(helper.variant_price(variant_2)).to eq("$20.00")
84
+ end
85
+ end
86
+
87
+ context "when currency is JPY" do
88
+ let(:currency) { 'JPY' }
89
+ let(:product_price) { 100 }
90
+ let(:variant_price) { 150 }
91
+
92
+ before do
93
+ variant
94
+ product.prices.update_all(currency: currency)
95
+ end
96
+
97
+ it "should return the variant price if the price is different than master" do
98
+ expect(helper.variant_price(variant)).to eq("&#x00A5;150")
99
+ end
100
+ end
101
+
102
+ context "when all variant prices are equal" do
103
+ let(:product_price) { 10 }
104
+ let(:variant_price) { 10 }
105
+ let(:variant_2_price) { 10 }
106
+
107
+ it "should be nil" do
108
+ expect(helper.variant_price(variant)).to be_nil
109
+ expect(helper.variant_price(variant_2)).to be_nil
110
+ end
111
+ end
112
+ end
113
+
114
+ context "#product_description" do
115
+ # Regression test for https://github.com/spree/spree/issues/1607
116
+ it "renders a product description without excessive paragraph breaks" do
117
+ product.description = %{
118
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a ligula leo. Proin eu arcu at ipsum dapibus ullamcorper. Pellentesque egestas orci nec magna condimentum luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut ac ante et mauris bibendum ultricies non sed massa. Fusce facilisis dui eget lacus scelerisque eget aliquam urna ultricies. Duis et rhoncus quam. Praesent tellus nisi, ultrices sed iaculis quis, euismod interdum ipsum.</p>
119
+ <ul>
120
+ <li>Lorem ipsum dolor sit amet</li>
121
+ <li>Lorem ipsum dolor sit amet</li>
122
+ </ul>
123
+ }
124
+ description = product_description(product)
125
+ expect(description.strip).to eq(product.description.strip)
126
+ end
127
+
128
+ it "renders a product description with automatic paragraph breaks" do
129
+ product.description = %{
130
+ THIS IS THE BEST PRODUCT EVER!
131
+
132
+ "IT CHANGED MY LIFE" - Sue, MD}
133
+
134
+ description = product_description(product)
135
+ expect(description.strip).to eq(%{<p>\nTHIS IS THE BEST PRODUCT EVER!</p>"IT CHANGED MY LIFE" - Sue, MD})
136
+ end
137
+
138
+ it "renders a product description without any formatting based on configuration" do
139
+ description = %{
140
+ <p>hello world</p>
141
+
142
+ <p>tihs is completely awesome and it works</p>
143
+
144
+ <p>why so many spaces in the code. and why some more formatting afterwards?</p>
145
+ }
146
+
147
+ product.description = description
148
+
149
+ Spree::Config[:show_raw_product_description] = true
150
+ description = product_description(product)
151
+ expect(description).to eq(description)
152
+ end
153
+ end
154
+
155
+ context '#line_item_description_text' do
156
+ subject { line_item_description_text description }
157
+ context 'variant has a blank description' do
158
+ let(:description) { nil }
159
+ it { is_expected.to eq(I18n.t('spree.product_has_no_description')) }
160
+ end
161
+ context 'variant has a description' do
162
+ let(:description) { 'test_desc' }
163
+ it { is_expected.to eq(description) }
164
+ end
165
+ context 'description has nonbreaking spaces' do
166
+ let(:description) { 'test&nbsp;desc' }
167
+ it { is_expected.to eq('test desc') }
168
+ end
169
+ end
170
+
171
+ context '#cache_key_for_products' do
172
+ subject { helper.cache_key_for_products }
173
+ before(:each) do
174
+ @products = double('products collection')
175
+ allow(helper).to receive(:params) { { page: 10 } }
176
+ end
177
+
178
+ context 'when there is a maximum updated date' do
179
+ let(:updated_at) { Date.new(2011, 12, 13) }
180
+ before :each do
181
+ allow(@products).to receive(:count) { 5 }
182
+ allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
183
+ end
184
+
185
+ it { is_expected.to eq('en/USD/spree/products/all-10-20111213-5') }
186
+ end
187
+
188
+ context 'when there is no considered maximum updated date' do
189
+ let(:today) { Date.new(2013, 12, 11) }
190
+ before :each do
191
+ allow(@products).to receive(:count) { 1_234_567 }
192
+ allow(@products).to receive(:maximum).with(:updated_at) { nil }
193
+ allow(Date).to receive(:today) { today }
194
+ end
195
+
196
+ it { is_expected.to eq('en/USD/spree/products/all-10-20131211-1234567') }
197
+ end
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe Spree::TaxonsHelper, type: :helper do
6
+ let(:currency) { 'USD' }
7
+ let(:pricing_options) do
8
+ Spree::Config.pricing_options_class.new(currency: currency)
9
+ end
10
+ before do
11
+ allow(helper).to receive(:current_pricing_options) { pricing_options }
12
+ end
13
+
14
+ describe "#taxon_preview" do
15
+ let!(:taxon) { create(:taxon) }
16
+ let!(:child_taxon) { create(:taxon, parent: taxon) }
17
+ let!(:product_1) { create(:product) }
18
+ let!(:product_2) { create(:product) }
19
+ let!(:product_3) { create(:product) }
20
+
21
+ before do
22
+ taxon.products << product_1
23
+ taxon.products << product_2
24
+ child_taxon.products << product_3
25
+ taxon.reload
26
+ end
27
+
28
+ # Regression test for https://github.com/spree/spree/issues/4382
29
+ it "returns products" do
30
+ expect(helper.taxon_preview(taxon)).to eql([product_1, product_2, product_3])
31
+ end
32
+
33
+ context "with different currency" do
34
+ let(:currency) { 'CAD' }
35
+
36
+ it "returns no products" do
37
+ expect(helper.taxon_preview(taxon)).to be_empty
38
+ end
39
+ end
40
+ end
41
+ end