spree_core 3.1.5 → 3.1.6

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/concerns/spree/ransackable_attributes.rb +6 -1
  3. data/app/models/concerns/spree/user_methods.rb +10 -0
  4. data/app/models/spree/legacy_user.rb +0 -8
  5. data/app/models/spree/order.rb +1 -1
  6. data/app/models/spree/product.rb +8 -0
  7. data/app/models/spree/product/scopes.rb +7 -3
  8. data/app/models/spree/stock_transfer.rb +1 -1
  9. data/config/locales/en.yml +2 -0
  10. data/lib/spree/core/version.rb +1 -1
  11. data/spree_core.gemspec +2 -2
  12. metadata +11 -208
  13. data/spec/fixtures/microdata.html +0 -22
  14. data/spec/fixtures/microdata_itemref.html +0 -15
  15. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  16. data/spec/fixtures/thinking-cat.jpg +0 -0
  17. data/spec/helpers/base_helper_spec.rb +0 -200
  18. data/spec/helpers/products_helper_spec.rb +0 -296
  19. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  20. data/spec/lib/i18n_spec.rb +0 -123
  21. data/spec/lib/search/base_spec.rb +0 -86
  22. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  23. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  24. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  25. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  26. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  27. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  28. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  29. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  30. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  31. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  32. data/spec/lib/spree/core_spec.rb +0 -23
  33. data/spec/lib/spree/localized_number_spec.rb +0 -48
  34. data/spec/lib/spree/migrations_spec.rb +0 -36
  35. data/spec/lib/spree/money_spec.rb +0 -122
  36. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  37. data/spec/mailers/order_mailer_spec.rb +0 -122
  38. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  39. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  40. data/spec/mailers/test_mailer_spec.rb +0 -38
  41. data/spec/models/option_type_prototype_spec.rb +0 -9
  42. data/spec/models/spree/ability_spec.rb +0 -251
  43. data/spec/models/spree/address_spec.rb +0 -291
  44. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  45. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  46. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  47. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  48. data/spec/models/spree/adjustment_spec.rb +0 -189
  49. data/spec/models/spree/app_configuration_spec.rb +0 -26
  50. data/spec/models/spree/asset_spec.rb +0 -28
  51. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  52. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  53. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  54. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  55. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  56. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  57. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -51
  58. data/spec/models/spree/calculator/shipping.rb +0 -8
  59. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  60. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  61. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  62. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  63. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  64. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  65. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  66. data/spec/models/spree/calculator_spec.rb +0 -69
  67. data/spec/models/spree/classification_spec.rb +0 -93
  68. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  69. data/spec/models/spree/concerns/user_methods_spec.rb +0 -55
  70. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  71. data/spec/models/spree/country_spec.rb +0 -55
  72. data/spec/models/spree/credit_card_spec.rb +0 -328
  73. data/spec/models/spree/customer_return_spec.rb +0 -240
  74. data/spec/models/spree/exchange_spec.rb +0 -75
  75. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  76. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  77. data/spec/models/spree/gateway_spec.rb +0 -61
  78. data/spec/models/spree/image_spec.rb +0 -8
  79. data/spec/models/spree/inventory_unit_spec.rb +0 -225
  80. data/spec/models/spree/line_item_spec.rb +0 -327
  81. data/spec/models/spree/option_type_spec.rb +0 -14
  82. data/spec/models/spree/option_value_spec.rb +0 -18
  83. data/spec/models/spree/order/address_spec.rb +0 -50
  84. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  85. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  86. data/spec/models/spree/order/checkout_spec.rb +0 -782
  87. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  88. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  89. data/spec/models/spree/order/helpers_spec.rb +0 -5
  90. data/spec/models/spree/order/payment_spec.rb +0 -214
  91. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  92. data/spec/models/spree/order/shipments_spec.rb +0 -43
  93. data/spec/models/spree/order/state_machine_spec.rb +0 -211
  94. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  95. data/spec/models/spree/order/tax_spec.rb +0 -84
  96. data/spec/models/spree/order/totals_spec.rb +0 -24
  97. data/spec/models/spree/order/updating_spec.rb +0 -18
  98. data/spec/models/spree/order/validations_spec.rb +0 -15
  99. data/spec/models/spree/order_contents_spec.rb +0 -297
  100. data/spec/models/spree/order_inventory_spec.rb +0 -238
  101. data/spec/models/spree/order_merger_spec.rb +0 -135
  102. data/spec/models/spree/order_spec.rb +0 -967
  103. data/spec/models/spree/order_updater_spec.rb +0 -305
  104. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  105. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  106. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  107. data/spec/models/spree/payment_method_spec.rb +0 -103
  108. data/spec/models/spree/payment_spec.rb +0 -919
  109. data/spec/models/spree/preference_spec.rb +0 -80
  110. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  111. data/spec/models/spree/preferences/preferable_spec.rb +0 -348
  112. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  113. data/spec/models/spree/preferences/store_spec.rb +0 -46
  114. data/spec/models/spree/price_spec.rb +0 -128
  115. data/spec/models/spree/product/scopes_spec.rb +0 -183
  116. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  117. data/spec/models/spree/product_filter_spec.rb +0 -26
  118. data/spec/models/spree/product_option_type_spec.rb +0 -9
  119. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  120. data/spec/models/spree/product_property_spec.rb +0 -22
  121. data/spec/models/spree/product_spec.rb +0 -540
  122. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -50
  123. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  124. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  125. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  126. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  127. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  128. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  129. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  130. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  131. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  132. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  133. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  134. data/spec/models/spree/promotion_action_spec.rb +0 -10
  135. data/spec/models/spree/promotion_category_spec.rb +0 -17
  136. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  137. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  138. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  139. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  140. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  141. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  142. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  143. data/spec/models/spree/promotion_spec.rb +0 -644
  144. data/spec/models/spree/property_prototype_spec.rb +0 -9
  145. data/spec/models/spree/property_spec.rb +0 -5
  146. data/spec/models/spree/prototype_spec.rb +0 -5
  147. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  148. data/spec/models/spree/refund_reason_spec.rb +0 -7
  149. data/spec/models/spree/refund_spec.rb +0 -195
  150. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  151. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  152. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  153. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  154. data/spec/models/spree/reimbursement_spec.rb +0 -188
  155. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  156. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  157. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  158. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  159. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  160. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  161. data/spec/models/spree/return_authorization_spec.rb +0 -230
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  170. data/spec/models/spree/return_item_spec.rb +0 -731
  171. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  172. data/spec/models/spree/role_spec.rb +0 -7
  173. data/spec/models/spree/shipment_spec.rb +0 -740
  174. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  175. data/spec/models/spree/shipping_category_spec.rb +0 -19
  176. data/spec/models/spree/shipping_method_spec.rb +0 -95
  177. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  178. data/spec/models/spree/state_spec.rb +0 -29
  179. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  180. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  181. data/spec/models/spree/stock/coordinator_spec.rb +0 -51
  182. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  183. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  184. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  185. data/spec/models/spree/stock/package_spec.rb +0 -194
  186. data/spec/models/spree/stock/packer_spec.rb +0 -70
  187. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  188. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  189. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  190. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  191. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  192. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  193. data/spec/models/spree/stock_item_spec.rb +0 -428
  194. data/spec/models/spree/stock_location_spec.rb +0 -243
  195. data/spec/models/spree/stock_movement_spec.rb +0 -56
  196. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  197. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  198. data/spec/models/spree/store_credit_spec.rb +0 -786
  199. data/spec/models/spree/store_spec.rb +0 -78
  200. data/spec/models/spree/tax_category_spec.rb +0 -32
  201. data/spec/models/spree/tax_rate_spec.rb +0 -542
  202. data/spec/models/spree/taxon_spec.rb +0 -74
  203. data/spec/models/spree/taxonomy_spec.rb +0 -18
  204. data/spec/models/spree/tracker_spec.rb +0 -21
  205. data/spec/models/spree/user_spec.rb +0 -203
  206. data/spec/models/spree/variant_spec.rb +0 -795
  207. data/spec/models/spree/zone_member_spec.rb +0 -38
  208. data/spec/models/spree/zone_spec.rb +0 -470
  209. data/spec/spec_helper.rb +0 -77
  210. data/spec/support/big_decimal.rb +0 -5
  211. data/spec/support/concerns/adjustment_source.rb +0 -23
  212. data/spec/support/concerns/default_price.rb +0 -37
  213. data/spec/support/rake.rb +0 -13
  214. data/spec/support/test_gateway.rb +0 -2
  215. data/spec/validators/db_maximum_length_validator_spec.rb +0 -22
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>itemref example from Microdata spec</title>
5
- </head>
6
- <body>
7
- <div itemscope id="amanda" itemref="a b"></div>
8
- <p id="a">Name: <span itemprop="name">Amanda</span></p>
9
- <div id="b" itemprop="band" itemscope itemref="c"></div>
10
- <div id="c">
11
- <p>Band: <span itemprop="name">Jazz Band</span></p>
12
- <p>Size: <span itemprop="size">12</span> players</p>
13
- </div>
14
- </body>
15
- </html>
@@ -1,20 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <title>Jason Ronallo</title>
5
- </head>
6
- <body>
7
- <span itemtype="http://schema.org/Person"
8
- itemid="http://ronallo.com#me">
9
- <a itemprop="url" href="http://twitter.com/ronallo">
10
- <span itemprop="name">Jason Ronallo</span>
11
- </a> is the
12
- <span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
13
- <span itemprop="affiliation" itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
14
- <span itemprop="name">
15
- <a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
16
- </span>
17
- </span>
18
- </span>
19
- </body>
20
- </html>
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,296 +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" do
187
- let(:variant) { create(:variant, :product => product, description: description) }
188
- subject { line_item_description_text(variant.product.description) }
189
-
190
- it_should_behave_like "line item descriptions"
191
- end
192
-
193
- context '#line_item_description_text' do
194
- subject { line_item_description_text description }
195
-
196
- it_should_behave_like "line item descriptions"
197
- end
198
-
199
- context '#cache_key_for_products' do
200
- let(:zone) { Spree::Zone.new }
201
- let(:price_options) { { tax_zone: zone } }
202
-
203
- subject { helper.cache_key_for_products }
204
- before(:each) do
205
- @products = double('products collection')
206
- allow(helper).to receive(:params) { {:page => 10} }
207
- allow(helper).to receive(:current_price_options) { price_options }
208
- end
209
-
210
- context 'when there is a maximum updated date' do
211
- let(:updated_at) { Date.new(2011, 12, 13) }
212
- before :each do
213
- allow(@products).to receive(:count) { 5 }
214
- allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
215
- end
216
-
217
- it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20111213-5") }
218
- end
219
-
220
- context 'when there is no considered maximum updated date' do
221
- let(:today) { Date.new(2013, 12, 11) }
222
- before :each do
223
- allow(@products).to receive(:count) { 1234567 }
224
- allow(@products).to receive(:maximum).with(:updated_at) { nil }
225
- allow(Date).to receive(:today) { today }
226
- end
227
-
228
- it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20131211-1234567") }
229
- end
230
- end
231
-
232
- context "#cache_key_for_product" do
233
- let(:product) { Spree::Product.new }
234
- let(:price_options) { { tax_zone: zone } }
235
-
236
- subject(:cache_key) { helper.cache_key_for_product(product) }
237
-
238
- before do
239
- allow(helper).to receive(:current_price_options) { price_options }
240
- end
241
-
242
- context "when there is a current tax zone" do
243
- let(:zone) { Spree::Zone.new }
244
-
245
- it "includes the current_tax_zone" do
246
- is_expected.to eq("en/USD/spree/zones/new/spree/products/new/")
247
- end
248
- end
249
-
250
- context "when there is no current tax zone" do
251
- let(:zone) { nil }
252
-
253
- it { is_expected.to eq("en/USD/spree/products/new/") }
254
- end
255
-
256
- context "when current_price_options includes nil values" do
257
- let(:price_options) do
258
- {
259
- a: nil,
260
- b: Spree::Zone.new
261
- }
262
- end
263
-
264
- it "does not include nil values" do
265
- expect(cache_key).to eq("en/USD/spree/zones/new/spree/products/new/")
266
- end
267
- end
268
-
269
- context "when current_price_options includes values that do not implement cache_key" do
270
- let(:price_options) do
271
- {
272
- a: true,
273
- b: Spree::Zone.new
274
- }
275
- end
276
-
277
- it "includes string representations of these values" do
278
- expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
279
- end
280
- end
281
-
282
- context "when keys in the options hash are inserted in non-alphabetical order" do
283
- let(:price_options) do
284
- {
285
- b: Spree::Zone.new,
286
- a: true
287
- }
288
- end
289
-
290
- it "the values are nevertheless returned in alphabetical order of their keys" do
291
- expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
292
- end
293
- end
294
- end
295
- end
296
- end