spree_core 3.2.1 → 3.2.2

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 (207) hide show
  1. checksums.yaml +4 -4
  2. data/lib/spree/core/version.rb +1 -1
  3. data/spree_core.gemspec +1 -1
  4. metadata +3 -206
  5. data/spec/fixtures/microdata.html +0 -22
  6. data/spec/fixtures/microdata_itemref.html +0 -15
  7. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  8. data/spec/fixtures/thinking-cat.jpg +0 -0
  9. data/spec/helpers/base_helper_spec.rb +0 -200
  10. data/spec/helpers/products_helper_spec.rb +0 -289
  11. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  12. data/spec/lib/i18n_spec.rb +0 -123
  13. data/spec/lib/search/base_spec.rb +0 -86
  14. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  15. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  16. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  17. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  18. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  19. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  20. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  21. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  22. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  23. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  24. data/spec/lib/spree/core_spec.rb +0 -23
  25. data/spec/lib/spree/localized_number_spec.rb +0 -48
  26. data/spec/lib/spree/migrations_spec.rb +0 -36
  27. data/spec/lib/spree/money_spec.rb +0 -122
  28. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  29. data/spec/mailers/order_mailer_spec.rb +0 -122
  30. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  31. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  32. data/spec/mailers/test_mailer_spec.rb +0 -38
  33. data/spec/models/option_type_prototype_spec.rb +0 -9
  34. data/spec/models/spree/ability_spec.rb +0 -251
  35. data/spec/models/spree/address_spec.rb +0 -402
  36. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  37. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  38. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  39. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  40. data/spec/models/spree/adjustment_spec.rb +0 -189
  41. data/spec/models/spree/app_configuration_spec.rb +0 -26
  42. data/spec/models/spree/asset_spec.rb +0 -28
  43. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  44. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  45. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  46. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  47. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  48. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  49. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  50. data/spec/models/spree/calculator/shipping.rb +0 -8
  51. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  52. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  53. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  54. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  55. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  56. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  57. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  58. data/spec/models/spree/calculator_spec.rb +0 -69
  59. data/spec/models/spree/classification_spec.rb +0 -93
  60. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  61. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  62. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  63. data/spec/models/spree/country_spec.rb +0 -55
  64. data/spec/models/spree/credit_card_spec.rb +0 -328
  65. data/spec/models/spree/customer_return_spec.rb +0 -240
  66. data/spec/models/spree/exchange_spec.rb +0 -75
  67. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  68. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  69. data/spec/models/spree/gateway_spec.rb +0 -61
  70. data/spec/models/spree/image_spec.rb +0 -8
  71. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  72. data/spec/models/spree/line_item_spec.rb +0 -346
  73. data/spec/models/spree/option_type_spec.rb +0 -14
  74. data/spec/models/spree/option_value_spec.rb +0 -18
  75. data/spec/models/spree/order/address_spec.rb +0 -50
  76. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  77. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  78. data/spec/models/spree/order/checkout_spec.rb +0 -770
  79. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  80. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  81. data/spec/models/spree/order/helpers_spec.rb +0 -5
  82. data/spec/models/spree/order/payment_spec.rb +0 -214
  83. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  84. data/spec/models/spree/order/shipments_spec.rb +0 -43
  85. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  86. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  87. data/spec/models/spree/order/tax_spec.rb +0 -84
  88. data/spec/models/spree/order/totals_spec.rb +0 -24
  89. data/spec/models/spree/order/updating_spec.rb +0 -18
  90. data/spec/models/spree/order/validations_spec.rb +0 -15
  91. data/spec/models/spree/order_contents_spec.rb +0 -297
  92. data/spec/models/spree/order_inventory_spec.rb +0 -239
  93. data/spec/models/spree/order_merger_spec.rb +0 -135
  94. data/spec/models/spree/order_spec.rb +0 -1046
  95. data/spec/models/spree/order_updater_spec.rb +0 -305
  96. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  97. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  98. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  99. data/spec/models/spree/payment_method_spec.rb +0 -103
  100. data/spec/models/spree/payment_spec.rb +0 -919
  101. data/spec/models/spree/preference_spec.rb +0 -80
  102. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  103. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  104. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  105. data/spec/models/spree/preferences/store_spec.rb +0 -46
  106. data/spec/models/spree/price_spec.rb +0 -128
  107. data/spec/models/spree/product/scopes_spec.rb +0 -183
  108. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  109. data/spec/models/spree/product_filter_spec.rb +0 -26
  110. data/spec/models/spree/product_option_type_spec.rb +0 -9
  111. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  112. data/spec/models/spree/product_property_spec.rb +0 -26
  113. data/spec/models/spree/product_spec.rb +0 -629
  114. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  115. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  116. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  117. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  118. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  119. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  120. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  121. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  122. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  123. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  124. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  125. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  126. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  127. data/spec/models/spree/promotion_action_spec.rb +0 -10
  128. data/spec/models/spree/promotion_category_spec.rb +0 -17
  129. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  130. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  131. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  132. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  133. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  134. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  135. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  136. data/spec/models/spree/promotion_spec.rb +0 -679
  137. data/spec/models/spree/property_prototype_spec.rb +0 -9
  138. data/spec/models/spree/property_spec.rb +0 -5
  139. data/spec/models/spree/prototype_spec.rb +0 -5
  140. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  141. data/spec/models/spree/refund_reason_spec.rb +0 -20
  142. data/spec/models/spree/refund_spec.rb +0 -195
  143. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  144. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  145. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  146. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  147. data/spec/models/spree/reimbursement_spec.rb +0 -188
  148. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  149. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  150. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  151. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  152. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  153. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  154. data/spec/models/spree/return_authorization_spec.rb +0 -230
  155. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  156. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  157. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  158. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  159. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  160. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  161. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  162. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  163. data/spec/models/spree/return_item_spec.rb +0 -731
  164. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  165. data/spec/models/spree/role_spec.rb +0 -7
  166. data/spec/models/spree/shipment_spec.rb +0 -742
  167. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  168. data/spec/models/spree/shipping_category_spec.rb +0 -19
  169. data/spec/models/spree/shipping_method_spec.rb +0 -95
  170. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  171. data/spec/models/spree/state_spec.rb +0 -29
  172. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  173. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  174. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  175. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  176. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  177. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  178. data/spec/models/spree/stock/package_spec.rb +0 -182
  179. data/spec/models/spree/stock/packer_spec.rb +0 -70
  180. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  181. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  182. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  183. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  184. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  185. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  186. data/spec/models/spree/stock_item_spec.rb +0 -432
  187. data/spec/models/spree/stock_location_spec.rb +0 -243
  188. data/spec/models/spree/stock_movement_spec.rb +0 -120
  189. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  190. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  191. data/spec/models/spree/store_credit_spec.rb +0 -786
  192. data/spec/models/spree/store_spec.rb +0 -78
  193. data/spec/models/spree/tax_category_spec.rb +0 -32
  194. data/spec/models/spree/tax_rate_spec.rb +0 -561
  195. data/spec/models/spree/taxon_spec.rb +0 -85
  196. data/spec/models/spree/taxonomy_spec.rb +0 -18
  197. data/spec/models/spree/tracker_spec.rb +0 -21
  198. data/spec/models/spree/user_spec.rb +0 -203
  199. data/spec/models/spree/variant_spec.rb +0 -818
  200. data/spec/models/spree/zone_member_spec.rb +0 -38
  201. data/spec/models/spree/zone_spec.rb +0 -472
  202. data/spec/spec_helper.rb +0 -79
  203. data/spec/support/big_decimal.rb +0 -5
  204. data/spec/support/concerns/adjustment_source.rb +0 -23
  205. data/spec/support/concerns/default_price.rb +0 -37
  206. data/spec/support/rake.rb +0 -13
  207. 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