solidus_core 1.0.2 → 1.0.3

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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +3 -0
  4. data/Rakefile +16 -0
  5. data/script/rails +9 -0
  6. data/solidus_core.gemspec +48 -0
  7. data/spec/fixtures/thinking-cat.jpg +0 -0
  8. data/spec/helpers/base_helper_spec.rb +173 -0
  9. data/spec/helpers/order_helper_spec.rb +12 -0
  10. data/spec/helpers/products_helper_spec.rb +220 -0
  11. data/spec/helpers/taxons_helper_spec.rb +17 -0
  12. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  13. data/spec/lib/i18n_spec.rb +123 -0
  14. data/spec/lib/search/base_spec.rb +86 -0
  15. data/spec/lib/search/variant_spec.rb +92 -0
  16. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
  17. data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
  18. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  19. data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
  20. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  21. data/spec/lib/spree/core/current_store_spec.rb +36 -0
  22. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  23. data/spec/lib/spree/core/importer/order_spec.rb +431 -0
  24. data/spec/lib/spree/core/role_configuration_spec.rb +138 -0
  25. data/spec/lib/spree/core/validators/email_spec.rb +48 -0
  26. data/spec/lib/spree/localized_number_spec.rb +38 -0
  27. data/spec/lib/spree/migrations_spec.rb +36 -0
  28. data/spec/lib/spree/money_spec.rb +127 -0
  29. data/spec/lib/tasks/exchanges_spec.rb +231 -0
  30. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
  31. data/spec/lib/tasks/order_capturing_spec.rb +56 -0
  32. data/spec/mailers/carton_mailer_spec.rb +43 -0
  33. data/spec/mailers/order_mailer_spec.rb +122 -0
  34. data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
  35. data/spec/mailers/test_mailer_spec.rb +15 -0
  36. data/spec/models/spree/ability_spec.rb +276 -0
  37. data/spec/models/spree/address_spec.rb +250 -0
  38. data/spec/models/spree/adjustment_reason_spec.rb +13 -0
  39. data/spec/models/spree/adjustment_spec.rb +177 -0
  40. data/spec/models/spree/app_configuration_spec.rb +20 -0
  41. data/spec/models/spree/asset_spec.rb +24 -0
  42. data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
  43. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  44. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  45. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  46. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  47. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  48. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
  49. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  50. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  51. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  52. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  53. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
  54. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
  55. data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
  56. data/spec/models/spree/calculator_spec.rb +36 -0
  57. data/spec/models/spree/carton_spec.rb +133 -0
  58. data/spec/models/spree/classification_spec.rb +15 -0
  59. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  60. data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
  61. data/spec/models/spree/credit_card_spec.rb +334 -0
  62. data/spec/models/spree/customer_return_spec.rb +276 -0
  63. data/spec/models/spree/exchange_spec.rb +79 -0
  64. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  65. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  66. data/spec/models/spree/gateway_spec.rb +82 -0
  67. data/spec/models/spree/inventory_unit_spec.rb +307 -0
  68. data/spec/models/spree/item_adjustments_spec.rb +256 -0
  69. data/spec/models/spree/line_item_spec.rb +191 -0
  70. data/spec/models/spree/option_type_spec.rb +14 -0
  71. data/spec/models/spree/option_value_spec.rb +22 -0
  72. data/spec/models/spree/order/address_spec.rb +50 -0
  73. data/spec/models/spree/order/adjustments_spec.rb +39 -0
  74. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  75. data/spec/models/spree/order/checkout_spec.rb +902 -0
  76. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  77. data/spec/models/spree/order/finalizing_spec.rb +111 -0
  78. data/spec/models/spree/order/payment_spec.rb +210 -0
  79. data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
  80. data/spec/models/spree/order/state_machine_spec.rb +221 -0
  81. data/spec/models/spree/order/tax_spec.rb +84 -0
  82. data/spec/models/spree/order/totals_spec.rb +24 -0
  83. data/spec/models/spree/order/updating_spec.rb +18 -0
  84. data/spec/models/spree/order/validations_spec.rb +15 -0
  85. data/spec/models/spree/order_cancellations_spec.rb +120 -0
  86. data/spec/models/spree/order_capturing_spec.rb +116 -0
  87. data/spec/models/spree/order_contents_spec.rb +265 -0
  88. data/spec/models/spree/order_inventory_spec.rb +228 -0
  89. data/spec/models/spree/order_mutex_spec.rb +85 -0
  90. data/spec/models/spree/order_promotion_spec.rb +31 -0
  91. data/spec/models/spree/order_shipping_spec.rb +247 -0
  92. data/spec/models/spree/order_spec.rb +1412 -0
  93. data/spec/models/spree/order_stock_location_spec.rb +18 -0
  94. data/spec/models/spree/order_updater_spec.rb +299 -0
  95. data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
  96. data/spec/models/spree/payment_method_spec.rb +96 -0
  97. data/spec/models/spree/payment_spec.rb +1044 -0
  98. data/spec/models/spree/permission_sets/base_spec.rb +12 -0
  99. data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
  100. data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
  101. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
  102. data/spec/models/spree/permission_sets/order_display_spec.rb +49 -0
  103. data/spec/models/spree/permission_sets/order_management_spec.rb +36 -0
  104. data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
  105. data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
  106. data/spec/models/spree/permission_sets/promotion_display_spec.rb +34 -0
  107. data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
  108. data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
  109. data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +132 -0
  110. data/spec/models/spree/permission_sets/stock_display_spec.rb +26 -0
  111. data/spec/models/spree/permission_sets/stock_management_spec.rb +24 -0
  112. data/spec/models/spree/permission_sets/user_display_spec.rb +36 -0
  113. data/spec/models/spree/permission_sets/user_management_spec.rb +28 -0
  114. data/spec/models/spree/preference_spec.rb +80 -0
  115. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  116. data/spec/models/spree/preferences/preferable_spec.rb +294 -0
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  118. data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
  119. data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
  120. data/spec/models/spree/preferences/store_spec.rb +39 -0
  121. data/spec/models/spree/price_spec.rb +42 -0
  122. data/spec/models/spree/product/scopes_spec.rb +148 -0
  123. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  124. data/spec/models/spree/product_filter_spec.rb +26 -0
  125. data/spec/models/spree/product_property_spec.rb +20 -0
  126. data/spec/models/spree/product_spec.rb +437 -0
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
  129. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
  131. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  132. data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
  133. data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
  136. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  139. data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
  140. data/spec/models/spree/promotion_builder_spec.rb +118 -0
  141. data/spec/models/spree/promotion_category_spec.rb +17 -0
  142. data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
  143. data/spec/models/spree/promotion_code_spec.rb +187 -0
  144. data/spec/models/spree/promotion_handler/cart_spec.rb +114 -0
  145. data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
  146. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
  147. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  148. data/spec/models/spree/promotion_rule_spec.rb +28 -0
  149. data/spec/models/spree/promotion_spec.rb +767 -0
  150. data/spec/models/spree/refund_spec.rb +204 -0
  151. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  152. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  153. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  154. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  155. data/spec/models/spree/reimbursement_spec.rb +231 -0
  156. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
  157. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  158. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  159. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
  160. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
  161. data/spec/models/spree/return_authorization_spec.rb +290 -0
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  170. data/spec/models/spree/return_item_spec.rb +775 -0
  171. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  172. data/spec/models/spree/shipment_spec.rb +709 -0
  173. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  174. data/spec/models/spree/shipping_method_spec.rb +88 -0
  175. data/spec/models/spree/shipping_rate_spec.rb +142 -0
  176. data/spec/models/spree/state_spec.rb +14 -0
  177. data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
  178. data/spec/models/spree/stock/coordinator_spec.rb +116 -0
  179. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  180. data/spec/models/spree/stock/estimator_spec.rb +146 -0
  181. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  182. data/spec/models/spree/stock/package_spec.rb +163 -0
  183. data/spec/models/spree/stock/packer_spec.rb +91 -0
  184. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  185. data/spec/models/spree/stock/quantifier_spec.rb +115 -0
  186. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  187. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  188. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
  189. data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
  190. data/spec/models/spree/stock_item_spec.rb +426 -0
  191. data/spec/models/spree/stock_location_spec.rb +279 -0
  192. data/spec/models/spree/stock_movement_spec.rb +56 -0
  193. data/spec/models/spree/stock_transfer_spec.rb +290 -0
  194. data/spec/models/spree/store_credit_category_spec.rb +17 -0
  195. data/spec/models/spree/store_credit_event_spec.rb +314 -0
  196. data/spec/models/spree/store_credit_spec.rb +876 -0
  197. data/spec/models/spree/store_spec.rb +55 -0
  198. data/spec/models/spree/tax_category_spec.rb +27 -0
  199. data/spec/models/spree/tax_rate_spec.rb +378 -0
  200. data/spec/models/spree/taxon_spec.rb +74 -0
  201. data/spec/models/spree/taxonomy_spec.rb +18 -0
  202. data/spec/models/spree/tracker_spec.rb +21 -0
  203. data/spec/models/spree/transfer_item_spec.rb +264 -0
  204. data/spec/models/spree/unit_cancel_spec.rb +148 -0
  205. data/spec/models/spree/user_spec.rb +223 -0
  206. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
  207. data/spec/models/spree/variant/scopes_spec.rb +55 -0
  208. data/spec/models/spree/variant_spec.rb +546 -0
  209. data/spec/models/spree/zone_spec.rb +305 -0
  210. data/spec/spec_helper.rb +78 -0
  211. data/spec/support/big_decimal.rb +5 -0
  212. data/spec/support/concerns/default_price.rb +34 -0
  213. data/spec/support/dummy_ability.rb +4 -0
  214. data/spec/support/test_gateway.rb +2 -0
  215. metadata +229 -3
  216. data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +0 -8
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::TaxonsHelper, :type => :helper do
4
+ # Regression test for #4382
5
+ it "#taxon_preview" do
6
+ taxon = create(:taxon)
7
+ child_taxon = create(:taxon, parent: taxon)
8
+ product_1 = create(:product)
9
+ product_2 = create(:product)
10
+ product_3 = create(:product)
11
+ taxon.products << product_1
12
+ taxon.products << product_2
13
+ child_taxon.products << product_3
14
+
15
+ expect(taxon_preview(taxon.reload)).to eql([product_1, product_2, product_3])
16
+ end
17
+ end
@@ -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 RuntimeError
38
+
39
+ expect {
40
+ Spree.translate('.legacy_translation')
41
+ }.to raise_error RuntimeError
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,92 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Core::Search::Variant do
5
+ def assert_found(query_string, variant)
6
+ expect(described_class.new(query_string).results).to include variant
7
+ end
8
+
9
+ def refute_found(query_string, variant)
10
+ expect(described_class.new(query_string).results).not_to include variant
11
+ end
12
+
13
+ let(:product) { FactoryGirl.create(:product, name: "My Special Product", slug: "my-special-product") }
14
+ let!(:variant) { FactoryGirl.create(:variant, product: product, sku: "abc-123") }
15
+
16
+ context "blank string" do
17
+ it { assert_found(nil, variant) }
18
+ it { assert_found("", variant) }
19
+ end
20
+
21
+ context "by sku" do
22
+ it { assert_found("abc-123", variant) }
23
+ it { assert_found("abc-1", variant) }
24
+ it { assert_found("aBc-12", variant) }
25
+ it { refute_found("bca", variant) }
26
+ end
27
+
28
+ context "by product" do
29
+ it { assert_found("My Special Product", variant) }
30
+ it { assert_found("My Spec", variant) }
31
+ it { assert_found("my spec", variant) }
32
+ it { assert_found("my-special-product", variant) }
33
+ it { assert_found("my-spec", variant) }
34
+ it { assert_found("mY-sPec", variant) }
35
+ it { assert_found("My Product", variant) }
36
+ it { refute_found("My House", variant) }
37
+ it { refute_found("my-product", variant) }
38
+ end
39
+
40
+ context "by product + options" do
41
+ before do
42
+ variant.option_values << create(:option_value, presentation: "Robin's egg", name: "blue")
43
+ variant.option_values << create(:option_value, presentation: 'Slim')
44
+ variant.option_values << create(:option_value, presentation: '30')
45
+ end
46
+ it { assert_found("My Spec blue", variant) }
47
+ it { assert_found("My Spec robin egg Slim", variant) }
48
+ it { assert_found("My Spec 30 slim", variant) }
49
+ it { refute_found("My Spec red slim", variant) }
50
+ it { refute_found("foo product blue slim", variant) }
51
+ end
52
+
53
+ context "custom scope" do
54
+ it "takes into account a passed in scope" do
55
+ variant.stock_items.first.set_count_on_hand(10)
56
+ expect(
57
+ described_class.new(variant.sku, scope: Spree::Variant.in_stock).results
58
+ ).to include variant
59
+
60
+ variant.stock_items.each { |si| si.set_count_on_hand(0) }
61
+ expect(
62
+ described_class.new(variant.sku, scope: Spree::Variant.in_stock).results
63
+ ).not_to include variant
64
+ end
65
+ end
66
+
67
+ context "custom search configuration" do
68
+ context "removing a search query" do
69
+ around do |example|
70
+ search_terms = described_class.search_terms
71
+ described_class.search_terms -= [:sku_cont]
72
+ example.run
73
+ described_class.search_terms = search_terms
74
+ end
75
+
76
+ it { refute_found("abc-123", variant) }
77
+ end
78
+
79
+ context "adding a search query" do
80
+ around do |example|
81
+ search_terms = described_class.search_terms
82
+ described_class.search_terms += [:weight_eq]
83
+ example.run
84
+ described_class.search_terms = search_terms
85
+ end
86
+ before { variant.update_attributes!(weight: 5000) }
87
+
88
+ it { assert_found("5000", variant) }
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,66 @@
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 default page' do
27
+ get :index
28
+ expect(response).to redirect_to('/')
29
+ end
30
+ end
31
+
32
+ describe '#set_guest_token' do
33
+ controller(FakesController) do
34
+ def index
35
+ set_guest_token
36
+ render text: 'index'
37
+ end
38
+ end
39
+ it 'sends cookie header' do
40
+ get :index
41
+ expect(response.cookies['guest_token']).not_to be_nil
42
+ end
43
+ end
44
+
45
+ describe '#store_location' do
46
+ it 'sets session return url' do
47
+ allow(controller).to receive_messages(request: double(fullpath: '/redirect'))
48
+ controller.store_location
49
+ expect(session[:spree_user_return_to]).to eq '/redirect'
50
+ end
51
+ end
52
+
53
+ describe '#try_spree_current_user' do
54
+ it 'calls spree_current_user when define spree_current_user method' do
55
+ expect(controller).to receive(:spree_current_user)
56
+ controller.try_spree_current_user
57
+ end
58
+ it 'calls current_spree_user when define current_spree_user method' do
59
+ expect(controller).to receive(:current_spree_user)
60
+ controller.try_spree_current_user
61
+ end
62
+ it 'returns nil' do
63
+ expect(controller.try_spree_current_user).to eq nil
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,92 @@
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, store: store) }
12
+ let(:store) { create(:store) }
13
+
14
+ before do
15
+ allow(controller).to receive_messages(current_store: store)
16
+ allow(controller).to receive_messages(try_spree_current_user: user)
17
+ end
18
+
19
+ describe '#simple_current_order' do
20
+ it "returns an empty order" do
21
+ expect(controller.simple_current_order.item_count).to eq 0
22
+ end
23
+ it 'returns Spree::Order instance' do
24
+ allow(controller).to receive_messages(cookies: double(signed: { guest_token: order.guest_token }))
25
+ expect(controller.simple_current_order).to eq order
26
+ end
27
+ end
28
+
29
+ describe '#current_order' do
30
+ context 'create_order_if_necessary option is false' do
31
+ let!(:order) { create :order, user: user, store: store }
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 { allow(controller).to receive_messages(current_order: order) }
52
+ context "user's email is blank" do
53
+ let(:user) { create(:user, email: '') }
54
+ it 'calls Spree::Order#associate_user! method' do
55
+ expect_any_instance_of(Spree::Order).to receive(:associate_user!)
56
+ controller.associate_user
57
+ end
58
+ end
59
+ context "user isn't blank" do
60
+ it 'does not calls Spree::Order#associate_user! method' do
61
+ expect_any_instance_of(Spree::Order).not_to receive(:associate_user!)
62
+ controller.associate_user
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '#set_current_order' do
68
+ let(:incomplete_order) { create(:order, user: user) }
69
+
70
+ context 'when current order not equal to users incomplete orders' do
71
+ before { allow(controller).to receive_messages(current_order: order, last_incomplete_order: incomplete_order, cookies: double(signed: { guest_token: 'guest_token' })) }
72
+
73
+ it 'calls Spree::Order#merge! method' do
74
+ expect(order).to receive(:merge!).with(incomplete_order, user)
75
+ controller.set_current_order
76
+ end
77
+ end
78
+ end
79
+
80
+ describe '#current_currency' do
81
+ it 'returns current currency' do
82
+ Spree::Config[:currency] = 'USD'
83
+ expect(controller.current_currency).to eq 'USD'
84
+ end
85
+ end
86
+
87
+ describe '#ip_address' do
88
+ it 'returns remote ip' do
89
+ expect(controller.ip_address).to eq request.remote_ip
90
+ end
91
+ end
92
+ end