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,80 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Preference, :type => :model do
4
-
5
- it "should require a key" do
6
- @preference = Spree::Preference.new
7
- @preference.key = :test
8
- @preference.value = true
9
- expect(@preference).to be_valid
10
- end
11
-
12
- describe "type coversion for values" do
13
- def round_trip_preference(key, value)
14
- p = Spree::Preference.new
15
- p.value = value
16
- p.key = key
17
- p.save
18
-
19
- Spree::Preference.find_by_key(key)
20
- end
21
-
22
- it ":boolean" do
23
- value = true
24
- key = "boolean_key"
25
- pref = round_trip_preference(key, value)
26
- expect(pref.value).to eq value
27
- end
28
-
29
- it "false :boolean" do
30
- value = false
31
- key = "boolean_key"
32
- pref = round_trip_preference(key, value)
33
- expect(pref.value).to eq value
34
- end
35
-
36
- it ":integer" do
37
- value = 10
38
- key = "integer_key"
39
- pref = round_trip_preference(key, value)
40
- expect(pref.value).to eq value
41
- end
42
-
43
- it ":decimal" do
44
- value = 1.5
45
- key = "decimal_key"
46
- pref = round_trip_preference(key, value)
47
- expect(pref.value).to eq value
48
- end
49
-
50
- it ":string" do
51
- value = "This is a string"
52
- key = "string_key"
53
- pref = round_trip_preference(key, value)
54
- expect(pref.value).to eq value
55
- end
56
-
57
- it ":text" do
58
- value = "This is a string stored as text"
59
- key = "text_key"
60
- pref = round_trip_preference(key, value)
61
- expect(pref.value).to eq value
62
- end
63
-
64
- it ":password" do
65
- value = "This is a password"
66
- key = "password_key"
67
- pref = round_trip_preference(key, value)
68
- expect(pref.value).to eq value
69
- end
70
-
71
- it ":any" do
72
- value = [1, 2]
73
- key = "any_key"
74
- pref = round_trip_preference(key, value)
75
- expect(pref.value).to eq value
76
- end
77
-
78
- end
79
-
80
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Preferences::Configuration, :type => :model do
4
-
5
- before :all do
6
- class AppConfig < Spree::Preferences::Configuration
7
- preference :color, :string, :default => :blue
8
- end
9
- @config = AppConfig.new
10
- end
11
-
12
- it "has named methods to access preferences" do
13
- @config.color = 'orange'
14
- expect(@config.color).to eq 'orange'
15
- end
16
-
17
- it "uses [ ] to access preferences" do
18
- @config[:color] = 'red'
19
- expect(@config[:color]).to eq 'red'
20
- end
21
-
22
- it "uses set/get to access preferences" do
23
- @config.set :color, 'green'
24
- expect(@config.get(:color)).to eq 'green'
25
- end
26
-
27
- end
28
-
29
-
30
-
@@ -1,348 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Preferences::Preferable, :type => :model do
4
-
5
- before :all do
6
- class A
7
- include Spree::Preferences::Preferable
8
- attr_reader :id
9
-
10
- def initialize
11
- @id = rand(999)
12
- end
13
-
14
- def preferences
15
- @preferences ||= default_preferences
16
- end
17
-
18
- preference :color, :string, :default => 'green'
19
- end
20
-
21
- class B < A
22
- preference :flavor, :string
23
- end
24
- end
25
-
26
- before :each do
27
- @a = A.new
28
- allow(@a).to receive_messages(:persisted? => true)
29
- @b = B.new
30
- allow(@b).to receive_messages(:persisted? => true)
31
-
32
- # ensure we're persisting as that is the default
33
- #
34
- store = Spree::Preferences::Store.instance
35
- store.persistence = true
36
- end
37
-
38
- describe "preference definitions" do
39
- it "parent should not see child definitions" do
40
- expect(@a.has_preference?(:color)).to be true
41
- expect(@a.has_preference?(:flavor)).not_to be true
42
- end
43
-
44
- it "child should have parent and own definitions" do
45
- expect(@b.has_preference?(:color)).to be true
46
- expect(@b.has_preference?(:flavor)).to be true
47
- end
48
-
49
- it "instances have defaults" do
50
- expect(@a.preferred_color).to eq 'green'
51
- expect(@b.preferred_color).to eq 'green'
52
- expect(@b.preferred_flavor).to be_nil
53
- end
54
-
55
- it "can be asked if it has a preference definition" do
56
- expect(@a.has_preference?(:color)).to be true
57
- expect(@a.has_preference?(:bad)).to be false
58
- end
59
-
60
- it "can be asked and raises" do
61
- expect {
62
- @a.has_preference! :flavor
63
- }.to raise_error(NoMethodError, "flavor preference not defined")
64
- end
65
-
66
- it "has a type" do
67
- expect(@a.preferred_color_type).to eq :string
68
- expect(@a.preference_type(:color)).to eq :string
69
- end
70
-
71
- it "has a default" do
72
- expect(@a.preferred_color_default).to eq 'green'
73
- expect(@a.preference_default(:color)).to eq 'green'
74
- end
75
-
76
- it "raises if not defined" do
77
- expect {
78
- @a.get_preference :flavor
79
- }.to raise_error(NoMethodError, "flavor preference not defined")
80
- end
81
-
82
- end
83
-
84
- describe "preference access" do
85
- it "handles ghost methods for preferences" do
86
- @a.preferred_color = 'blue'
87
- expect(@a.preferred_color).to eq 'blue'
88
- end
89
-
90
- it "parent and child instances have their own prefs" do
91
- @a.preferred_color = 'red'
92
- @b.preferred_color = 'blue'
93
-
94
- expect(@a.preferred_color).to eq 'red'
95
- expect(@b.preferred_color).to eq 'blue'
96
- end
97
-
98
- it "raises when preference not defined" do
99
- expect {
100
- @a.set_preference(:bad, :bone)
101
- }.to raise_exception(NoMethodError, "bad preference not defined")
102
- end
103
-
104
- it "builds a hash of preferences" do
105
- @b.preferred_flavor = :strawberry
106
- expect(@b.preferences[:flavor]).to eq 'strawberry'
107
- expect(@b.preferences[:color]).to eq 'green' #default from A
108
- end
109
-
110
- it "builds a hash of preference defaults" do
111
- expect(@b.default_preferences).to eq({
112
- flavor: nil,
113
- color: 'green'
114
- })
115
- end
116
-
117
- context "converts integer preferences to integer values" do
118
- before do
119
- A.preference :is_integer, :integer
120
- end
121
-
122
- it "with strings" do
123
- @a.set_preference(:is_integer, '3')
124
- expect(@a.preferences[:is_integer]).to eq(3)
125
-
126
- @a.set_preference(:is_integer, '')
127
- expect(@a.preferences[:is_integer]).to eq(0)
128
- end
129
-
130
- end
131
-
132
- context "converts decimal preferences to BigDecimal values" do
133
- before do
134
- A.preference :if_decimal, :decimal
135
- end
136
-
137
- it "returns a BigDecimal" do
138
- @a.set_preference(:if_decimal, 3.3)
139
- expect(@a.preferences[:if_decimal].class).to eq(BigDecimal)
140
- end
141
-
142
- it "with strings" do
143
- @a.set_preference(:if_decimal, '3.3')
144
- expect(@a.preferences[:if_decimal]).to eq(3.3)
145
-
146
- @a.set_preference(:if_decimal, '')
147
- expect(@a.preferences[:if_decimal]).to eq(0.0)
148
- end
149
- end
150
-
151
- context "converts boolean preferences to boolean values" do
152
- before do
153
- A.preference :is_boolean, :boolean, :default => true
154
- end
155
-
156
- it "with strings" do
157
- @a.set_preference(:is_boolean, '0')
158
- expect(@a.preferences[:is_boolean]).to be false
159
- @a.set_preference(:is_boolean, 'f')
160
- expect(@a.preferences[:is_boolean]).to be false
161
- @a.set_preference(:is_boolean, 't')
162
- expect(@a.preferences[:is_boolean]).to be true
163
- end
164
-
165
- it "with integers" do
166
- @a.set_preference(:is_boolean, 0)
167
- expect(@a.preferences[:is_boolean]).to be false
168
- @a.set_preference(:is_boolean, 1)
169
- expect(@a.preferences[:is_boolean]).to be true
170
- end
171
-
172
- it "with an empty string" do
173
- @a.set_preference(:is_boolean, '')
174
- expect(@a.preferences[:is_boolean]).to be false
175
- end
176
-
177
- it "with an empty hash" do
178
- @a.set_preference(:is_boolean, [])
179
- expect(@a.preferences[:is_boolean]).to be false
180
- end
181
- end
182
-
183
- context "converts array preferences to array values" do
184
- before do
185
- A.preference :is_array, :array, default: []
186
- end
187
-
188
- it "with arrays" do
189
- @a.set_preference(:is_array, [])
190
- expect(@a.preferences[:is_array]).to be_is_a(Array)
191
- end
192
-
193
- it "with string" do
194
- @a.set_preference(:is_array, "string")
195
- expect(@a.preferences[:is_array]).to be_is_a(Array)
196
- end
197
-
198
- it "with hash" do
199
- @a.set_preference(:is_array, {})
200
- expect(@a.preferences[:is_array]).to be_is_a(Array)
201
- end
202
- end
203
-
204
- context "converts hash preferences to hash values" do
205
- before do
206
- A.preference :is_hash, :hash, default: {}
207
- end
208
-
209
- it "with hash" do
210
- @a.set_preference(:is_hash, {})
211
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
212
- end
213
-
214
- it "with hash and keys are integers" do
215
- @a.set_preference(:is_hash, {1 => 2, 3 => 4})
216
- expect(@a.preferences[:is_hash]).to eql({1 => 2, 3 => 4})
217
- end
218
-
219
- it "with ancestor of a hash" do
220
- ancestor_of_hash = ActionController::Parameters.new({ key: :value })
221
- @a.set_preference(:is_hash, ancestor_of_hash)
222
- expect(@a.preferences[:is_hash]).to eql({"key" => :value})
223
- end
224
-
225
- it "with string" do
226
- @a.set_preference(:is_hash, "{\"0\"=>{\"answer\"=>\"1\", \"value\"=>\"No\"}}")
227
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
228
- end
229
-
230
- it "with boolean" do
231
- @a.set_preference(:is_hash, false)
232
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
233
- @a.set_preference(:is_hash, true)
234
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
235
- end
236
-
237
- it "with simple array" do
238
- @a.set_preference(:is_hash, ["key", "value", "another key", "another value"])
239
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
240
- expect(@a.preferences[:is_hash]["key"]).to eq("value")
241
- expect(@a.preferences[:is_hash]["another key"]).to eq("another value")
242
- end
243
-
244
- it "with a nested array" do
245
- @a.set_preference(:is_hash, [["key", "value"], ["another key", "another value"]])
246
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
247
- expect(@a.preferences[:is_hash]["key"]).to eq("value")
248
- expect(@a.preferences[:is_hash]["another key"]).to eq("another value")
249
- end
250
-
251
- it "with single array" do
252
- expect { @a.set_preference(:is_hash, ["key"]) }.to raise_error(ArgumentError)
253
- end
254
- end
255
-
256
- context "converts any preferences to any values" do
257
- before do
258
- A.preference :product_ids, :any, :default => []
259
- A.preference :product_attributes, :any, :default => {}
260
- end
261
-
262
- it "with array" do
263
- expect(@a.preferences[:product_ids]).to eq([])
264
- @a.set_preference(:product_ids, [1, 2])
265
- expect(@a.preferences[:product_ids]).to eq([1, 2])
266
- end
267
-
268
- it "with hash" do
269
- expect(@a.preferences[:product_attributes]).to eq({})
270
- @a.set_preference(:product_attributes, {:id => 1, :name => 2})
271
- expect(@a.preferences[:product_attributes]).to eq({:id => 1, :name => 2})
272
- end
273
- end
274
-
275
- end
276
-
277
- describe "persisted preferables" do
278
- before(:all) do
279
- class CreatePrefTest < ActiveRecord::Migration
280
- def self.up
281
- create_table :pref_tests do |t|
282
- t.string :col
283
- t.text :preferences
284
- end
285
- end
286
-
287
- def self.down
288
- drop_table :pref_tests
289
- end
290
- end
291
-
292
- @migration_verbosity = ActiveRecord::Migration.verbose
293
- ActiveRecord::Migration.verbose = false
294
- CreatePrefTest.migrate(:up)
295
-
296
- class PrefTest < Spree::Base
297
- preference :pref_test_pref, :string, :default => 'abc'
298
- preference :pref_test_any, :any, :default => []
299
- end
300
- end
301
-
302
- after(:all) do
303
- CreatePrefTest.migrate(:down)
304
- ActiveRecord::Migration.verbose = @migration_verbosity
305
- end
306
-
307
- before(:each) do
308
- @pt = PrefTest.create
309
- end
310
-
311
- describe "pending preferences for new activerecord objects" do
312
- it "saves preferences after record is saved" do
313
- pr = PrefTest.new
314
- pr.set_preference(:pref_test_pref, 'XXX')
315
- expect(pr.get_preference(:pref_test_pref)).to eq('XXX')
316
- pr.save!
317
- expect(pr.get_preference(:pref_test_pref)).to eq('XXX')
318
- end
319
-
320
- it "saves preferences for serialized object" do
321
- pr = PrefTest.new
322
- pr.set_preference(:pref_test_any, [1, 2])
323
- expect(pr.get_preference(:pref_test_any)).to eq([1, 2])
324
- pr.save!
325
- expect(pr.get_preference(:pref_test_any)).to eq([1, 2])
326
- end
327
- end
328
-
329
- it "clear preferences" do
330
- @pt.set_preference(:pref_test_pref, 'xyz')
331
- expect(@pt.preferred_pref_test_pref).to eq('xyz')
332
- @pt.clear_preferences
333
- expect(@pt.preferred_pref_test_pref).to eq('abc')
334
- end
335
-
336
- it "clear preferences when record is deleted" do
337
- @pt.save!
338
- @pt.preferred_pref_test_pref = 'lmn'
339
- @pt.save!
340
- @pt.destroy
341
- @pt1 = PrefTest.new(:col => 'aaaa')
342
- @pt1.id = @pt.id
343
- @pt1.save!
344
- expect(@pt1.get_preference(:pref_test_pref)).to eq('abc')
345
- end
346
- end
347
-
348
- end