solidus_core 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +3 -0
  4. data/Rakefile +16 -0
  5. data/script/rails +9 -0
  6. data/solidus_core.gemspec +48 -0
  7. data/spec/fixtures/thinking-cat.jpg +0 -0
  8. data/spec/helpers/base_helper_spec.rb +173 -0
  9. data/spec/helpers/order_helper_spec.rb +12 -0
  10. data/spec/helpers/products_helper_spec.rb +220 -0
  11. data/spec/helpers/taxons_helper_spec.rb +17 -0
  12. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  13. data/spec/lib/i18n_spec.rb +123 -0
  14. data/spec/lib/search/base_spec.rb +86 -0
  15. data/spec/lib/search/variant_spec.rb +92 -0
  16. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
  17. data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
  18. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  19. data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
  20. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  21. data/spec/lib/spree/core/current_store_spec.rb +36 -0
  22. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  23. data/spec/lib/spree/core/importer/order_spec.rb +431 -0
  24. data/spec/lib/spree/core/role_configuration_spec.rb +138 -0
  25. data/spec/lib/spree/core/validators/email_spec.rb +48 -0
  26. data/spec/lib/spree/localized_number_spec.rb +38 -0
  27. data/spec/lib/spree/migrations_spec.rb +36 -0
  28. data/spec/lib/spree/money_spec.rb +127 -0
  29. data/spec/lib/tasks/exchanges_spec.rb +231 -0
  30. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
  31. data/spec/lib/tasks/order_capturing_spec.rb +56 -0
  32. data/spec/mailers/carton_mailer_spec.rb +43 -0
  33. data/spec/mailers/order_mailer_spec.rb +122 -0
  34. data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
  35. data/spec/mailers/test_mailer_spec.rb +15 -0
  36. data/spec/models/spree/ability_spec.rb +276 -0
  37. data/spec/models/spree/address_spec.rb +250 -0
  38. data/spec/models/spree/adjustment_reason_spec.rb +13 -0
  39. data/spec/models/spree/adjustment_spec.rb +177 -0
  40. data/spec/models/spree/app_configuration_spec.rb +20 -0
  41. data/spec/models/spree/asset_spec.rb +24 -0
  42. data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
  43. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  44. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  45. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  46. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  47. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  48. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
  49. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  50. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  51. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  52. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  53. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
  54. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
  55. data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
  56. data/spec/models/spree/calculator_spec.rb +36 -0
  57. data/spec/models/spree/carton_spec.rb +133 -0
  58. data/spec/models/spree/classification_spec.rb +15 -0
  59. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  60. data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
  61. data/spec/models/spree/credit_card_spec.rb +334 -0
  62. data/spec/models/spree/customer_return_spec.rb +276 -0
  63. data/spec/models/spree/exchange_spec.rb +79 -0
  64. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  65. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  66. data/spec/models/spree/gateway_spec.rb +82 -0
  67. data/spec/models/spree/inventory_unit_spec.rb +307 -0
  68. data/spec/models/spree/item_adjustments_spec.rb +256 -0
  69. data/spec/models/spree/line_item_spec.rb +191 -0
  70. data/spec/models/spree/option_type_spec.rb +14 -0
  71. data/spec/models/spree/option_value_spec.rb +22 -0
  72. data/spec/models/spree/order/address_spec.rb +50 -0
  73. data/spec/models/spree/order/adjustments_spec.rb +39 -0
  74. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  75. data/spec/models/spree/order/checkout_spec.rb +902 -0
  76. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  77. data/spec/models/spree/order/finalizing_spec.rb +111 -0
  78. data/spec/models/spree/order/payment_spec.rb +210 -0
  79. data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
  80. data/spec/models/spree/order/state_machine_spec.rb +221 -0
  81. data/spec/models/spree/order/tax_spec.rb +84 -0
  82. data/spec/models/spree/order/totals_spec.rb +24 -0
  83. data/spec/models/spree/order/updating_spec.rb +18 -0
  84. data/spec/models/spree/order/validations_spec.rb +15 -0
  85. data/spec/models/spree/order_cancellations_spec.rb +120 -0
  86. data/spec/models/spree/order_capturing_spec.rb +116 -0
  87. data/spec/models/spree/order_contents_spec.rb +265 -0
  88. data/spec/models/spree/order_inventory_spec.rb +228 -0
  89. data/spec/models/spree/order_mutex_spec.rb +85 -0
  90. data/spec/models/spree/order_promotion_spec.rb +31 -0
  91. data/spec/models/spree/order_shipping_spec.rb +247 -0
  92. data/spec/models/spree/order_spec.rb +1412 -0
  93. data/spec/models/spree/order_stock_location_spec.rb +18 -0
  94. data/spec/models/spree/order_updater_spec.rb +299 -0
  95. data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
  96. data/spec/models/spree/payment_method_spec.rb +96 -0
  97. data/spec/models/spree/payment_spec.rb +1044 -0
  98. data/spec/models/spree/permission_sets/base_spec.rb +12 -0
  99. data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
  100. data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
  101. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
  102. data/spec/models/spree/permission_sets/order_display_spec.rb +49 -0
  103. data/spec/models/spree/permission_sets/order_management_spec.rb +36 -0
  104. data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
  105. data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
  106. data/spec/models/spree/permission_sets/promotion_display_spec.rb +34 -0
  107. data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
  108. data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
  109. data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +132 -0
  110. data/spec/models/spree/permission_sets/stock_display_spec.rb +26 -0
  111. data/spec/models/spree/permission_sets/stock_management_spec.rb +24 -0
  112. data/spec/models/spree/permission_sets/user_display_spec.rb +36 -0
  113. data/spec/models/spree/permission_sets/user_management_spec.rb +28 -0
  114. data/spec/models/spree/preference_spec.rb +80 -0
  115. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  116. data/spec/models/spree/preferences/preferable_spec.rb +294 -0
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  118. data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
  119. data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
  120. data/spec/models/spree/preferences/store_spec.rb +39 -0
  121. data/spec/models/spree/price_spec.rb +42 -0
  122. data/spec/models/spree/product/scopes_spec.rb +148 -0
  123. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  124. data/spec/models/spree/product_filter_spec.rb +26 -0
  125. data/spec/models/spree/product_property_spec.rb +20 -0
  126. data/spec/models/spree/product_spec.rb +437 -0
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
  129. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
  131. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  132. data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
  133. data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
  136. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  139. data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
  140. data/spec/models/spree/promotion_builder_spec.rb +118 -0
  141. data/spec/models/spree/promotion_category_spec.rb +17 -0
  142. data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
  143. data/spec/models/spree/promotion_code_spec.rb +187 -0
  144. data/spec/models/spree/promotion_handler/cart_spec.rb +114 -0
  145. data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
  146. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
  147. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  148. data/spec/models/spree/promotion_rule_spec.rb +28 -0
  149. data/spec/models/spree/promotion_spec.rb +767 -0
  150. data/spec/models/spree/refund_spec.rb +204 -0
  151. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  152. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  153. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  154. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  155. data/spec/models/spree/reimbursement_spec.rb +231 -0
  156. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
  157. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  158. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  159. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
  160. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
  161. data/spec/models/spree/return_authorization_spec.rb +290 -0
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  170. data/spec/models/spree/return_item_spec.rb +775 -0
  171. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  172. data/spec/models/spree/shipment_spec.rb +709 -0
  173. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  174. data/spec/models/spree/shipping_method_spec.rb +88 -0
  175. data/spec/models/spree/shipping_rate_spec.rb +142 -0
  176. data/spec/models/spree/state_spec.rb +14 -0
  177. data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
  178. data/spec/models/spree/stock/coordinator_spec.rb +116 -0
  179. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  180. data/spec/models/spree/stock/estimator_spec.rb +146 -0
  181. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  182. data/spec/models/spree/stock/package_spec.rb +163 -0
  183. data/spec/models/spree/stock/packer_spec.rb +91 -0
  184. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  185. data/spec/models/spree/stock/quantifier_spec.rb +115 -0
  186. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  187. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  188. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
  189. data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
  190. data/spec/models/spree/stock_item_spec.rb +426 -0
  191. data/spec/models/spree/stock_location_spec.rb +279 -0
  192. data/spec/models/spree/stock_movement_spec.rb +56 -0
  193. data/spec/models/spree/stock_transfer_spec.rb +290 -0
  194. data/spec/models/spree/store_credit_category_spec.rb +17 -0
  195. data/spec/models/spree/store_credit_event_spec.rb +314 -0
  196. data/spec/models/spree/store_credit_spec.rb +876 -0
  197. data/spec/models/spree/store_spec.rb +55 -0
  198. data/spec/models/spree/tax_category_spec.rb +27 -0
  199. data/spec/models/spree/tax_rate_spec.rb +378 -0
  200. data/spec/models/spree/taxon_spec.rb +74 -0
  201. data/spec/models/spree/taxonomy_spec.rb +18 -0
  202. data/spec/models/spree/tracker_spec.rb +21 -0
  203. data/spec/models/spree/transfer_item_spec.rb +264 -0
  204. data/spec/models/spree/unit_cancel_spec.rb +148 -0
  205. data/spec/models/spree/user_spec.rb +223 -0
  206. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
  207. data/spec/models/spree/variant/scopes_spec.rb +55 -0
  208. data/spec/models/spree/variant_spec.rb +546 -0
  209. data/spec/models/spree/zone_spec.rb +305 -0
  210. data/spec/spec_helper.rb +78 -0
  211. data/spec/support/big_decimal.rb +5 -0
  212. data/spec/support/concerns/default_price.rb +34 -0
  213. data/spec/support/dummy_ability.rb +4 -0
  214. data/spec/support/test_gateway.rb +2 -0
  215. metadata +229 -3
  216. data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58622e86f30cbe6913c6c9a25c6d0b57f0bbd931
