spree_core 3.3.0.rc1 → 3.3.0.rc2

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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/mailers/spree/base_mailer.rb +5 -0
  4. data/app/models/spree/ability.rb +4 -1
  5. data/app/models/spree/image.rb +6 -2
  6. data/app/models/spree/order.rb +10 -9
  7. data/app/models/spree/order/payments.rb +1 -1
  8. data/app/models/spree/payment_method/store_credit.rb +4 -0
  9. data/app/models/spree/shipment.rb +2 -0
  10. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
  11. data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
  12. data/config/routes.rb +0 -3
  13. data/lib/spree/core/components.rb +17 -0
  14. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  15. data/lib/spree/core/engine.rb +1 -0
  16. data/lib/spree/core/validators/email.rb +1 -5
  17. data/lib/spree/core/version.rb +1 -1
  18. data/spree_core.gemspec +1 -1
  19. metadata +4 -204
  20. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
  21. data/spec/fixtures/thinking-cat.jpg +0 -0
  22. data/spec/helpers/base_helper_spec.rb +0 -200
  23. data/spec/helpers/products_helper_spec.rb +0 -289
  24. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  25. data/spec/lib/i18n_spec.rb +0 -123
  26. data/spec/lib/search/base_spec.rb +0 -86
  27. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  28. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  29. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  30. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  31. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  32. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  33. data/spec/lib/spree/core/importer/order_spec.rb +0 -607
  34. data/spec/lib/spree/core/number_generator_spec.rb +0 -139
  35. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  36. data/spec/lib/spree/core/validators/email_spec.rb +0 -54
  37. data/spec/lib/spree/core_spec.rb +0 -23
  38. data/spec/lib/spree/localized_number_spec.rb +0 -54
  39. data/spec/lib/spree/migrations_spec.rb +0 -36
  40. data/spec/lib/spree/money_spec.rb +0 -122
  41. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  42. data/spec/mailers/order_mailer_spec.rb +0 -122
  43. data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
  44. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  45. data/spec/mailers/test_mailer_spec.rb +0 -38
  46. data/spec/models/spree/ability_spec.rb +0 -251
  47. data/spec/models/spree/address_spec.rb +0 -402
  48. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  49. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  50. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  51. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  52. data/spec/models/spree/adjustment_spec.rb +0 -189
  53. data/spec/models/spree/app_configuration_spec.rb +0 -26
  54. data/spec/models/spree/asset_spec.rb +0 -28
  55. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  56. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  57. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  58. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  59. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  60. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  61. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  62. data/spec/models/spree/calculator/shipping.rb +0 -8
  63. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  64. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  65. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  66. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  67. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  68. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  69. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  70. data/spec/models/spree/calculator_spec.rb +0 -69
  71. data/spec/models/spree/classification_spec.rb +0 -93
  72. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  73. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  74. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  75. data/spec/models/spree/country_spec.rb +0 -55
  76. data/spec/models/spree/credit_card_spec.rb +0 -328
  77. data/spec/models/spree/customer_return_spec.rb +0 -240
  78. data/spec/models/spree/exchange_spec.rb +0 -75
  79. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  80. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  81. data/spec/models/spree/gateway_spec.rb +0 -61
  82. data/spec/models/spree/image_spec.rb +0 -8
  83. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  84. data/spec/models/spree/line_item_spec.rb +0 -348
  85. data/spec/models/spree/option_type_prototype_spec.rb +0 -9
  86. data/spec/models/spree/option_type_spec.rb +0 -14
  87. data/spec/models/spree/option_value_spec.rb +0 -18
  88. data/spec/models/spree/order/address_spec.rb +0 -50
  89. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  90. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  91. data/spec/models/spree/order/checkout_spec.rb +0 -770
  92. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  93. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  94. data/spec/models/spree/order/helpers_spec.rb +0 -5
  95. data/spec/models/spree/order/payment_spec.rb +0 -214
  96. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  97. data/spec/models/spree/order/shipments_spec.rb +0 -43
  98. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  99. data/spec/models/spree/order/store_credit_spec.rb +0 -457
  100. data/spec/models/spree/order/tax_spec.rb +0 -84
  101. data/spec/models/spree/order/totals_spec.rb +0 -24
  102. data/spec/models/spree/order/updating_spec.rb +0 -18
  103. data/spec/models/spree/order/validations_spec.rb +0 -15
  104. data/spec/models/spree/order_contents_spec.rb +0 -332
  105. data/spec/models/spree/order_inventory_spec.rb +0 -247
  106. data/spec/models/spree/order_merger_spec.rb +0 -135
  107. data/spec/models/spree/order_spec.rb +0 -1067
  108. data/spec/models/spree/order_updater_spec.rb +0 -305
  109. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  110. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  111. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  112. data/spec/models/spree/payment_method_spec.rb +0 -108
  113. data/spec/models/spree/payment_spec.rb +0 -922
  114. data/spec/models/spree/preference_spec.rb +0 -80
  115. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  116. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  118. data/spec/models/spree/preferences/store_spec.rb +0 -46
  119. data/spec/models/spree/price_spec.rb +0 -128
  120. data/spec/models/spree/product/scopes_spec.rb +0 -174
  121. data/spec/models/spree/product_duplicator_spec.rb +0 -102
  122. data/spec/models/spree/product_filter_spec.rb +0 -26
  123. data/spec/models/spree/product_option_type_spec.rb +0 -9
  124. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  125. data/spec/models/spree/product_property_spec.rb +0 -26
  126. data/spec/models/spree/product_spec.rb +0 -626
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  129. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  131. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  132. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  133. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  136. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  139. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  140. data/spec/models/spree/promotion_action_spec.rb +0 -10
  141. data/spec/models/spree/promotion_category_spec.rb +0 -17
  142. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  143. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  144. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  145. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  146. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  147. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  148. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  149. data/spec/models/spree/promotion_spec.rb +0 -674
  150. data/spec/models/spree/property_prototype_spec.rb +0 -9
  151. data/spec/models/spree/property_spec.rb +0 -5
  152. data/spec/models/spree/prototype_spec.rb +0 -5
  153. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  154. data/spec/models/spree/refund_reason_spec.rb +0 -20
  155. data/spec/models/spree/refund_spec.rb +0 -195
  156. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  157. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  158. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  159. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  160. data/spec/models/spree/reimbursement_spec.rb +0 -188
  161. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  162. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  163. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  164. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  165. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  166. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  167. data/spec/models/spree/return_authorization_spec.rb +0 -230
  168. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  169. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  170. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  171. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  172. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  173. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  174. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  175. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  176. data/spec/models/spree/return_item_spec.rb +0 -734
  177. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  178. data/spec/models/spree/role_spec.rb +0 -7
  179. data/spec/models/spree/shipment_spec.rb +0 -744
  180. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  181. data/spec/models/spree/shipping_category_spec.rb +0 -19
  182. data/spec/models/spree/shipping_method_spec.rb +0 -125
  183. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  184. data/spec/models/spree/state_spec.rb +0 -29
  185. data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
  186. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  187. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  188. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  189. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  190. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
  191. data/spec/models/spree/stock/package_spec.rb +0 -182
  192. data/spec/models/spree/stock/packer_spec.rb +0 -70
  193. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  194. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  195. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  196. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  197. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  198. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  199. data/spec/models/spree/stock_item_spec.rb +0 -465
  200. data/spec/models/spree/stock_location_spec.rb +0 -243
  201. data/spec/models/spree/stock_movement_spec.rb +0 -120
  202. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  203. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  204. data/spec/models/spree/store_credit_spec.rb +0 -798
  205. data/spec/models/spree/store_spec.rb +0 -78
  206. data/spec/models/spree/tax_category_spec.rb +0 -32
  207. data/spec/models/spree/tax_rate_spec.rb +0 -561
  208. data/spec/models/spree/taxon_spec.rb +0 -93
  209. data/spec/models/spree/taxonomy_spec.rb +0 -18
  210. data/spec/models/spree/tracker_spec.rb +0 -21
  211. data/spec/models/spree/user_spec.rb +0 -203
  212. data/spec/models/spree/variant_spec.rb +0 -818
  213. data/spec/models/spree/zone_member_spec.rb +0 -38
  214. data/spec/models/spree/zone_spec.rb +0 -472
  215. data/spec/spec_helper.rb +0 -82
  216. data/spec/support/big_decimal.rb +0 -5
  217. data/spec/support/concerns/adjustment_source.rb +0 -23
  218. data/spec/support/concerns/default_price.rb +0 -37
  219. data/spec/support/rake.rb +0 -13
  220. data/spec/support/test_gateway.rb +0 -2
