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,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Preferences::ScopedStore, :type => :model do
4
- let(:scoped_store){ described_class.new(prefix, suffix) }
5
- subject{ scoped_store }
6
- let(:prefix){ nil }
7
- let(:suffix){ nil }
8
-
9
- describe '#store' do
10
- subject{ scoped_store.store }
11
- it{ is_expected.to be Spree::Preferences::Store.instance }
12
- end
13
-
14
- context 'stubbed store' do
15
- let(:store){ double(:store) }
16
- before do
17
- allow(scoped_store).to receive(:store).and_return(store)
18
- end
19
-
20
- context "with a prefix" do
21
- let(:prefix){ 'my_class' }
22
-
23
- it "can fetch" do
24
- expect(store).to receive(:fetch).with('my_class/attr')
25
- scoped_store.fetch('attr'){ 'default' }
26
- end
27
-
28
- it "can assign" do
29
- expect(store).to receive(:[]=).with('my_class/attr', 'val')
30
- scoped_store['attr'] = 'val'
31
- end
32
-
33
- it "can delete" do
34
- expect(store).to receive(:delete).with('my_class/attr')
35
- scoped_store.delete('attr')
36
- end
37
-
38
- context "and suffix" do
39
- let(:suffix){ 123 }
40
-
41
- it "can fetch" do
42
- expect(store).to receive(:fetch).with('my_class/attr/123')
43
- scoped_store.fetch('attr'){ 'default' }
44
- end
45
-
46
- it "can assign" do
47
- expect(store).to receive(:[]=).with('my_class/attr/123', 'val')
48
- scoped_store['attr'] = 'val'
49
- end
50
-
51
- it "can delete" do
52
- expect(store).to receive(:delete).with('my_class/attr/123')
53
- scoped_store.delete('attr')
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Preferences::Store, :type => :model do
4
- before :each do
5
- @store = Spree::Preferences::StoreInstance.new
6
- end
7
-
8
- it "sets and gets a key" do
9
- @store.set :test, 1
10
- expect(@store.exist?(:test)).to be true
11
- expect(@store.get(:test)).to eq 1
12
- end
13
-
14
- it "can set and get false values when cache return nil" do
15
- @store.set :test, false
16
- expect(@store.get(:test)).to be false
17
- end
18
-
19
- it "will return db value when cache is emtpy and cache the db value" do
20
- preference = Spree::Preference.where(:key => 'test').first_or_initialize
21
- preference.value = '123'
22
- preference.save
23
-
24
- Rails.cache.clear
25
- expect(@store.get(:test)).to eq '123'
26
- expect(Rails.cache.read(:test)).to eq '123'
27
- end
28
-
29
- it "should return and cache fallback value when supplied" do
30
- Rails.cache.clear
31
- expect(@store.get(:test){ false }).to be false
32
- expect(Rails.cache.read(:test)).to be false
33
- end
34
-
35
- it "should return but not cache fallback value when persistence is disabled" do
36
- Rails.cache.clear
37
- allow(@store).to receive_messages(:should_persist? => false)
38
- expect(@store.get(:test){ true }).to be true
39
- expect(Rails.cache.exist?(:test)).to be false
40
- end
41
-
42
- it "should return nil when key can't be found and fallback value is not supplied" do
43
- expect(@store.get(:random_key){ nil }).to be_nil
44
- end
45
-
46
- end
@@ -1,128 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Price, :type => :model do
4
- describe '#amount=' do
5
- let(:price) { Spree::Price.new }
6
- let(:amount) { '3,0A0' }
7
-
8
- before do
9
- price.amount = amount
10
- end
11
-
12
- it 'is expected to equal to localized number' do
13
- expect(price.amount).to eq(Spree::LocalizedNumber.parse(amount))
14
- end
15
- end
16
-
17
- describe '#price' do
18
- let(:price) { Spree::Price.new }
19
- let(:amount) { 3000.00 }
20
-
21
- context 'when amount is changed' do
22
- before do
23
- price.amount = amount
24
- end
25
-
26
- it 'is expected to equal to price' do
27
- expect(price.amount).to eq(price.price)
28
- end
29
- end
30
- end
31
-
32
- describe 'validations' do
33
- let(:variant) { stub_model Spree::Variant }
34
- subject { Spree::Price.new variant: variant, amount: amount }
35
-
36
- context 'when the amount is nil' do
37
- let(:amount) { nil }
38
- it { is_expected.to be_valid }
39
- end
40
-
41
- context 'when the amount is less than 0' do
42
- let(:amount) { -1 }
43
-
44
- it 'has 1 error_on' do
45
- expect(subject.error_on(:amount).size).to eq(1)
46
- end
47
- it 'populates errors' do
48
- subject.valid?
49
- expect(subject.errors.messages[:amount].first).to eq 'must be greater than or equal to 0'
50
- end
51
- end
52
-
53
- context 'when the amount is greater than maximum amount' do
54
- let(:amount) { Spree::Price::MAXIMUM_AMOUNT + 1 }
55
-
56
- it 'has 1 error_on' do
57
- expect(subject.error_on(:amount).size).to eq(1)
58
- end
59
- it 'populates errors' do
60
- subject.valid?
61
- expect(subject.errors.messages[:amount].first).to eq "must be less than or equal to #{Spree::Price::MAXIMUM_AMOUNT}"
62
- end
63
- end
64
-
65
- context 'when the amount is between 0 and the maximum amount' do
66
- let(:amount) { Spree::Price::MAXIMUM_AMOUNT }
67
- it { is_expected.to be_valid }
68
- end
69
- end
70
-
71
- describe '#price_including_vat_for(zone)' do
72
- let(:variant) { stub_model Spree::Variant }
73
- let(:default_zone) { Spree::Zone.new }
74
- let(:zone) { Spree::Zone.new }
75
- let(:amount) { 10 }
76
- let(:tax_category) { Spree::TaxCategory.new }
77
- let(:price) { Spree::Price.new variant: variant, amount: amount }
78
- let(:price_options) { { tax_zone: zone } }
79
-
80
- subject(:price_with_vat) { price.price_including_vat_for(price_options) }
81
-
82
- context 'when called with a non-default zone' do
83
- before do
84
- allow(variant).to receive(:tax_category).and_return(tax_category)
85
- expect(price).to receive(:default_zone).at_least(:once).and_return(default_zone)
86
- allow(price).to receive(:apply_foreign_vat?).and_return(true)
87
- allow(price).to receive(:included_tax_amount).with(tax_zone: default_zone, tax_category: tax_category) { 0.19 }
88
- allow(price).to receive(:included_tax_amount).with(tax_zone: zone, tax_category: tax_category) { 0.25 }
89
- end
90
-
91
- it "returns the correct price including another VAT to two digits" do
92
- expect(price_with_vat).to eq(10.50)
93
- end
94
- end
95
-
96
- context 'when called from the default zone' do
97
- before do
98
- allow(variant).to receive(:tax_category).and_return(tax_category)
99
- expect(price).to receive(:default_zone).at_least(:once).and_return(zone)
100
- end
101
-
102
- it "returns the correct price" do
103
- expect(price).to receive(:price).and_call_original
104
- expect(price_with_vat).to eq(10.00)
105
- end
106
- end
107
-
108
- context 'when no default zone is set' do
109
- before do
110
- allow(variant).to receive(:tax_category).and_return(tax_category)
111
- expect(price).to receive(:default_zone).at_least(:once).and_return(nil)
112
- end
113
-
114
- it "returns the correct price" do
115
- expect(price).to receive(:price).and_call_original
116
- expect(price.price_including_vat_for(tax_zone: zone)).to eq(10.00)
117
- end
118
- end
119
- end
120
-
121
- describe '#display_price_including_vat_for(zone)' do
122
- subject { Spree::Price.new amount: 10 }
123
- it 'calls #price_including_vat_for' do
124
- expect(subject).to receive(:price_including_vat_for)
125
- subject.display_price_including_vat_for(nil)
126
- end
127
- end
128
- end
@@ -1,183 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Product scopes", :type => :model do
4
- let!(:product) { create(:product) }
5
-
6
- describe '#available' do
7
- context 'when discontinued' do
8
- let!(:discontinued_product) { create(:product, discontinue_on: Time.current - 1.day) }
9
-
10
- it { expect(Spree::Product.available).not_to include(discontinued_product) }
11
- end
12
-
13
- context 'when not discontinued' do
14
- let!(:product_2) { create(:product, discontinue_on: Time.current + 1.day) }
15
-
16
- it { expect(Spree::Product.available).to include(product_2) }
17
- end
18
-
19
- context 'when available' do
20
- let!(:product_2) { create(:product, available_on: Time.current - 1.day) }
21
-
22
- it { expect(Spree::Product.available).to include(product_2) }
23
- end
24
-
25
- context 'when not available' do
26
- let!(:unavailable_product) { create(:product, available_on: Time.current + 1.day) }
27
-
28
- it { expect(Spree::Product.available).not_to include(unavailable_product) }
29
- end
30
-
31
- context 'when multiple prices present' do
32
- let!(:price_1) { create(:price, currency: 'EUR', variant: product.master) }
33
- let!(:price_2) { create(:price, currency: 'EUR', variant: product.master) }
34
-
35
- it 'should not duplicate product' do
36
- expect(Spree::Product.available).to eq([product])
37
- end
38
- end
39
- end
40
-
41
- context "A product assigned to parent and child taxons" do
42
- before do
43
- @taxonomy = create(:taxonomy)
44
- @root_taxon = @taxonomy.root
45
-
46
- @parent_taxon = create(:taxon, :name => 'Parent', :taxonomy_id => @taxonomy.id, :parent => @root_taxon)
47
- @child_taxon = create(:taxon, :name =>'Child 1', :taxonomy_id => @taxonomy.id, :parent => @parent_taxon)
48
- @parent_taxon.reload # Need to reload for descendents to show up
49
-
50
- product.taxons << @parent_taxon
51
- product.taxons << @child_taxon
52
- end
53
-
54
- it "calling Product.in_taxon returns products in child taxons" do
55
- product.taxons -= [@child_taxon]
56
- expect(product.taxons.count).to eq(1)
57
-
58
- expect(Spree::Product.in_taxon(@parent_taxon)).to include(product)
59
- end
60
-
61
- it "calling Product.in_taxon should not return duplicate records" do
62
- expect(Spree::Product.in_taxon(@parent_taxon).to_a.count).to eq(1)
63
- end
64
-
65
- context 'orders products based on their ordering within the classifications' do
66
- let(:other_taxon) { create(:taxon, products: [product]) }
67
- let!(:product_2) { create(:product, taxons: [@child_taxon, other_taxon]) }
68
-
69
- it 'by initial ordering' do
70
- expect(Spree::Product.in_taxon(@child_taxon)).to eq([product, product_2])
71
- expect(Spree::Product.in_taxon(other_taxon)).to eq([product, product_2])
72
- end
73
-
74
- it 'after ordering changed' do
75
- [@child_taxon, other_taxon].each do |taxon|
76
- Spree::Classification.find_by(:taxon => taxon, :product => product).insert_at(2)
77
- expect(Spree::Product.in_taxon(taxon)).to eq([product_2, product])
78
- end
79
- end
80
- end
81
- end
82
-
83
- context "property scopes" do
84
- let(:name) { "A proper tee" }
85
- let(:value) { "A proper value"}
86
- let!(:property) { create(:property, name: name)}
87
-
88
- before do
89
- product.properties << property
90
- product.product_properties.find_by(property: property).update_column(:value, value)
91
- end
92
-
93
- context "with_property" do
94
- let(:with_property) { Spree::Product.method(:with_property) }
95
- it "finds by a property's name" do
96
- expect(with_property.(name).count).to eq(1)
97
- end
98
-
99
- it "doesn't find any properties with an unknown name" do
100
- expect(with_property.("fake").count).to eq(0)
101
- end
102
-
103
- it "finds by a property" do
104
- expect(with_property.(property).count).to eq(1)
105
- end
106
-
107
- it "finds by an id" do
108
- expect(with_property.(property.id).count).to eq(1)
109
- end
110
-
111
- it "cannot find a property with an unknown id" do
112
- expect(with_property.(0).count).to eq(0)
113
- end
114
- end
115
-
116
- context "with_property_value" do
117
- let(:with_property_value) { Spree::Product.method(:with_property_value) }
118
- it "finds by a property's name" do
119
- expect(with_property_value.(name, value).count).to eq(1)
120
- end
121
-
122
- it "cannot find by an unknown property's name" do
123
- expect(with_property_value.("fake", value).count).to eq(0)
124
- end
125
-
126
- it "cannot find with a name by an incorrect value" do
127
- expect(with_property_value.(name, "fake").count).to eq(0)
128
- end
129
-
130
- it "finds by a property" do
131
- expect(with_property_value.(property, value).count).to eq(1)
132
- end
133
-
134
- it "cannot find with a property by an incorrect value" do
135
- expect(with_property_value.(property, "fake").count).to eq(0)
136
- end
137
-
138
- it "finds by an id with a value" do
139
- expect(with_property_value.(property.id, value).count).to eq(1)
140
- end
141
-
142
- it "cannot find with an invalid id" do
143
- expect(with_property_value.(0, value).count).to eq(0)
144
- end
145
-
146
- it "cannot find with an invalid value" do
147
- expect(with_property_value.(property.id, "fake").count).to eq(0)
148
- end
149
- end
150
- end
151
-
152
- context '#add_simple_scopes' do
153
- let(:simple_scopes) { [:ascend_by_updated_at, :descend_by_name] }
154
-
155
- before do
156
- Spree::Product.add_simple_scopes(simple_scopes)
157
- end
158
-
159
- context 'define scope' do
160
- context 'ascend_by_updated_at' do
161
- context 'on class' do
162
- it { expect(Spree::Product.ascend_by_updated_at.to_sql).to eq Spree::Product.order("#{Spree::Product.quoted_table_name}.updated_at ASC").to_sql }
163
- end
164
-
165
- context 'on ActiveRecord::Relation' do
166
- it { expect(Spree::Product.limit(2).ascend_by_updated_at.to_sql).to eq Spree::Product.limit(2).order("#{Spree::Product.quoted_table_name}.updated_at ASC").to_sql }
167
- it { expect(Spree::Product.limit(2).ascend_by_updated_at.to_sql).to eq Spree::Product.ascend_by_updated_at.limit(2).to_sql }
168
- end
169
- end
170
-
171
- context 'descend_by_name' do
172
- context 'on class' do
173
- it { expect(Spree::Product.descend_by_name.to_sql).to eq Spree::Product.order("#{Spree::Product.quoted_table_name}.name DESC").to_sql }
174
- end
175
-
176
- context 'on ActiveRecord::Relation' do
177
- it { expect(Spree::Product.limit(2).descend_by_name.to_sql).to eq Spree::Product.limit(2).order("#{Spree::Product.quoted_table_name}.name DESC").to_sql }
178
- it { expect(Spree::Product.limit(2).descend_by_name.to_sql).to eq Spree::Product.descend_by_name.limit(2).to_sql }
179
- end
180
- end
181
- end
182
- end
183
- end
@@ -1,103 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
-
5
- describe Spree::ProductDuplicator, :type => :model do
6
-
7
- let(:product) { create(:product, properties: [create(:property, name: "MyProperty")])}
8
- let!(:duplicator) { Spree::ProductDuplicator.new(product)}
9
-
10
- let(:image) { File.open(File.expand_path('../../../fixtures/thinking-cat.jpg', __FILE__)) }
11
- let(:params) { {:viewable_id => product.master.id, :viewable_type => 'Spree::Variant', :attachment => image, :alt => "position 1", :position => 1} }
12
-
13
- before do
14
- Spree::Image.create(params)
15
- end
16
-
17
- it "will duplicate the product" do
18
- expect{duplicator.duplicate}.to change{Spree::Product.count}.by(1)
19
- end
20
-
21
- context 'when image duplication enabled' do
22
-
23
- it "will duplicate the product images" do
24
- expect{duplicator.duplicate}.to change{Spree::Image.count}.by(1)
25
- end
26
-
27
- end
28
-
29
- context 'when image duplication disabled' do
30
-
31
- let!(:duplicator) { Spree::ProductDuplicator.new(product, false) }
32
-
33
- it "will not duplicate the product images" do
34
- expect{duplicator.duplicate}.to change{Spree::Image.count}.by(0)
35
- end
36
-
37
- end
38
-
39
- context 'image duplication default' do
40
-
41
- context 'when default is set to true' do
42
-
43
- it 'clones images if no flag passed to initializer' do
44
- expect{duplicator.duplicate}.to change{Spree::Image.count}.by(1)
45
- end
46
-
47
- end
48
-
49
- context 'when default is set to false' do
50
-
51
- before do
52
- ProductDuplicator.clone_images_default = false
53
- end
54
-
55
- after do
56
- ProductDuplicator.clone_images_default = true
57
- end
58
-
59
- it 'does not clone images if no flag passed to initializer' do
60
- expect{ProductDuplicator.new(product).duplicate}.to change{Spree::Image.count}.by(0)
61
- end
62
-
63
- end
64
-
65
- end
66
-
67
- context "product attributes" do
68
- let!(:new_product) {duplicator.duplicate}
69
-
70
- it "will set an unique name" do
71
- expect(new_product.name).to eql "COPY OF #{product.name}"
72
- end
73
-
74
- it "will set an unique sku" do
75
- expect(new_product.sku).to include "COPY OF SKU"
76
- end
77
-
78
- it "copied the properties" do
79
- expect(new_product.product_properties.count).to be 1
80
- expect(new_product.product_properties.first.property.name).to eql "MyProperty"
81
- end
82
- end
83
-
84
- context "with variants" do
85
- let(:option_type) { create(:option_type, name: "MyOptionType")}
86
- let(:option_value1) { create(:option_value, name: "OptionValue1", option_type: option_type)}
87
- let(:option_value2) { create(:option_value, name: "OptionValue2", option_type: option_type)}
88
-
89
- let!(:variant1) { create(:variant, product: product, option_values: [option_value1]) }
90
- let!(:variant2) { create(:variant, product: product, option_values: [option_value2]) }
91
-
92
- it "will duplciate the variants" do
93
- # will change the count by 3, since there will be a master variant as well
94
- expect{duplicator.duplicate}.to change{Spree::Variant.count}.by(3)
95
- end
96
-
97
- it "will not duplicate the option values" do
98
- expect{duplicator.duplicate}.to change{Spree::OptionValue.count}.by(0)
99
- end
100
-
101
- end
102
- end
103
- end