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.
Files changed (220) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/mailers/spree/base_mailer.rb +5 -0
  4. data/app/models/spree/ability.rb +4 -1
  5. data/app/models/spree/image.rb +6 -2
  6. data/app/models/spree/order.rb +10 -9
  7. data/app/models/spree/order/payments.rb +1 -1
  8. data/app/models/spree/payment_method/store_credit.rb +4 -0
  9. data/app/models/spree/shipment.rb +2 -0
  10. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
  11. data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
  12. data/config/routes.rb +0 -3
  13. data/lib/spree/core/components.rb +17 -0
  14. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  15. data/lib/spree/core/engine.rb +1 -0
  16. data/lib/spree/core/validators/email.rb +1 -5
  17. data/lib/spree/core/version.rb +1 -1
  18. data/spree_core.gemspec +1 -1
  19. metadata +4 -204
  20. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
  21. data/spec/fixtures/thinking-cat.jpg +0 -0
  22. data/spec/helpers/base_helper_spec.rb +0 -200
  23. data/spec/helpers/products_helper_spec.rb +0 -289
  24. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  25. data/spec/lib/i18n_spec.rb +0 -123
  26. data/spec/lib/search/base_spec.rb +0 -86
  27. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  28. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  29. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  30. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  31. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  32. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  33. data/spec/lib/spree/core/importer/order_spec.rb +0 -607
  34. data/spec/lib/spree/core/number_generator_spec.rb +0 -139
  35. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  36. data/spec/lib/spree/core/validators/email_spec.rb +0 -54
  37. data/spec/lib/spree/core_spec.rb +0 -23
  38. data/spec/lib/spree/localized_number_spec.rb +0 -54
  39. data/spec/lib/spree/migrations_spec.rb +0 -36
  40. data/spec/lib/spree/money_spec.rb +0 -122
  41. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  42. data/spec/mailers/order_mailer_spec.rb +0 -122
  43. data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
  44. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  45. data/spec/mailers/test_mailer_spec.rb +0 -38
  46. data/spec/models/spree/ability_spec.rb +0 -251
  47. data/spec/models/spree/address_spec.rb +0 -402
  48. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  49. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  50. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  51. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  52. data/spec/models/spree/adjustment_spec.rb +0 -189
  53. data/spec/models/spree/app_configuration_spec.rb +0 -26
  54. data/spec/models/spree/asset_spec.rb +0 -28
  55. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  56. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  57. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  58. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  59. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  60. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  61. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  62. data/spec/models/spree/calculator/shipping.rb +0 -8
  63. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  64. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  65. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  66. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  67. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  68. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  69. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  70. data/spec/models/spree/calculator_spec.rb +0 -69
  71. data/spec/models/spree/classification_spec.rb +0 -93
  72. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  73. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  74. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  75. data/spec/models/spree/country_spec.rb +0 -55
  76. data/spec/models/spree/credit_card_spec.rb +0 -328
  77. data/spec/models/spree/customer_return_spec.rb +0 -240
  78. data/spec/models/spree/exchange_spec.rb +0 -75
  79. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  80. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  81. data/spec/models/spree/gateway_spec.rb +0 -61
  82. data/spec/models/spree/image_spec.rb +0 -8
  83. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  84. data/spec/models/spree/line_item_spec.rb +0 -348
  85. data/spec/models/spree/option_type_prototype_spec.rb +0 -9
  86. data/spec/models/spree/option_type_spec.rb +0 -14
  87. data/spec/models/spree/option_value_spec.rb +0 -18
  88. data/spec/models/spree/order/address_spec.rb +0 -50
  89. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  90. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  91. data/spec/models/spree/order/checkout_spec.rb +0 -770
  92. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  93. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  94. data/spec/models/spree/order/helpers_spec.rb +0 -5
  95. data/spec/models/spree/order/payment_spec.rb +0 -214
  96. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  97. data/spec/models/spree/order/shipments_spec.rb +0 -43
  98. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  99. data/spec/models/spree/order/store_credit_spec.rb +0 -457
  100. data/spec/models/spree/order/tax_spec.rb +0 -84
  101. data/spec/models/spree/order/totals_spec.rb +0 -24
  102. data/spec/models/spree/order/updating_spec.rb +0 -18
  103. data/spec/models/spree/order/validations_spec.rb +0 -15
  104. data/spec/models/spree/order_contents_spec.rb +0 -332
  105. data/spec/models/spree/order_inventory_spec.rb +0 -247
  106. data/spec/models/spree/order_merger_spec.rb +0 -135
  107. data/spec/models/spree/order_spec.rb +0 -1067
  108. data/spec/models/spree/order_updater_spec.rb +0 -305
  109. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  110. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  111. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  112. data/spec/models/spree/payment_method_spec.rb +0 -108
  113. data/spec/models/spree/payment_spec.rb +0 -922
  114. data/spec/models/spree/preference_spec.rb +0 -80
  115. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  116. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  118. data/spec/models/spree/preferences/store_spec.rb +0 -46
  119. data/spec/models/spree/price_spec.rb +0 -128
  120. data/spec/models/spree/product/scopes_spec.rb +0 -174
  121. data/spec/models/spree/product_duplicator_spec.rb +0 -102
  122. data/spec/models/spree/product_filter_spec.rb +0 -26
  123. data/spec/models/spree/product_option_type_spec.rb +0 -9
  124. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  125. data/spec/models/spree/product_property_spec.rb +0 -26
  126. data/spec/models/spree/product_spec.rb +0 -626
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  129. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  131. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  132. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  133. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  136. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  139. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  140. data/spec/models/spree/promotion_action_spec.rb +0 -10
  141. data/spec/models/spree/promotion_category_spec.rb +0 -17
  142. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  143. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  144. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  145. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  146. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  147. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  148. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  149. data/spec/models/spree/promotion_spec.rb +0 -674
  150. data/spec/models/spree/property_prototype_spec.rb +0 -9
  151. data/spec/models/spree/property_spec.rb +0 -5
  152. data/spec/models/spree/prototype_spec.rb +0 -5
  153. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  154. data/spec/models/spree/refund_reason_spec.rb +0 -20
  155. data/spec/models/spree/refund_spec.rb +0 -195
  156. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  157. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  158. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  159. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  160. data/spec/models/spree/reimbursement_spec.rb +0 -188
  161. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  162. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  163. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  164. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  165. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  166. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  167. data/spec/models/spree/return_authorization_spec.rb +0 -230
  168. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  169. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  170. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  171. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  172. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  173. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  174. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  175. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  176. data/spec/models/spree/return_item_spec.rb +0 -734
  177. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  178. data/spec/models/spree/role_spec.rb +0 -7
  179. data/spec/models/spree/shipment_spec.rb +0 -744
  180. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  181. data/spec/models/spree/shipping_category_spec.rb +0 -19
  182. data/spec/models/spree/shipping_method_spec.rb +0 -125
  183. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  184. data/spec/models/spree/state_spec.rb +0 -29
  185. data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
  186. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  187. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  188. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  189. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  190. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
  191. data/spec/models/spree/stock/package_spec.rb +0 -182
  192. data/spec/models/spree/stock/packer_spec.rb +0 -70
  193. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  194. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  195. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  196. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  197. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  198. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  199. data/spec/models/spree/stock_item_spec.rb +0 -465
  200. data/spec/models/spree/stock_location_spec.rb +0 -243
  201. data/spec/models/spree/stock_movement_spec.rb +0 -120
  202. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  203. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  204. data/spec/models/spree/store_credit_spec.rb +0 -798
  205. data/spec/models/spree/store_spec.rb +0 -78
  206. data/spec/models/spree/tax_category_spec.rb +0 -32
  207. data/spec/models/spree/tax_rate_spec.rb +0 -561
  208. data/spec/models/spree/taxon_spec.rb +0 -93
  209. data/spec/models/spree/taxonomy_spec.rb +0 -18
  210. data/spec/models/spree/tracker_spec.rb +0 -21
  211. data/spec/models/spree/user_spec.rb +0 -203
  212. data/spec/models/spree/variant_spec.rb +0 -818
  213. data/spec/models/spree/zone_member_spec.rb +0 -38
  214. data/spec/models/spree/zone_spec.rb +0 -472
  215. data/spec/spec_helper.rb +0 -82
  216. data/spec/support/big_decimal.rb +0 -5
  217. data/spec/support/concerns/adjustment_source.rb +0 -23
  218. data/spec/support/concerns/default_price.rb +0 -37
  219. data/spec/support/rake.rb +0 -13
  220. data/spec/support/test_gateway.rb +0 -2
@@ -1,6 +0,0 @@
1
- Shoulda::Matchers.configure do |config|
2
- config.integrate do |with|
3
- with.test_framework :rspec
4
- with.library :rails
5
- end
6
- end
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: &#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
- 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&nbsp;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