@@ -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,344 +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 string" do
220
- @a.set_preference(:is_hash, "{\"0\"=>{\"answer\"=>\"1\", \"value\"=>\"No\"}}")
221
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
222
- end
223
-
224
- it "with boolean" do
225
- @a.set_preference(:is_hash, false)
226
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
227
- @a.set_preference(:is_hash, true)
228
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
229
- end
230
-
231
- it "with simple array" do
232
- @a.set_preference(:is_hash, ["key", "value", "another key", "another value"])
233
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
234
- expect(@a.preferences[:is_hash]["key"]).to eq("value")
235
- expect(@a.preferences[:is_hash]["another key"]).to eq("another value")
236
- end
237
-
238
- it "with a nested array" do
239
- @a.set_preference(:is_hash, [["key", "value"], ["another key", "another value"]])
240
- expect(@a.preferences[:is_hash]).to be_is_a(Hash)
241
- expect(@a.preferences[:is_hash]["key"]).to eq("value")
242
- expect(@a.preferences[:is_hash]["another key"]).to eq("another value")
243
- end
244
-
245
- it "with single array" do
246
- expect { @a.set_preference(:is_hash, ["key"]) }.to raise_error(ArgumentError)
247
- end
248
- end
249
-
250
- context "converts any preferences to any values" do
251
- before do
252
- A.preference :product_ids, :any, default: []
253
- A.preference :product_attributes, :any, default: {}
254
- end
255
-
256
- it "with array" do
257
- expect(@a.preferences[:product_ids]).to eq([])
258
- @a.set_preference(:product_ids, [1, 2])
259
- expect(@a.preferences[:product_ids]).to eq([1, 2])
260
- end
261
-
262
- it "with hash" do
263
- expect(@a.preferences[:product_attributes]).to eq({})
264
- @a.set_preference(:product_attributes, {id: 1, name: 2})
265
- expect(@a.preferences[:product_attributes]).to eq({id: 1, name: 2})
266
- end
267
- end
268
-
269
- end
270
-
271
- describe "persisted preferables" do
272
- before(:all) do
273
- class CreatePrefTest < ActiveRecord::Migration[4.2]
274
- def self.up
275
- create_table :pref_tests do |t|
276
- t.string :col
277
- t.text :preferences
278
- end
279
- end
280
-
281
- def self.down
282
- drop_table :pref_tests
283
- end
284
- end
285
-
286
- @migration_verbosity = ActiveRecord::Migration.verbose
287
- ActiveRecord::Migration.verbose = false
288
- CreatePrefTest.migrate(:up)
289
-
290
- class PrefTest < Spree::Base
291
- preference :pref_test_pref, :string, default: 'abc'
292
- preference :pref_test_any, :any, default: []
293
- end
294
- end
295
-
296
- after(:all) do
297
- CreatePrefTest.migrate(:down)
298
- ActiveRecord::Migration.verbose = @migration_verbosity
299
- end
300
-
301
- before(:each) do
302
- # load PrefTest table
303
- PrefTest.first
304
- @pt = PrefTest.create
305
- end
306
-
307
- describe "pending preferences for new activerecord objects" do
308
- it "saves preferences after record is saved" do
309
- pr = PrefTest.new
310
- pr.set_preference(:pref_test_pref, 'XXX')
311
- expect(pr.get_preference(:pref_test_pref)).to eq('XXX')
312
- pr.save!
313
- expect(pr.get_preference(:pref_test_pref)).to eq('XXX')
314
- end
315
-
316
- it "saves preferences for serialized object" do
317
- pr = PrefTest.new
318
- pr.set_preference(:pref_test_any, [1, 2])
319
- expect(pr.get_preference(:pref_test_any)).to eq([1, 2])
320
- pr.save!
321
- expect(pr.get_preference(:pref_test_any)).to eq([1, 2])
322
- end
323
- end
324
-
325
- it "clear preferences" do
326
- @pt.set_preference(:pref_test_pref, 'xyz')
327
- expect(@pt.preferred_pref_test_pref).to eq('xyz')
328
- @pt.clear_preferences
329
- expect(@pt.preferred_pref_test_pref).to eq('abc')
330
- end
331
-
332
- it "clear preferences when record is deleted" do
333
- @pt.save!
334
- @pt.preferred_pref_test_pref = 'lmn'
335
- @pt.save!
336
- @pt.destroy
337
- @pt1 = PrefTest.new(col: 'aaaa')
338
- @pt1.id = @pt.id
339
- @pt1.save!
340
- expect(@pt1.get_preference(:pref_test_pref)).to eq('abc')
341
- end
342
- end
343
-
344
- end