spree_core 3.3.0.rc1 → 3.3.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +1 -1
- data/app/mailers/spree/base_mailer.rb +5 -0
- data/app/models/spree/ability.rb +4 -1
- data/app/models/spree/image.rb +6 -2
- data/app/models/spree/order.rb +10 -9
- data/app/models/spree/order/payments.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +4 -0
- data/app/models/spree/shipment.rb +2 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
- data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
- data/config/routes.rb +0 -3
- data/lib/spree/core/components.rb +17 -0
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/engine.rb +1 -0
- data/lib/spree/core/validators/email.rb +1 -5
- data/lib/spree/core/version.rb +1 -1
- data/spree_core.gemspec +1 -1
- metadata +4 -204
- data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -200
- data/spec/helpers/products_helper_spec.rb +0 -289
- data/spec/lib/calculated_adjustments_spec.rb +0 -7
- data/spec/lib/i18n_spec.rb +0 -123
- data/spec/lib/search/base_spec.rb +0 -86
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
- data/spec/lib/spree/core/importer/order_spec.rb +0 -607
- data/spec/lib/spree/core/number_generator_spec.rb +0 -139
- data/spec/lib/spree/core/token_generator_spec.rb +0 -24
- data/spec/lib/spree/core/validators/email_spec.rb +0 -54
- data/spec/lib/spree/core_spec.rb +0 -23
- data/spec/lib/spree/localized_number_spec.rb +0 -54
- data/spec/lib/spree/migrations_spec.rb +0 -36
- data/spec/lib/spree/money_spec.rb +0 -122
- data/spec/lib/tasks/exchanges_spec.rb +0 -136
- data/spec/mailers/order_mailer_spec.rb +0 -122
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
- data/spec/mailers/shipment_mailer_spec.rb +0 -81
- data/spec/mailers/test_mailer_spec.rb +0 -38
- data/spec/models/spree/ability_spec.rb +0 -251
- data/spec/models/spree/address_spec.rb +0 -402
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
- data/spec/models/spree/adjustment_spec.rb +0 -189
- data/spec/models/spree/app_configuration_spec.rb +0 -26
- data/spec/models/spree/asset_spec.rb +0 -28
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
- data/spec/models/spree/calculator/shipping.rb +0 -8
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
- data/spec/models/spree/calculator_spec.rb +0 -69
- data/spec/models/spree/classification_spec.rb +0 -93
- data/spec/models/spree/concerns/display_money_spec.rb +0 -43
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
- data/spec/models/spree/country_spec.rb +0 -55
- data/spec/models/spree/credit_card_spec.rb +0 -328
- data/spec/models/spree/customer_return_spec.rb +0 -240
- data/spec/models/spree/exchange_spec.rb +0 -75
- data/spec/models/spree/gateway/bogus_simple.rb +0 -20
- data/spec/models/spree/gateway/bogus_spec.rb +0 -13
- data/spec/models/spree/gateway_spec.rb +0 -61
- data/spec/models/spree/image_spec.rb +0 -8
- data/spec/models/spree/inventory_unit_spec.rb +0 -256
- data/spec/models/spree/line_item_spec.rb +0 -348
- data/spec/models/spree/option_type_prototype_spec.rb +0 -9
- data/spec/models/spree/option_type_spec.rb +0 -14
- data/spec/models/spree/option_value_spec.rb +0 -18
- data/spec/models/spree/order/address_spec.rb +0 -50
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -42
- data/spec/models/spree/order/checkout_spec.rb +0 -770
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
- data/spec/models/spree/order/finalizing_spec.rb +0 -114
- data/spec/models/spree/order/helpers_spec.rb +0 -5
- data/spec/models/spree/order/payment_spec.rb +0 -214
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
- data/spec/models/spree/order/shipments_spec.rb +0 -43
- data/spec/models/spree/order/state_machine_spec.rb +0 -212
- data/spec/models/spree/order/store_credit_spec.rb +0 -457
- data/spec/models/spree/order/tax_spec.rb +0 -84
- data/spec/models/spree/order/totals_spec.rb +0 -24
- data/spec/models/spree/order/updating_spec.rb +0 -18
- data/spec/models/spree/order/validations_spec.rb +0 -15
- data/spec/models/spree/order_contents_spec.rb +0 -332
- data/spec/models/spree/order_inventory_spec.rb +0 -247
- data/spec/models/spree/order_merger_spec.rb +0 -135
- data/spec/models/spree/order_spec.rb +0 -1067
- data/spec/models/spree/order_updater_spec.rb +0 -305
- data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
- data/spec/models/spree/payment/store_credit_spec.rb +0 -60
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
- data/spec/models/spree/payment_method_spec.rb +0 -108
- data/spec/models/spree/payment_spec.rb +0 -922
- data/spec/models/spree/preference_spec.rb +0 -80
- data/spec/models/spree/preferences/configuration_spec.rb +0 -30
- data/spec/models/spree/preferences/preferable_spec.rb +0 -344
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
- data/spec/models/spree/preferences/store_spec.rb +0 -46
- data/spec/models/spree/price_spec.rb +0 -128
- data/spec/models/spree/product/scopes_spec.rb +0 -174
- data/spec/models/spree/product_duplicator_spec.rb +0 -102
- data/spec/models/spree/product_filter_spec.rb +0 -26
- data/spec/models/spree/product_option_type_spec.rb +0 -9
- data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
- data/spec/models/spree/product_property_spec.rb +0 -26
- data/spec/models/spree/product_spec.rb +0 -626
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
- data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
- data/spec/models/spree/promotion_action_spec.rb +0 -10
- data/spec/models/spree/promotion_category_spec.rb +0 -17
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
- data/spec/models/spree/promotion_rule_spec.rb +0 -29
- data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
- data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
- data/spec/models/spree/promotion_spec.rb +0 -674
- data/spec/models/spree/property_prototype_spec.rb +0 -9
- data/spec/models/spree/property_spec.rb +0 -5
- data/spec/models/spree/prototype_spec.rb +0 -5
- data/spec/models/spree/prototype_taxon_spec.rb +0 -9
- data/spec/models/spree/refund_reason_spec.rb +0 -20
- data/spec/models/spree/refund_spec.rb +0 -195
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
- data/spec/models/spree/reimbursement_spec.rb +0 -188
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
- data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
- data/spec/models/spree/return_authorization_spec.rb +0 -230
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -734
- data/spec/models/spree/returns_calculator_spec.rb +0 -14
- data/spec/models/spree/role_spec.rb +0 -7
- data/spec/models/spree/shipment_spec.rb +0 -744
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_category_spec.rb +0 -19
- data/spec/models/spree/shipping_method_spec.rb +0 -125
- data/spec/models/spree/shipping_rate_spec.rb +0 -140
- data/spec/models/spree/state_spec.rb +0 -29
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
- data/spec/models/spree/stock/content_item_spec.rb +0 -31
- data/spec/models/spree/stock/coordinator_spec.rb +0 -61
- data/spec/models/spree/stock/differentiator_spec.rb +0 -39
- data/spec/models/spree/stock/estimator_spec.rb +0 -202
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/packer_spec.rb +0 -70
- data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
- data/spec/models/spree/stock/quantifier_spec.rb +0 -126
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
- data/spec/models/spree/stock_item_spec.rb +0 -465
- data/spec/models/spree/stock_location_spec.rb +0 -243
- data/spec/models/spree/stock_movement_spec.rb +0 -120
- data/spec/models/spree/stock_transfer_spec.rb +0 -50
- data/spec/models/spree/store_credit_event_spec.rb +0 -101
- data/spec/models/spree/store_credit_spec.rb +0 -798
- data/spec/models/spree/store_spec.rb +0 -78
- data/spec/models/spree/tax_category_spec.rb +0 -32
- data/spec/models/spree/tax_rate_spec.rb +0 -561
- data/spec/models/spree/taxon_spec.rb +0 -93
- data/spec/models/spree/taxonomy_spec.rb +0 -18
- data/spec/models/spree/tracker_spec.rb +0 -21
- data/spec/models/spree/user_spec.rb +0 -203
- data/spec/models/spree/variant_spec.rb +0 -818
- data/spec/models/spree/zone_member_spec.rb +0 -38
- data/spec/models/spree/zone_spec.rb +0 -472
- data/spec/spec_helper.rb +0 -82
- data/spec/support/big_decimal.rb +0 -5
- data/spec/support/concerns/adjustment_source.rb +0 -23
- data/spec/support/concerns/default_price.rb +0 -37
- data/spec/support/rake.rb +0 -13
- data/spec/support/test_gateway.rb +0 -2
Binary file
|
@@ -1,200 +0,0 @@
|
|
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
|
-
expect { very_strange_image(product) }.not_to raise_error
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should raise NoMethodError when style is not exists" do
|
67
|
-
expect { another_strange_image(product) }.to raise_error(NoMethodError)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context "link_to_tracking" do
|
72
|
-
it "returns tracking link if available" do
|
73
|
-
a = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: 'http://g.c/?t=123').css('a')
|
74
|
-
|
75
|
-
expect(a.text).to eq '123'
|
76
|
-
expect(a.attr('href').value).to eq 'http://g.c/?t=123'
|
77
|
-
end
|
78
|
-
|
79
|
-
it "returns tracking without link if link unavailable" do
|
80
|
-
html = link_to_tracking_html(shipping_method: true, tracking: '123', tracking_url: nil)
|
81
|
-
expect(html.css('span').text).to eq '123'
|
82
|
-
end
|
83
|
-
|
84
|
-
it "returns nothing when no shipping method" do
|
85
|
-
html = link_to_tracking_html(shipping_method: nil, tracking: '123')
|
86
|
-
expect(html.css('span').text).to eq ''
|
87
|
-
end
|
88
|
-
|
89
|
-
it "returns nothing when no tracking" do
|
90
|
-
html = link_to_tracking_html(tracking: nil)
|
91
|
-
expect(html.css('span').text).to eq ''
|
92
|
-
end
|
93
|
-
|
94
|
-
def link_to_tracking_html(options = {})
|
95
|
-
node = link_to_tracking(double(:shipment, options))
|
96
|
-
Nokogiri::HTML(node.to_s)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
# Regression test for #2396
|
101
|
-
context "meta_data_tags" do
|
102
|
-
it "truncates a product description to 160 characters" do
|
103
|
-
# Because the controller_name method returns "test"
|
104
|
-
# controller_name is used by this method to infer what it is supposed
|
105
|
-
# to be generating meta_data_tags for
|
106
|
-
text = FFaker::Lorem.paragraphs(2).join(" ")
|
107
|
-
@test = Spree::Product.new(description: text)
|
108
|
-
tags = Nokogiri::HTML.parse(meta_data_tags)
|
109
|
-
content = tags.css("meta[name=description]").first["content"]
|
110
|
-
assert content.length <= 160, "content length is not truncated to 160 characters"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
# Regression test for #5384
|
115
|
-
context "custom image helpers conflict with inproper statements" do
|
116
|
-
let(:product) { mock_model(Spree::Product, images: [], variant_images: []) }
|
117
|
-
before do
|
118
|
-
Spree::Image.class_eval do
|
119
|
-
attachment_definitions[:attachment][:styles].merge!({foobar: '1x1'})
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should not raise errors when helper method called" do
|
124
|
-
expect { foobar_image(product) }.not_to raise_error
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should raise NoMethodError when statement with name equal to style name called" do
|
128
|
-
expect { foobar(product) }.to raise_error(NoMethodError)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context "pretty_time" do
|
133
|
-
it "prints in a format" do
|
134
|
-
expect(pretty_time(DateTime.new(2012, 5, 6, 13, 33))).to eq "May 06, 2012 1:33 PM"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe "#display_price" do
|
139
|
-
let!(:product) { create(:product) }
|
140
|
-
let(:current_currency) { "USD" }
|
141
|
-
let(:current_price_options) { { tax_zone: current_tax_zone } }
|
142
|
-
|
143
|
-
context "when there is no current order" do
|
144
|
-
let (:current_tax_zone) { nil }
|
145
|
-
|
146
|
-
it "returns the price including default vat" do
|
147
|
-
expect(display_price(product)).to eq("$19.99")
|
148
|
-
end
|
149
|
-
|
150
|
-
context "with a default VAT" do
|
151
|
-
let(:current_tax_zone) { create(:zone_with_country, default_tax: true) }
|
152
|
-
let!(:tax_rate) do
|
153
|
-
create :tax_rate,
|
154
|
-
included_in_price: true,
|
155
|
-
zone: current_tax_zone,
|
156
|
-
tax_category: product.tax_category,
|
157
|
-
amount: 0.2
|
158
|
-
end
|
159
|
-
|
160
|
-
it "returns the price adding the VAT" do
|
161
|
-
expect(display_price(product)).to eq("$19.99")
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context "with an order that has a tax zone" do
|
167
|
-
let(:current_tax_zone) { create(:zone_with_country) }
|
168
|
-
let(:current_order) { Spree::Order.new }
|
169
|
-
let(:default_zone) { create(:zone_with_country, default_tax: true) }
|
170
|
-
|
171
|
-
let!(:default_vat) do
|
172
|
-
create :tax_rate,
|
173
|
-
included_in_price: true,
|
174
|
-
zone: default_zone,
|
175
|
-
tax_category: product.tax_category,
|
176
|
-
amount: 0.2
|
177
|
-
end
|
178
|
-
|
179
|
-
context "that matches no VAT" do
|
180
|
-
it "returns the price excluding VAT" do
|
181
|
-
expect(display_price(product)).to eq("$16.66")
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "that matches a VAT" do
|
186
|
-
let!(:other_vat) do
|
187
|
-
create :tax_rate,
|
188
|
-
included_in_price: true,
|
189
|
-
zone: current_tax_zone,
|
190
|
-
tax_category: product.tax_category,
|
191
|
-
amount: 0.4
|
192
|
-
end
|
193
|
-
|
194
|
-
it "returns the price adding the VAT" do
|
195
|
-
expect(display_price(product)).to eq("$23.32")
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
@@ -1,289 +0,0 @@
|
|
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: ¥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: ¥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("¥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
|
-
context "renders a product description default description incase description is blank" do
|
162
|
-
before { product.description = '' }
|
163
|
-
it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
shared_examples_for "line item descriptions" do
|
168
|
-
context 'variant has a blank description' do
|
169
|
-
let(:description) { nil }
|
170
|
-
it { is_expected.to eq(Spree.t(:product_has_no_description)) }
|
171
|
-
end
|
172
|
-
context 'variant has a description' do
|
173
|
-
let(:description) { 'test_desc' }
|
174
|
-
it { is_expected.to eq(description) }
|
175
|
-
end
|
176
|
-
context 'description has nonbreaking spaces' do
|
177
|
-
let(:description) { 'test desc' }
|
178
|
-
it { is_expected.to eq('test desc') }
|
179
|
-
end
|
180
|
-
context 'description has line endings' do
|
181
|
-
let(:description) { "test\n\r\ndesc" }
|
182
|
-
it { is_expected.to eq('test desc') }
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context '#line_item_description_text' do
|
187
|
-
subject { line_item_description_text description }
|
188
|
-
|
189
|
-
it_should_behave_like "line item descriptions"
|
190
|
-
end
|
191
|
-
|
192
|
-
context '#cache_key_for_products' do
|
193
|
-
let(:zone) { Spree::Zone.new }
|
194
|
-
let(:price_options) { { tax_zone: zone } }
|
195
|
-
|
196
|
-
subject { helper.cache_key_for_products }
|
197
|
-
before(:each) do
|
198
|
-
@products = double('products collection')
|
199
|
-
allow(helper).to receive(:params) { {page: 10} }
|
200
|
-
allow(helper).to receive(:current_price_options) { price_options }
|
201
|
-
end
|
202
|
-
|
203
|
-
context 'when there is a maximum updated date' do
|
204
|
-
let(:updated_at) { Date.new(2011, 12, 13) }
|
205
|
-
before :each do
|
206
|
-
allow(@products).to receive(:count) { 5 }
|
207
|
-
allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
|
208
|
-
end
|
209
|
-
|
210
|
-
it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20111213-5") }
|
211
|
-
end
|
212
|
-
|
213
|
-
context 'when there is no considered maximum updated date' do
|
214
|
-
let(:today) { Date.new(2013, 12, 11) }
|
215
|
-
before :each do
|
216
|
-
allow(@products).to receive(:count) { 1234567 }
|
217
|
-
allow(@products).to receive(:maximum).with(:updated_at) { nil }
|
218
|
-
allow(Date).to receive(:today) { today }
|
219
|
-
end
|
220
|
-
|
221
|
-
it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20131211-1234567") }
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
context "#cache_key_for_product" do
|
226
|
-
let(:product) { Spree::Product.new }
|
227
|
-
let(:price_options) { { tax_zone: zone } }
|
228
|
-
|
229
|
-
subject(:cache_key) { helper.cache_key_for_product(product) }
|
230
|
-
|
231
|
-
before do
|
232
|
-
allow(helper).to receive(:current_price_options) { price_options }
|
233
|
-
end
|
234
|
-
|
235
|
-
context "when there is a current tax zone" do
|
236
|
-
let(:zone) { Spree::Zone.new }
|
237
|
-
|
238
|
-
it "includes the current_tax_zone" do
|
239
|
-
is_expected.to eq("en/USD/spree/zones/new/spree/products/new/")
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
context "when there is no current tax zone" do
|
244
|
-
let(:zone) { nil }
|
245
|
-
|
246
|
-
it { is_expected.to eq("en/USD/spree/products/new/") }
|
247
|
-
end
|
248
|
-
|
249
|
-
context "when current_price_options includes nil values" do
|
250
|
-
let(:price_options) do
|
251
|
-
{
|
252
|
-
a: nil,
|
253
|
-
b: Spree::Zone.new
|
254
|
-
}
|
255
|
-
end
|
256
|
-
|
257
|
-
it "does not include nil values" do
|
258
|
-
expect(cache_key).to eq("en/USD/spree/zones/new/spree/products/new/")
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
context "when current_price_options includes values that do not implement cache_key" do
|
263
|
-
let(:price_options) do
|
264
|
-
{
|
265
|
-
a: true,
|
266
|
-
b: Spree::Zone.new
|
267
|
-
}
|
268
|
-
end
|
269
|
-
|
270
|
-
it "includes string representations of these values" do
|
271
|
-
expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
context "when keys in the options hash are inserted in non-alphabetical order" do
|
276
|
-
let(:price_options) do
|
277
|
-
{
|
278
|
-
b: Spree::Zone.new,
|
279
|
-
a: true
|
280
|
-
}
|
281
|
-
end
|
282
|
-
|
283
|
-
it "the values are nevertheless returned in alphabetical order of their keys" do
|
284
|
-
expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
|
285
|
-
end
|
286
|
-
end
|
287
|
-
end
|
288
|
-
end
|
289
|
-
end
|