4
- data.tar.gz: 2012989f08503d9eba91851c712e2d7f474e2bb5
3
+ metadata.gz: 758c9e82e5fac008cdb87fad3414299c3b501ecd
4
+ data.tar.gz: a35ac3995de180db514a5d7605b5fe704718bf38
5
5
  SHA512:
6
- metadata.gz: 96c333f769f84e564713f4b09cfe9eed79c0464b8f281f2a0dbe2fee5b4dd7a34cf84423d192cdd090a7da96a5e12d7fc458fc9dd306e0d5dc196b346cecd777
7
- data.tar.gz: a77c48ed3977520ee302bf6e3eb696829ba338e3978e2619837a29d88d40795af2973345cfb9903cdab1e82cffa69fcb5d90d440d06e8a9da32b67aae03cd28a
6
+ metadata.gz: 6d8cde6da8e863a4b83eed56d4803ffc94121604a8c58c2d538854a7b532ee0f5f66e29aa1de7451c0c5f039f410f033ddfdb6c534e72ce7f9f32009272bb834
7
+ data.tar.gz: 5bd8d373ec78d1a0067c57644f1e27d6b798694d19a494dc8a278483201d01b0f94d9650404ce34f27883f0202ed45c80fc9efc51f298f945177deb3cba32ab4
data/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ ## Spree 2.4.0 (unreleased) ##
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ eval(File.read(File.dirname(__FILE__) + '/../common_spree_dependencies.rb'))
2
+
3
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/common_rake'
6
+ load 'lib/tasks/exchanges.rake'
7
+
8
+ RSpec::Core::RakeTask.new
9
+
10
+ task :default => :spec
11
+
12
+ desc "Generates a dummy app for testing"
13
+ task :test_app do
14
+ ENV['LIB_NAME'] = 'spree/core'
15
+ Rake::Task['common:test_app'].invoke
16
+ end
data/script/rails ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/spree/core/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
9
+
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+ version = File.read(File.expand_path("../../SOLIDUS_VERSION", __FILE__)).strip
3
+
4
+ Gem::Specification.new do |s|
5
+ s.platform = Gem::Platform::RUBY
6
+ s.name = 'solidus_core'
7
+ s.version = version
8
+ s.summary = 'Essential models, mailers, and classes for the Solidus e-commerce project.'
9
+ s.description = s.summary
10
+
11
+ s.required_ruby_version = '>= 2.1.0'
12
+ s.author = 'Solidus Team'
13
+ s.email = 'contact@solidus.io'
14
+ s.homepage = 'http://solidus.io'
15
+ s.license = %q{BSD-3}
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.require_path = 'lib'
19
+
20
+ s.required_ruby_version = '>= 2.1.0'
21
+
22
+ s.add_dependency 'activemerchant', '~> 1.48.0'
23
+ s.add_dependency 'acts_as_list', '~> 0.3'
24
+ s.add_dependency 'awesome_nested_set', '~> 3.0.1'
25
+ s.add_dependency 'carmen', '~> 1.0.0'
26
+ s.add_dependency 'cancancan', '~> 1.10.0'
27
+ s.add_dependency 'deface', '~> 1.0.0'
28
+ s.add_dependency 'ffaker', '~> 1.16'
29
+ s.add_dependency 'font-awesome-rails', '~> 4.0'
30
+ s.add_dependency 'friendly_id', '~> 5.0.4'
31
+ s.add_dependency 'highline', '~> 1.6.18' # Necessary for the install generator
32
+ s.add_dependency 'json', '~> 1.7'
33
+ s.add_dependency 'kaminari', '~> 0.15', '>= 0.15.1'
34
+ s.add_dependency 'monetize', '~> 1.1'
35
+ s.add_dependency 'paperclip', '~> 4.2.0'
36
+ s.add_dependency 'paranoia', '~> 2.1.0'
37
+ s.add_dependency 'premailer-rails'
38
+ s.add_dependency 'rails', '~> 4.2.0'
39
+ s.add_dependency 'ransack', '~> 1.6.0'
40
+ s.add_dependency 'responders'
41
+ s.add_dependency 'state_machines-activerecord', '~> 0.2'
42
+ s.add_dependency 'stringex', '~> 1.5.1'
43
+ s.add_dependency 'truncate_html', '0.9.2'
44
+ s.add_dependency 'twitter_cldr', '~> 3.0'
45
+
46
+ s.add_development_dependency 'email_spec', '~> 1.6'
47
+ s.add_dependency 'sprockets-rails', '~> 2.0'
48
+ end
Binary file
@@ -0,0 +1,173 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::BaseHelper, :type => :helper do
4
+ include Spree::BaseHelper
5
+
6
+ let(:current_store){ create :store }
7
+
8
+ context "available_countries" do
9
+ let(:country) { create(:country) }
10
+
11
+ before do
12
+ 3.times { create(:country) }
13
+ end
14
+
15
+ context "with no checkout zone defined" do
16
+ before do
17
+ Spree::Config[:checkout_zone] = nil
18
+ end
19
+
20
+ it "return complete list of countries" do
21
+ expect(available_countries.count).to eq(Spree::Country.count)
22
+ end
23
+ end
24
+
25
+ context "with a checkout zone defined" do
26
+ context "checkout zone is of type country" do
27
+ before do
28
+ @country_zone = create(:zone, :name => "CountryZone")
29
+ @country_zone.members.create(:zoneable => country)
30
+ Spree::Config[:checkout_zone] = @country_zone.name
31
+ end
32
+
33
+ it "return only the countries defined by the checkout zone" do
34
+ expect(available_countries).to eq([country])
35
+ end
36
+ end
37
+
38
+ context "checkout zone is of type state" do
39
+ before do
40
+ state_zone = create(:zone, :name => "StateZone")
41
+ state = create(:state, :country => country)
42
+ state_zone.members.create(:zoneable => state)
43
+ Spree::Config[:checkout_zone] = state_zone.name
44
+ end
45
+
46
+ it "return complete list of countries" do
47
+ expect(available_countries.count).to eq(Spree::Country.count)
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ # Regression test for #1436
54
+ context "defining custom image helpers" do
55
+ let(:product) { mock_model(Spree::Product, :images => [], :variant_images => []) }
56
+ before do
57
+ Spree::Image.class_eval do
58
+ attachment_definitions[:attachment][:styles].merge!({:very_strange => '1x1'})
59
+ end
60
+ end
61
+
62
+ it "should not raise errors when style exists" do
63
+ ActiveSupport::Deprecation.silence do
64
+ expect { very_strange_image(product) }.not_to raise_error
65
+ end
66
+ end
67
+
68
+ it "should raise NoMethodError when style is not exists" do
69
+ expect { another_strange_image(product) }.to raise_error(NoMethodError)
70
+ end
71
+
72
+ end
73
+
74
+ # Regression test for #2034
75
+ context "flash_message" do
76
+ let(:flash) { {"notice" => "ok", "foo" => "foo", "bar" => "bar"} }
77
+
78
+ it "should output all flash content" do
79
+ flash_messages
80
+ html = Nokogiri::HTML(helper.output_buffer)
81
+ expect(html.css(".notice").text).to eq("ok")
82
+ expect(html.css(".foo").text).to eq("foo")
83
+ expect(html.css(".bar").text).to eq("bar")
84
+ end
85
+
86
+ it "should output flash content except one key" do
87
+ flash_messages(:ignore_types => :bar)
88
+ html = Nokogiri::HTML(helper.output_buffer)
89
+ expect(html.css(".notice").text).to eq("ok")
90
+ expect(html.css(".foo").text).to eq("foo")
91
+ expect(html.css(".bar").text).to be_empty
92
+ end
93
+
94
+ it "should output flash content except some keys" do
95
+ flash_messages(:ignore_types => [:foo, :bar])
96
+ html = Nokogiri::HTML(helper.output_buffer)
97
+ expect(html.css(".notice").text).to eq("ok")
98
+ expect(html.css(".foo").text).to be_empty
99
+ expect(html.css(".bar").text).to be_empty
100
+ expect(helper.output_buffer).to eq("<div class=\"flash notice\">ok</div>")
101
+ end
102
+ end
103
+
104
+ context "link_to_tracking" do
105
+ it "returns tracking link if available" do
106
+ a = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: 'http://g.c/?t=123').css('a')
107
+
108
+ expect(a.text).to eq '123'
109
+ expect(a.attr('href').value).to eq 'http://g.c/?t=123'
110
+ end
111
+
112
+ it "returns tracking without link if link unavailable" do
113
+ html = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: nil)
114
+ expect(html.css('span').text).to eq '123'
115
+ end
116
+
117
+ it "returns nothing when no shipping method" do
118
+ html = link_to_tracking_html(shipping_method: nil, tracking: '123')
119
+ expect(html.css('span').text).to eq ''
120
+ end
121
+
122
+ it "returns nothing when no tracking" do
123
+ html = link_to_tracking_html(tracking: nil)
124
+ expect(html.css('span').text).to eq ''
125
+ end
126
+
127
+ def link_to_tracking_html(options = {})
128
+ node = link_to_tracking(double(:shipment, options))
129
+ Nokogiri::HTML(node.to_s)
130
+ end
131
+ end
132
+
133
+ # Regression test for #2396
134
+ context "meta_data_tags" do
135
+ it "truncates a product description to 160 characters" do
136
+ # Because the controller_name method returns "test"
137
+ # controller_name is used by this method to infer what it is supposed
138
+ # to be generating meta_data_tags for
139
+ text = Faker::Lorem.paragraphs(2).join(" ")
140
+ @test = Spree::Product.new(:description => text)
141
+ tags = Nokogiri::HTML.parse(meta_data_tags)
142
+ content = tags.css("meta[name=description]").first["content"]
143
+ assert content.length <= 160, "content length is not truncated to 160 characters"
144
+ end
145
+ end
146
+
147
+ # Regression test for #5384
148
+ context "custom image helpers conflict with inproper statements" do
149
+ let(:product) { mock_model(Spree::Product, :images => [], :variant_images => []) }
150
+ before do
151
+ Spree::Image.class_eval do
152
+ attachment_definitions[:attachment][:styles].merge!({:foobar => '1x1'})
153
+ end
154
+ end
155
+
156
+ it "should not raise errors when helper method called" do
157
+ ActiveSupport::Deprecation.silence do
158
+ expect { foobar_image(product) }.not_to raise_error
159
+ end
160
+ end
161
+
162
+ it "should raise NoMethodError when statement with name equal to style name called" do
163
+ expect { foobar(product) }.to raise_error(NoMethodError)
164
+ end
165
+
166
+ end
167
+
168
+ context "pretty_time" do
169
+ it "prints in a format" do
170
+ expect(pretty_time(DateTime.new(2012, 5, 6, 13, 33))).to eq "May 06, 2012 1:33 PM"
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Spree::OrdersHelper, :type => :helper do
5
+ # Regression test for #2518 + #2323
6
+ it "truncates HTML correctly in product description" do
7
+ product = double(:description => "<strong>" + ("a" * 95) + "</strong> This content is invisible.")
8
+ expected = "<strong>" + ("a" * 95) + "</strong>..."
9
+ expect(truncated_product_description(product)).to eq(expected)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,220 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Spree
6
+ describe ProductsHelper, :type => :helper do
7
+ include ProductsHelper
8
+
9
+ let(:product) { create(:product) }
10
+ let(:currency) { 'USD' }
11
+
12
+ before do
13
+ allow(helper).to receive(:current_currency) { currency }
14
+ end
15
+
16
+ context "#variant_price_diff" do
17
+ let(:product_price) { 10 }
18
+ let(:variant_price) { 10 }
19
+
20
+ before do
21
+ @variant = create(:variant, :product => product)
22
+ product.price = 15
23
+ @variant.price = 10
24
+ allow(product).to receive(:amount_in) { product_price }
25
+ allow(@variant).to receive(:amount_in) { variant_price }
26
+ end
27
+
28
+ subject { helper.variant_price(@variant) }
29
+
30
+ context "when variant is same as master" do
31
+ it { is_expected.to be_nil }
32
+ end
33
+
34
+ context "when the master has no price" do
35
+ let(:product_price) { nil }
36
+
37
+ it { is_expected.to be_nil }
38
+ end
39
+
40
+ context "when currency is default" do
41
+ context "when variant is more than master" do
42
+ let(:variant_price) { 15 }
43
+
44
+ it { is_expected.to eq("(Add: $5.00)") }
45
+ # Regression test for #2737
46
+ it { is_expected.to be_html_safe }
47
+ end
48
+
49
+ context "when variant is less than master" do
50
+ let(:product_price) { 15 }
51
+
52
+ it { is_expected.to eq("(Subtract: $5.00)") }
53
+ end
54
+ end
55
+
56
+ context "when currency is JPY" do
57
+ let(:variant_price) { 100 }
58
+ let(:product_price) { 100 }
59
+ let(:currency) { 'JPY' }
60
+
61
+ context "when variant is more than master" do
62
+ let(:variant_price) { 150 }
63
+
64
+ it { is_expected.to eq("(Add: &#x00A5;50)") }
65
+ end
66
+
67
+ context "when variant is less than master" do
68
+ let(:product_price) { 150 }
69
+
70
+ it { is_expected.to eq("(Subtract: &#x00A5;50)") }
71
+ end
72
+ end
73
+ end
74
+
75
+ context "#variant_price_full" do
76
+ before do
77
+ Spree::Config[:show_variant_full_price] = true
78
+ @variant1 = create(:variant, :product => product)
79
+ @variant2 = create(:variant, :product => product)
80
+ end
81
+
82
+ context "when currency is default" do
83
+ it "should return the variant price if the price is different than master" do
84
+ product.price = 10
85
+ @variant1.price = 15
86
+ @variant2.price = 20
87
+ expect(helper.variant_price(@variant1)).to eq("$15.00")
88
+ expect(helper.variant_price(@variant2)).to eq("$20.00")
89
+ end
90
+ end
91
+
92
+ context "when currency is JPY" do
93
+ let(:currency) { 'JPY' }
94
+
95
+ before do
96
+ product.variants.active.each do |variant|
97
+ variant.prices.each do |price|
98
+ price.currency = currency
99
+ price.save!
100
+ end
101
+ end
102
+ end
103
+
104
+ it "should return the variant price if the price is different than master" do
105
+ product.price = 100
106
+ @variant1.price = 150
107
+ expect(helper.variant_price(@variant1)).to eq("&#x00A5;150")
108
+ end
109
+ end
110
+
111
+ it "should be nil when all variant prices are equal" do
112
+ product.price = 10
113
+ @variant1.default_price.update_column(:amount, 10)
114
+ @variant2.default_price.update_column(:amount, 10)
115
+ expect(helper.variant_price(@variant1)).to be_nil
116
+ expect(helper.variant_price(@variant2)).to be_nil
117
+ end
118
+ end
119
+
120
+
121
+ context "#product_description" do
122
+ # Regression test for #1607
123
+ it "renders a product description without excessive paragraph breaks" do
124
+ product.description = %Q{
125
+ <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>
126
+ <ul>
127
+ <li>Lorem ipsum dolor sit amet</li>
128
+ <li>Lorem ipsum dolor sit amet</li>
129
+ </ul>
130
+ }
131
+ description = product_description(product)
132
+ expect(description.strip).to eq(product.description.strip)
133
+ end
134
+
135
+ it "renders a product description with automatic paragraph breaks" do
136
+ product.description = %Q{
137
+ THIS IS THE BEST PRODUCT EVER!
138
+
139
+ "IT CHANGED MY LIFE" - Sue, MD}
140
+
141
+ description = product_description(product)
142
+ expect(description.strip).to eq(%Q{<p>\nTHIS IS THE BEST PRODUCT EVER!</p>"IT CHANGED MY LIFE" - Sue, MD})
143
+ end
144
+
145
+ it "renders a product description without any formatting based on configuration" do
146
+ initialDescription = %Q{
147
+ <p>hello world</p>
148
+
149
+ <p>tihs is completely awesome and it works</p>
150
+
151
+ <p>why so many spaces in the code. and why some more formatting afterwards?</p>
152
+ }
153
+
154
+ product.description = initialDescription
155
+
156
+ Spree::Config[:show_raw_product_description] = true
157
+ description = product_description(product)
158
+ expect(description).to eq(initialDescription)
159
+ end
160
+
161
+ end
162
+
163
+ shared_examples_for "line item descriptions" do
164
+ context 'variant has a blank description' do
165
+ let(:description) { nil }
166
+ it { is_expected.to eq(Spree.t(:product_has_no_description)) }
167
+ end
168
+ context 'variant has a description' do
169
+ let(:description) { 'test_desc' }
170
+ it { is_expected.to eq(description) }
171
+ end
172
+ context 'description has nonbreaking spaces' do
173
+ let(:description) { 'test&nbsp;desc' }
174
+ it { is_expected.to eq('test desc') }
175
+ end
176
+ end
177
+
178
+ context "#line_item_description" do
179
+ let(:variant) { create(:variant, :product => product, description: description) }
180
+ subject { line_item_description_text(variant.product.description) }
181
+
182
+ it_should_behave_like "line item descriptions"
183
+ end
184
+
185
+ context '#line_item_description_text' do
186
+ subject { line_item_description_text description }
187
+
188
+ it_should_behave_like "line item descriptions"
189
+ end
190
+
191
+ context '#cache_key_for_products' do
192
+ subject { helper.cache_key_for_products }
193
+ before(:each) do
194
+ @products = double('products collection')
195
+ allow(helper).to receive(:params) { {:page => 10} }
196
+ end
197
+
198
+ context 'when there is a maximum updated date' do
199
+ let(:updated_at) { Date.new(2011, 12, 13) }
200
+ before :each do
201
+ allow(@products).to receive(:count) { 5 }
202
+ allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
203
+ end
204
+
205
+ it { is_expected.to eq('en/USD/spree/products/all-10-20111213-5') }
206
+ end
207
+
208
+ context 'when there is no considered maximum updated date' do
209
+ let(:today) { Date.new(2013, 12, 11) }
210
+ before :each do
211
+ allow(@products).to receive(:count) { 1234567 }
212
+ allow(@products).to receive(:maximum).with(:updated_at) { nil }
213
+ allow(Date).to receive(:today) { today }
214
+ end
215
+
216
+ it { is_expected.to eq('en/USD/spree/products/all-10-20131211-1234567') }
217
+ end
218
+ end
219
+ end
220
+ end