spree_core 3.0.5 → 3.0.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 (194) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +3 -0
  4. data/Rakefile +30 -0
  5. data/app/assets/javascripts/spree.js.coffee.erb +1 -1
  6. data/app/models/spree/ability.rb +1 -1
  7. data/app/models/spree/base.rb +3 -1
  8. data/app/models/spree/order_updater.rb +2 -1
  9. data/app/models/spree/price.rb +7 -12
  10. data/app/models/spree/product.rb +3 -2
  11. data/app/models/spree/reimbursement.rb +1 -1
  12. data/app/models/spree/state.rb +2 -0
  13. data/app/models/spree/zone.rb +1 -1
  14. data/lib/spree/core/version.rb +1 -1
  15. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +6 -0
  16. data/script/rails +9 -0
  17. data/spec/fixtures/thinking-cat.jpg +0 -0
  18. data/spec/helpers/base_helper_spec.rb +137 -0
  19. data/spec/helpers/products_helper_spec.rb +224 -0
  20. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  21. data/spec/lib/i18n_spec.rb +123 -0
  22. data/spec/lib/search/base_spec.rb +86 -0
  23. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +101 -0
  24. data/spec/lib/spree/core/controller_helpers/order_spec.rb +95 -0
  25. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  26. data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
  27. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  28. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  29. data/spec/lib/spree/core/importer/order_spec.rb +502 -0
  30. data/spec/lib/spree/core/validators/email_spec.rb +53 -0
  31. data/spec/lib/spree/localized_number_spec.rb +38 -0
  32. data/spec/lib/spree/migrations_spec.rb +34 -0
  33. data/spec/lib/spree/money_spec.rb +122 -0
  34. data/spec/lib/tasks/exchanges_spec.rb +136 -0
  35. data/spec/mailers/order_mailer_spec.rb +124 -0
  36. data/spec/mailers/reimbursement_mailer_spec.rb +47 -0
  37. data/spec/mailers/shipment_mailer_spec.rb +63 -0
  38. data/spec/mailers/test_mailer_spec.rb +24 -0
  39. data/spec/models/spree/ability_spec.rb +246 -0
  40. data/spec/models/spree/address_spec.rb +291 -0
  41. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +286 -0
  42. data/spec/models/spree/adjustment_spec.rb +163 -0
  43. data/spec/models/spree/app_configuration_spec.rb +23 -0
  44. data/spec/models/spree/asset_spec.rb +25 -0
  45. data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
  46. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  47. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  48. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  49. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  50. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  51. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
  52. data/spec/models/spree/calculator/shipping.rb +8 -0
  53. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  54. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  55. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  56. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  57. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +29 -0
  58. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +40 -0
  59. data/spec/models/spree/calculator/tiered_percent_spec.rb +51 -0
  60. data/spec/models/spree/calculator_spec.rb +69 -0
  61. data/spec/models/spree/classification_spec.rb +93 -0
  62. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  63. data/spec/models/spree/country_spec.rb +18 -0
  64. data/spec/models/spree/credit_card_spec.rb +324 -0
  65. data/spec/models/spree/customer_return_spec.rb +262 -0
  66. data/spec/models/spree/exchange_spec.rb +75 -0
  67. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  68. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  69. data/spec/models/spree/gateway_spec.rb +54 -0
  70. data/spec/models/spree/image_spec.rb +5 -0
  71. data/spec/models/spree/inventory_unit_spec.rb +242 -0
  72. data/spec/models/spree/line_item_spec.rb +267 -0
  73. data/spec/models/spree/option_type_spec.rb +14 -0
  74. data/spec/models/spree/option_value_spec.rb +13 -0
  75. data/spec/models/spree/order/address_spec.rb +50 -0
  76. data/spec/models/spree/order/adjustments_spec.rb +29 -0
  77. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  78. data/spec/models/spree/order/checkout_spec.rb +764 -0
  79. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  80. data/spec/models/spree/order/finalizing_spec.rb +117 -0
  81. data/spec/models/spree/order/helpers_spec.rb +5 -0
  82. data/spec/models/spree/order/payment_spec.rb +214 -0
  83. data/spec/models/spree/order/risk_assessment_spec.rb +84 -0
  84. data/spec/models/spree/order/shipments_spec.rb +43 -0
  85. data/spec/models/spree/order/state_machine_spec.rb +216 -0
  86. data/spec/models/spree/order/tax_spec.rb +84 -0
  87. data/spec/models/spree/order/totals_spec.rb +24 -0
  88. data/spec/models/spree/order/updating_spec.rb +18 -0
  89. data/spec/models/spree/order/validations_spec.rb +15 -0
  90. data/spec/models/spree/order_contents_spec.rb +256 -0
  91. data/spec/models/spree/order_inventory_spec.rb +228 -0
  92. data/spec/models/spree/order_merger_spec.rb +133 -0
  93. data/spec/models/spree/order_spec.rb +954 -0
  94. data/spec/models/spree/order_updater_spec.rb +283 -0
  95. data/spec/models/spree/payment/gateway_options_spec.rb +119 -0
  96. data/spec/models/spree/payment_method_spec.rb +95 -0
  97. data/spec/models/spree/payment_spec.rb +926 -0
  98. data/spec/models/spree/preference_spec.rb +80 -0
  99. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  100. data/spec/models/spree/preferences/preferable_spec.rb +348 -0
  101. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  102. data/spec/models/spree/preferences/store_spec.rb +46 -0
  103. data/spec/models/spree/price_spec.rb +42 -0
  104. data/spec/models/spree/product/scopes_spec.rb +148 -0
  105. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  106. data/spec/models/spree/product_filter_spec.rb +26 -0
  107. data/spec/models/spree/product_option_type_spec.rb +5 -0
  108. data/spec/models/spree/product_property_spec.rb +11 -0
  109. data/spec/models/spree/product_spec.rb +474 -0
  110. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +50 -0
  111. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +148 -0
  112. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +86 -0
  113. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +36 -0
  114. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  115. data/spec/models/spree/promotion/rules/item_total_spec.rb +282 -0
  116. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  117. data/spec/models/spree/promotion/rules/option_value_spec.rb +90 -0
  118. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  119. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  120. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  121. data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
  122. data/spec/models/spree/promotion_action_spec.rb +10 -0
  123. data/spec/models/spree/promotion_category_spec.rb +17 -0
  124. data/spec/models/spree/promotion_handler/cart_spec.rb +102 -0
  125. data/spec/models/spree/promotion_handler/coupon_spec.rb +323 -0
  126. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +48 -0
  127. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  128. data/spec/models/spree/promotion_rule_spec.rb +29 -0
  129. data/spec/models/spree/promotion_spec.rb +603 -0
  130. data/spec/models/spree/property_spec.rb +5 -0
  131. data/spec/models/spree/prototype_spec.rb +5 -0
  132. data/spec/models/spree/refund_spec.rb +195 -0
  133. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  134. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  135. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  136. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  137. data/spec/models/spree/reimbursement_spec.rb +215 -0
  138. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
  139. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  140. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  141. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +55 -0
  142. data/spec/models/spree/return_authorization_spec.rb +250 -0
  143. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  144. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  145. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +61 -0
  146. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  147. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  148. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  149. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  150. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  151. data/spec/models/spree/return_item_spec.rb +682 -0
  152. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  153. data/spec/models/spree/shipment_spec.rb +740 -0
  154. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  155. data/spec/models/spree/shipping_category_spec.rb +5 -0
  156. data/spec/models/spree/shipping_method_spec.rb +88 -0
  157. data/spec/models/spree/shipping_rate_spec.rb +141 -0
  158. data/spec/models/spree/state_spec.rb +18 -0
  159. data/spec/models/spree/stock/availability_validator_spec.rb +36 -0
  160. data/spec/models/spree/stock/content_item_spec.rb +22 -0
  161. data/spec/models/spree/stock/coordinator_spec.rb +51 -0
  162. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  163. data/spec/models/spree/stock/estimator_spec.rb +154 -0
  164. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  165. data/spec/models/spree/stock/package_spec.rb +194 -0
  166. data/spec/models/spree/stock/packer_spec.rb +70 -0
  167. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  168. data/spec/models/spree/stock/quantifier_spec.rb +97 -0
  169. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  170. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  171. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +47 -0
  172. data/spec/models/spree/stock/splitter/weight_spec.rb +32 -0
  173. data/spec/models/spree/stock_item_spec.rb +410 -0
  174. data/spec/models/spree/stock_location_spec.rb +243 -0
  175. data/spec/models/spree/stock_movement_spec.rb +56 -0
  176. data/spec/models/spree/stock_transfer_spec.rb +50 -0
  177. data/spec/models/spree/store_spec.rb +50 -0
  178. data/spec/models/spree/tax_category_spec.rb +27 -0
  179. data/spec/models/spree/tax_rate_spec.rb +382 -0
  180. data/spec/models/spree/taxon_spec.rb +74 -0
  181. data/spec/models/spree/taxonomy_spec.rb +18 -0
  182. data/spec/models/spree/tracker_spec.rb +21 -0
  183. data/spec/models/spree/user_spec.rb +130 -0
  184. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +24 -0
  185. data/spec/models/spree/variant_spec.rb +523 -0
  186. data/spec/models/spree/zone_spec.rb +444 -0
  187. data/spec/spec_helper.rb +74 -0
  188. data/spec/support/big_decimal.rb +5 -0
  189. data/spec/support/concerns/adjustment_source_spec.rb +23 -0
  190. data/spec/support/concerns/default_price_spec.rb +28 -0
  191. data/spec/support/rake.rb +13 -0
  192. data/spec/support/test_gateway.rb +2 -0
  193. data/spree_core.gemspec +48 -0
  194. metadata +185 -4
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::CalculatedAdjustments do
4
+ it "should add has_one :calculator relationship" do
5
+ assert Spree::ShippingMethod.reflect_on_all_associations(:has_one).map(&:name).include?(:calculator)
6
+ end
7
+ end
@@ -0,0 +1,123 @@
1
+ require 'rspec/expectations'
2
+ require 'spree/i18n'
3
+ require 'spree/testing_support/i18n'
4
+
5
+ describe "i18n" do
6
+ before do
7
+ I18n.backend.store_translations(:en,
8
+ {
9
+ :spree => {
10
+ :foo => "bar",
11
+ :bar => {
12
+ :foo => "bar within bar scope",
13
+ :invalid => nil,
14
+ :legacy_translation => "back in the day..."
15
+ },
16
+ :invalid => nil,
17
+ :legacy_translation => "back in the day..."
18
+ }
19
+ })
20
+ end
21
+
22
+ it "translates within the spree scope" do
23
+ expect(Spree.normal_t(:foo)).to eql("bar")
24
+ expect(Spree.translate(:foo)).to eql("bar")
25
+ end
26
+
27
+ it "translates within the spree scope using a path" do
28
+ allow(Spree).to receive(:virtual_path).and_return('bar')
29
+
30
+ expect(Spree.normal_t('.legacy_translation')).to eql("back in the day...")
31
+ expect(Spree.translate('.legacy_translation')).to eql("back in the day...")
32
+ end
33
+
34
+ it "raise error without any context when using a path" do
35
+ expect {
36
+ Spree.normal_t('.legacy_translation')
37
+ }.to raise_error
38
+
39
+ expect {
40
+ Spree.translate('.legacy_translation')
41
+ }.to raise_error
42
+ end
43
+
44
+ it "prepends a string scope" do
45
+ expect(Spree.normal_t(:foo, :scope => "bar")).to eql("bar within bar scope")
46
+ end
47
+
48
+ it "prepends to an array scope" do
49
+ expect(Spree.normal_t(:foo, :scope => ["bar"])).to eql("bar within bar scope")
50
+ end
51
+
52
+ it "returns two translations" do
53
+ expect(Spree.normal_t([:foo, 'bar.foo'])).to eql(["bar", "bar within bar scope"])
54
+ end
55
+
56
+ it "returns reasonable string for missing translations" do
57
+ expect(Spree.t(:missing_entry)).to include("<span")
58
+ end
59
+
60
+ context "missed + unused translations" do
61
+ def key_with_locale(key)
62
+ "#{key} (#{I18n.locale})"
63
+ end
64
+
65
+ before do
66
+ Spree.used_translations = []
67
+ end
68
+
69
+ context "missed translations" do
70
+ def assert_missing_translation(key)
71
+ key = key_with_locale(key)
72
+ message = Spree.missing_translation_messages.detect { |m| m == key }
73
+ expect(message).not_to(be_nil, "expected '#{key}' to be missing, but it wasn't.")
74
+ end
75
+
76
+ it "logs missing translations" do
77
+ Spree.t(:missing, :scope => [:else, :where])
78
+ Spree.check_missing_translations
79
+ assert_missing_translation("else")
80
+ assert_missing_translation("else.where")
81
+ assert_missing_translation("else.where.missing")
82
+ end
83
+
84
+ it "does not log present translations" do
85
+ Spree.t(:foo)
86
+ Spree.check_missing_translations
87
+ expect(Spree.missing_translation_messages).to be_empty
88
+ end
89
+
90
+ it "does not break when asked for multiple translations" do
91
+ Spree.t [:foo, 'bar.foo']
92
+ Spree.check_missing_translations
93
+ expect(Spree.missing_translation_messages).to be_empty
94
+ end
95
+ end
96
+
97
+ context "unused translations" do
98
+ def assert_unused_translation(key)
99
+ key = key_with_locale(key)
100
+ message = Spree.unused_translation_messages.detect { |m| m == key }
101
+ expect(message).not_to(be_nil, "expected '#{key}' to be unused, but it was used.")
102
+ end
103
+
104
+ def assert_used_translation(key)
105
+ key = key_with_locale(key)
106
+ message = Spree.unused_translation_messages.detect { |m| m == key }
107
+ expect(message).to(be_nil, "expected '#{key}' to be used, but it wasn't.")
108
+ end
109
+
110
+ it "logs translations that aren't used" do
111
+ Spree.check_unused_translations
112
+ assert_unused_translation("bar.legacy_translation")
113
+ assert_unused_translation("legacy_translation")
114
+ end
115
+
116
+ it "does not log used translations" do
117
+ Spree.t(:foo)
118
+ Spree.check_unused_translations
119
+ assert_used_translation("foo")
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Core::Search::Base do
4
+
5
+ before do
6
+ include Spree::Core::ProductFilters
7
+ @taxon = create(:taxon, name: "Ruby on Rails")
8
+
9
+ @product1 = create(:product, name: "RoR Mug", price: 9.00)
10
+ @product1.taxons << @taxon
11
+ @product2 = create(:product, name: "RoR Shirt", price: 11.00)
12
+ end
13
+
14
+ it "returns all products by default" do
15
+ params = { :per_page => "" }
16
+ searcher = Spree::Core::Search::Base.new(params)
17
+ expect(searcher.retrieve_products.count).to eq(2)
18
+ end
19
+
20
+ context "when include_images is included in the initalization params" do
21
+ let(:params) { { include_images: true, keyword: @product1.name, taxon: @taxon.id } }
22
+ subject { described_class.new(params).retrieve_products }
23
+
24
+ before do
25
+ @product1.master.images.create(attachment_file_name: "Test", position: 2)
26
+ @product1.master.images.create(attachment_file_name: "Test1", position: 1)
27
+ @product1.reload
28
+ end
29
+
30
+ it "returns images in correct order" do
31
+ expect(subject.first).to eq @product1
32
+ expect(subject.first.images).to eq @product1.master.images
33
+ end
34
+ end
35
+
36
+ it "switches to next page according to the page parameter" do
37
+ @product3 = create(:product, :name => "RoR Pants", :price => 14.00)
38
+
39
+ params = { :per_page => "2" }
40
+ searcher = Spree::Core::Search::Base.new(params)
41
+ expect(searcher.retrieve_products.count).to eq(2)
42
+
43
+ params.merge! :page => "2"
44
+ searcher = Spree::Core::Search::Base.new(params)
45
+ expect(searcher.retrieve_products.count).to eq(1)
46
+ end
47
+
48
+ it "maps search params to named scopes" do
49
+ params = { :per_page => "",
50
+ :search => { "price_range_any" => ["Under $10.00"] }}
51
+ searcher = Spree::Core::Search::Base.new(params)
52
+ expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
53
+ expect(searcher.retrieve_products.count).to eq(1)
54
+ end
55
+
56
+ it "maps multiple price_range_any filters" do
57
+ params = { :per_page => "",
58
+ :search => { "price_range_any" => ["Under $10.00", "$10.00 - $15.00"] }}
59
+ searcher = Spree::Core::Search::Base.new(params)
60
+ expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
61
+ expect(searcher.send(:get_base_scope).to_sql).to match /between 10 and 15/i
62
+ expect(searcher.retrieve_products.count).to eq(2)
63
+ end
64
+
65
+ it "uses ransack if scope not found" do
66
+ params = { :per_page => "",
67
+ :search => { "name_not_cont" => "Shirt" }}
68
+ searcher = Spree::Core::Search::Base.new(params)
69
+ expect(searcher.retrieve_products.count).to eq(1)
70
+ end
71
+
72
+ it "accepts a current user" do
73
+ user = double
74
+ searcher = Spree::Core::Search::Base.new({})
75
+ searcher.current_user = user
76
+ expect(searcher.current_user).to eql(user)
77
+ end
78
+
79
+ it "finds products in alternate currencies" do
80
+ price = create(:price, :currency => 'EUR', :variant => @product1.master)
81
+ searcher = Spree::Core::Search::Base.new({})
82
+ searcher.current_currency = 'EUR'
83
+ expect(searcher.retrieve_products).to eq([@product1])
84
+ end
85
+
86
+ end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+
3
+ class FakesController < ApplicationController
4
+ include Spree::Core::ControllerHelpers::Auth
5
+ def index; render text: 'index'; end
6
+ end
7
+
8
+ describe Spree::Core::ControllerHelpers::Auth, type: :controller do
9
+ controller(FakesController) {}
10
+
11
+ describe '#current_ability' do
12
+ it 'returns Spree::Ability instance' do
13
+ expect(controller.current_ability.class).to eq Spree::Ability
14
+ end
15
+ end
16
+
17
+ describe '#redirect_back_or_default' do
18
+ controller(FakesController) do
19
+ def index; redirect_back_or_default('/'); end
20
+ end
21
+ it 'redirects to session url' do
22
+ session[:spree_user_return_to] = '/redirect'
23
+ get :index
24
+ expect(response).to redirect_to('/redirect')
25
+ end
26
+ it 'redirects to HTTP_REFERER' do
27
+ request.env["HTTP_REFERER"] = '/dummy_redirect'
28
+ get :index
29
+ expect(response).to redirect_to('/dummy_redirect')
30
+ end
31
+ it 'redirects to default page' do
32
+ get :index
33
+ expect(response).to redirect_to('/')
34
+ end
35
+ end
36
+
37
+ describe '#set_guest_token' do
38
+ controller(FakesController) do
39
+ def index
40
+ set_guest_token
41
+ render text: 'index'
42
+ end
43
+ end
44
+ it 'sends cookie header' do
45
+ get :index
46
+ expect(response.cookies['guest_token']).not_to be_nil
47
+ end
48
+ end
49
+
50
+ describe '#store_location' do
51
+ it 'sets session return url' do
52
+ allow(controller).to receive_messages(request: double(fullpath: '/redirect'))
53
+ controller.store_location
54
+ expect(session[:spree_user_return_to]).to eq '/redirect'
55
+ end
56
+ end
57
+
58
+ describe '#try_spree_current_user' do
59
+ it 'calls spree_current_user when define spree_current_user method' do
60
+ expect(controller).to receive(:spree_current_user)
61
+ controller.try_spree_current_user
62
+ end
63
+ it 'calls current_spree_user when define current_spree_user method' do
64
+ expect(controller).to receive(:current_spree_user)
65
+ controller.try_spree_current_user
66
+ end
67
+ it 'returns nil' do
68
+ expect(controller.try_spree_current_user).to eq nil
69
+ end
70
+ end
71
+
72
+ describe '#redirect_unauthorized_access' do
73
+ controller(FakesController) do
74
+ def index; redirect_unauthorized_access; end
75
+ end
76
+ context 'when logged in' do
77
+ before do
78
+ allow(controller).to receive_messages(try_spree_current_user: double('User', id: 1, last_incomplete_spree_order: nil))
79
+ end
80
+ it 'redirects unauthorized path' do
81
+ get :index
82
+ expect(response).to redirect_to('/unauthorized')
83
+ end
84
+ end
85
+ context 'when guest user' do
86
+ before do
87
+ allow(controller).to receive_messages(try_spree_current_user: nil)
88
+ end
89
+ it 'redirects login path' do
90
+ allow(controller).to receive_messages(spree_login_path: '/login')
91
+ get :index
92
+ expect(response).to redirect_to('/login')
93
+ end
94
+ it 'redirects root path' do
95
+ allow(controller).to receive_message_chain(:spree, :root_path).and_return('/root_path')
96
+ get :index
97
+ expect(response).to redirect_to('/root_path')
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ class FakesController < ApplicationController
4
+ include Spree::Core::ControllerHelpers::Order
5
+ end
6
+
7
+ describe Spree::Core::ControllerHelpers::Order, type: :controller do
8
+ controller(FakesController) {}
9
+
10
+ let(:user) { create(:user) }
11
+ let(:order) { create(:order, user: user) }
12
+ let(:store) { create(:store) }
13
+
14
+ describe '#simple_current_order' do
15
+ before { allow(controller).to receive_messages(try_spree_current_user: user) }
16
+ it "returns an empty order" do
17
+ expect(controller.simple_current_order.item_count).to eq 0
18
+ end
19
+ it 'returns Spree::Order instance' do
20
+ allow(controller).to receive_messages(cookies: double(signed: { guest_token: order.guest_token }))
21
+ expect(controller.simple_current_order).to eq order
22
+ end
23
+ end
24
+
25
+ describe '#current_order' do
26
+ before {
27
+ allow(controller).to receive_messages(current_store: store)
28
+ allow(controller).to receive_messages(try_spree_current_user: user)
29
+ }
30
+ context 'create_order_if_necessary option is false' do
31
+ let!(:order) { create :order, user: user }
32
+ it 'returns current order' do
33
+ expect(controller.current_order).to eq order
34
+ end
35
+ end
36
+ context 'create_order_if_necessary option is true' do
37
+ it 'creates new order' do
38
+ expect {
39
+ controller.current_order(create_order_if_necessary: true)
40
+ }.to change(Spree::Order, :count).to(1)
41
+ end
42
+
43
+ it 'assigns the current_store id' do
44
+ controller.current_order(create_order_if_necessary: true)
45
+ expect(Spree::Order.last.store_id).to eq store.id
46
+ end
47
+ end
48
+ end
49
+
50
+ describe '#associate_user' do
51
+ before do
52
+ allow(controller).to receive_messages(current_order: order, try_spree_current_user: user)
53
+ end
54
+ context "user's email is blank" do
55
+ let(:user) { create(:user, email: '') }
56
+ it 'calls Spree::Order#associate_user! method' do
57
+ expect_any_instance_of(Spree::Order).to receive(:associate_user!)
58
+ controller.associate_user
59
+ end
60
+ end
61
+ context "user isn't blank" do
62
+ it 'does not calls Spree::Order#associate_user! method' do
63
+ expect_any_instance_of(Spree::Order).not_to receive(:associate_user!)
64
+ controller.associate_user
65
+ end
66
+ end
67
+ end
68
+
69
+ describe '#set_current_order' do
70
+ let(:incomplete_order) { create(:order, user: user) }
71
+ before { allow(controller).to receive_messages(try_spree_current_user: user) }
72
+
73
+ context 'when current order not equal to users incomplete orders' do
74
+ before { allow(controller).to receive_messages(current_order: order, last_incomplete_order: incomplete_order, cookies: double(signed: { guest_token: 'guest_token' })) }
75
+
76
+ it 'calls Spree::Order#merge! method' do
77
+ expect(order).to receive(:merge!).with(incomplete_order, user)
78
+ controller.set_current_order
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '#current_currency' do
84
+ it 'returns current currency' do
85
+ Spree::Config[:currency] = 'USD'
86
+ expect(controller.current_currency).to eq 'USD'
87
+ end
88
+ end
89
+
90
+ describe '#ip_address' do
91
+ it 'returns remote ip' do
92
+ expect(controller.ip_address).to eq request.remote_ip
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ class FakesController < ApplicationController
4
+ include Spree::Core::ControllerHelpers::Search
5
+ end
6
+
7
+ describe Spree::Core::ControllerHelpers::Search, type: :controller do
8
+ controller(FakesController) {}
9
+
10
+ describe '#build_searcher' do
11
+ it 'returns Spree::Core::Search::Base instance' do
12
+ allow(controller).to receive_messages(try_spree_current_user: create(:user),
13
+ current_currency: 'USD')
14
+ expect(controller.build_searcher({}).class).to eq Spree::Core::Search::Base
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ class FakesController < ApplicationController
4
+ include Spree::Core::ControllerHelpers::Store
5
+ end
6
+
7
+ describe Spree::Core::ControllerHelpers::Store, type: :controller do
8
+ controller(FakesController) {}
9
+
10
+ describe '#current_store' do
11
+ let!(:store) { create :store, default: true }
12
+ it 'returns current store' do
13
+ expect(controller.current_store).to eq store
14
+ end
15
+ end
16
+ end