preferences 0.0.1
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.
- data/CHANGELOG +5 -0
- data/MIT-LICENSE +20 -0
- data/README +146 -0
- data/Rakefile +80 -0
- data/app/models/preference.rb +34 -0
- data/init.rb +1 -0
- data/lib/preferences/preference_definition.rb +50 -0
- data/lib/preferences.rb +235 -0
- data/test/app_root/app/models/car.rb +2 -0
- data/test/app_root/app/models/user.rb +7 -0
- data/test/app_root/config/environment.rb +9 -0
- data/test/app_root/db/migrate/001_create_users.rb +11 -0
- data/test/app_root/db/migrate/002_create_cars.rb +11 -0
- data/test/app_root/db/migrate/003_migrate_preferences_to_version_1.rb +9 -0
- data/test/app_root/log/in_memory.log +9137 -0
- data/test/factory.rb +45 -0
- data/test/functional/preferences_test.rb +259 -0
- data/test/test_helper.rb +13 -0
- data/test/unit/preference_definition_test.rb +185 -0
- data/test/unit/preference_test.rb +145 -0
- metadata +85 -0
data/test/factory.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module Factory
|
2
|
+
# Build actions for the class
|
3
|
+
def self.build(klass, &block)
|
4
|
+
name = klass.to_s.underscore
|
5
|
+
define_method("#{name}_attributes", block)
|
6
|
+
|
7
|
+
module_eval <<-end_eval
|
8
|
+
def valid_#{name}_attributes(attributes = {})
|
9
|
+
#{name}_attributes(attributes)
|
10
|
+
attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_#{name}(attributes = {})
|
14
|
+
#{klass}.new(valid_#{name}_attributes(attributes))
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_#{name}(*args)
|
18
|
+
record = new_#{name}(*args)
|
19
|
+
record.save!
|
20
|
+
record.reload
|
21
|
+
record
|
22
|
+
end
|
23
|
+
end_eval
|
24
|
+
end
|
25
|
+
|
26
|
+
build Car do |attributes|
|
27
|
+
attributes.reverse_merge!(
|
28
|
+
:name => 'Porsche'
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
build Preference do |attributes|
|
33
|
+
attributes[:owner] = create_user unless attributes.include?(:owner)
|
34
|
+
attributes.reverse_merge!(
|
35
|
+
:attribute => 'notifications',
|
36
|
+
:value => false
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
build User do |attributes|
|
41
|
+
attributes.reverse_merge!(
|
42
|
+
:login => 'admin'
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,259 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../test_helper"
|
2
|
+
|
3
|
+
class PreferencesTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@user = User.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_raise_exception_if_invalid_options_specified
|
9
|
+
assert_raise(ArgumentError) {User.preference :notifications, :invalid => true}
|
10
|
+
assert_raise(ArgumentError) {User.preference :notifications, :boolean, :invalid => true}
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_create_prefers_query_method
|
14
|
+
assert @user.respond_to?(:prefers_notifications?)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_create_prefers_writer
|
18
|
+
assert @user.respond_to?(:prefers_notifications=)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_create_preferred_reader
|
22
|
+
assert @user.respond_to?(:preferred_notifications)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_create_preferred_writer
|
26
|
+
assert @user.respond_to?(:preferred_notifications=)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_create_preference_definitions
|
30
|
+
assert User.respond_to?(:preference_definitions)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_include_new_definitions_in_preference_definitions
|
34
|
+
definition = User.preference :notifications
|
35
|
+
assert_equal definition, User.preference_definitions['notifications']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class UserByDefaultTest < Test::Unit::TestCase
|
40
|
+
def setup
|
41
|
+
@user = User.new
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_not_prefer_hot_salsa
|
45
|
+
assert_nil @user.preferred_hot_salsa
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_prefer_dark_chocolate
|
49
|
+
assert_equal true, @user.preferred_dark_chocolate
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_not_have_a_preferred_color
|
53
|
+
assert_nil @user.preferred_color
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_not_have_a_preferred_car
|
57
|
+
assert_nil @user.preferred_car
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_have_a_preferred_language
|
61
|
+
assert_equal 'English', @user.preferred_language
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class UserTest < Test::Unit::TestCase
|
66
|
+
def setup
|
67
|
+
@user = new_user
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_should_be_able_to_change_hot_salsa_preference
|
71
|
+
@user.prefers_hot_salsa = false
|
72
|
+
assert_equal false, @user.prefers_hot_salsa?
|
73
|
+
|
74
|
+
@user.prefers_hot_salsa = true
|
75
|
+
assert_equal true, @user.prefers_hot_salsa?
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_be_able_to_change_dark_chocolate_preference
|
79
|
+
@user.prefers_dark_chocolate = false
|
80
|
+
assert_equal false, @user.prefers_dark_chocolate?
|
81
|
+
|
82
|
+
@user.prefers_dark_chocolate = true
|
83
|
+
assert_equal true, @user.prefers_dark_chocolate?
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_be_able_to_change_color_preference
|
87
|
+
@user.preferred_color = 'blue'
|
88
|
+
assert_equal 'blue', @user.preferred_color
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_be_able_to_change_car_preference
|
92
|
+
@user.preferred_car = 1
|
93
|
+
assert_equal 1, @user.preferred_car
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_should_be_able_to_change_language_preference
|
97
|
+
@user.preferred_language = 'Latin'
|
98
|
+
assert_equal 'Latin', @user.preferred_language
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_be_able_to_use_generic_prefers_query_method
|
102
|
+
@user.prefers_hot_salsa = true
|
103
|
+
assert @user.prefers?(:hot_salsa)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_should_be_able_to_use_generic_preferred_method
|
107
|
+
@user.preferred_color = 'blue'
|
108
|
+
assert_equal 'blue', @user.preferred(:color)
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_should_be_able_to_use_generic_set_preference_method
|
112
|
+
@user.set_preference(:color, 'blue')
|
113
|
+
assert_equal 'blue', @user.preferred(:color)
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_should_still_be_new_record_after_changing_preference
|
117
|
+
@user.preferred_color = 'blue'
|
118
|
+
assert @user.new_record?
|
119
|
+
assert @user.preferences.empty?
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class UserAfterBeingCreatedTest < Test::Unit::TestCase
|
124
|
+
def setup
|
125
|
+
@user = create_user
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_should_not_have_any_preferences
|
129
|
+
assert @user.preferences.empty?
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class UserWithoutPreferencesTest < Test::Unit::TestCase
|
134
|
+
def setup
|
135
|
+
@user = create_user
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_should_not_prefer_hot_salsa
|
139
|
+
assert_nil @user.preferred_hot_salsa
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_should_prefer_dark_chocolate
|
143
|
+
assert_equal true, @user.preferred_dark_chocolate
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_should_not_have_a_preferred_color
|
147
|
+
assert_nil @user.preferred_color
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_should_not_have_a_preferred_car
|
151
|
+
assert_nil @user.preferred_car
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_should_have_a_preferred_language
|
155
|
+
assert_equal 'English', @user.preferred_language
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_should_not_save_record_after_changing_preference
|
159
|
+
@user.preferred_language = 'Latin'
|
160
|
+
|
161
|
+
user = User.find(@user.id)
|
162
|
+
assert_equal 'English', user.preferred_language
|
163
|
+
assert user.preferences.empty?
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
class UserWithPreferencesTest < Test::Unit::TestCase
|
168
|
+
def setup
|
169
|
+
@user = create_user
|
170
|
+
@user.preferred_language = 'Latin'
|
171
|
+
@user.save!
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_should_have_preferences
|
175
|
+
assert_equal 1, @user.preferences.size
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_should_not_remove_preference_if_set_to_default
|
179
|
+
@user.preferred_language = 'English'
|
180
|
+
@user.save!
|
181
|
+
@user.reload
|
182
|
+
assert_equal 1, @user.preferences.size
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_should_not_remove_preference_if_set_to_nil
|
186
|
+
@user.preferred_language = nil
|
187
|
+
@user.save!
|
188
|
+
@user.reload
|
189
|
+
assert_equal 1, @user.preferences.size
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_should_not_save_preference_if_model_is_not_saved
|
193
|
+
@user.preferred_language = 'English'
|
194
|
+
|
195
|
+
user = User.find(@user.id)
|
196
|
+
assert_equal 'Latin', user.preferred_language
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_should_modify_existing_preferences_when_saved
|
200
|
+
@user.preferred_language = 'Spanish'
|
201
|
+
assert @user.save
|
202
|
+
|
203
|
+
@user.reload
|
204
|
+
assert_equal 'Spanish', @user.preferred_language
|
205
|
+
assert_equal 1, @user.preferences.size
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_should_add_new_preferences_when_saved
|
209
|
+
@user.preferred_color = 'blue'
|
210
|
+
assert @user.save
|
211
|
+
|
212
|
+
@user.reload
|
213
|
+
assert_equal 'blue', @user.preferred_color
|
214
|
+
assert_equal 2, @user.preferences.size
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
class UserWithPreferencesForOtherModelsTest < Test::Unit::TestCase
|
219
|
+
def setup
|
220
|
+
@car = create_car
|
221
|
+
|
222
|
+
@user = create_user
|
223
|
+
@user.preferred_color = 'red', {:for => @car}
|
224
|
+
@user.save!
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_should_have_preferences
|
228
|
+
assert_equal 1, @user.preferences.size
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_should_not_have_preference_without_preferenced_record
|
232
|
+
assert_nil @user.preferred_color
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_should_have_preference_with_preferenced_record
|
236
|
+
assert_equal 'red', @user.preferred_color(:for => @car)
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_should_modify_existing_preferences_when_saved
|
240
|
+
@user.preferred_color = 'blue', {:for => @car}
|
241
|
+
assert @user.save
|
242
|
+
|
243
|
+
@user.reload
|
244
|
+
assert_equal 'blue', @user.preferred_color(:for => @car)
|
245
|
+
assert_equal 1, @user.preferences.size
|
246
|
+
end
|
247
|
+
|
248
|
+
def test_should_be_able_to_differentiate_between_preferenced_records
|
249
|
+
@different_car = create_car
|
250
|
+
|
251
|
+
@user.preferred_color = 'blue', {:for => @different_car}
|
252
|
+
assert @user.save
|
253
|
+
|
254
|
+
@user.reload
|
255
|
+
assert_equal 'red', @user.preferred_color(:for => @car)
|
256
|
+
assert_equal 'blue', @user.preferred_color(:for => @different_car)
|
257
|
+
assert_equal 2, @user.preferences.size
|
258
|
+
end
|
259
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Load the plugin testing framework
|
2
|
+
$:.unshift("#{File.dirname(__FILE__)}/../../plugin_test_helper/lib")
|
3
|
+
require 'rubygems'
|
4
|
+
require 'plugin_test_helper'
|
5
|
+
|
6
|
+
# Run the migrations
|
7
|
+
ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
|
8
|
+
|
9
|
+
# Mixin the factory helper
|
10
|
+
require File.expand_path("#{File.dirname(__FILE__)}/factory")
|
11
|
+
class Test::Unit::TestCase #:nodoc:
|
12
|
+
include Factory
|
13
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../test_helper"
|
2
|
+
|
3
|
+
class PreferenceDefinitionByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_have_an_attribute
|
9
|
+
assert_equal 'notifications', @definition.attribute
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_not_have_a_default_value
|
13
|
+
assert_nil @definition.default_value
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_type_cast_values_as_booleans
|
17
|
+
assert_equal nil, @definition.type_cast(nil)
|
18
|
+
assert_equal true, @definition.type_cast(true)
|
19
|
+
assert_equal false, @definition.type_cast(false)
|
20
|
+
assert_equal false, @definition.type_cast(0)
|
21
|
+
assert_equal true, @definition.type_cast(1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class PreferenceDefinitionTest < Test::Unit::TestCase
|
26
|
+
def test_should_raise_exception_if_invalid_option_specified
|
27
|
+
assert_raise(ArgumentError) {PluginAWeek::Preferences::PreferenceDefinition.new(:notifications, :invalid => true)}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class PreferenceDefinitionWithDefaultValueTest < Test::Unit::TestCase
|
32
|
+
def setup
|
33
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications, :boolean, :default => 1)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_type_cast_default_values
|
37
|
+
assert_equal true, @definition.default_value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class PreferenceDefinitionWithAnyTypeTest < Test::Unit::TestCase
|
42
|
+
def setup
|
43
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications, :any)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_not_type_cast
|
47
|
+
assert_equal nil, @definition.type_cast(nil)
|
48
|
+
assert_equal 0, @definition.type_cast(0)
|
49
|
+
assert_equal 1, @definition.type_cast(1)
|
50
|
+
assert_equal false, @definition.type_cast(false)
|
51
|
+
assert_equal true, @definition.type_cast(true)
|
52
|
+
assert_equal '', @definition.type_cast('')
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_should_query_false_if_value_is_nil
|
56
|
+
assert_equal false, @definition.query(nil)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_should_query_true_if_value_is_zero
|
60
|
+
assert_equal true, @definition.query(0)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_should_query_true_if_value_is_not_zero
|
64
|
+
assert_equal true, @definition.query(1)
|
65
|
+
assert_equal true, @definition.query(-1)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_should_query_false_if_value_is_blank
|
69
|
+
assert_equal false, @definition.query('')
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_should_query_true_if_value_is_not_blank
|
73
|
+
assert_equal true, @definition.query('hello')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class PreferenceDefinitionWithBooleanTypeTest < Test::Unit::TestCase
|
78
|
+
def setup
|
79
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_should_not_type_cast_if_value_is_nil
|
83
|
+
assert_equal nil, @definition.type_cast(nil)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_type_cast_to_false_if_value_is_zero
|
87
|
+
assert_equal false, @definition.type_cast(0)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_should_type_cast_to_true_if_value_is_not_zero
|
91
|
+
assert_equal true, @definition.type_cast(1)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_type_cast_to_true_if_value_is_true_string
|
95
|
+
assert_equal true, @definition.type_cast('true')
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_should_type_cast_to_false_if_value_is_not_true_string
|
99
|
+
assert_equal false, @definition.type_cast('')
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_should_query_false_if_value_is_nil
|
103
|
+
assert_equal false, @definition.query(nil)
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_should_query_true_if_value_is_one
|
107
|
+
assert_equal true, @definition.query(1)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_should_query_false_if_value_not_one
|
111
|
+
assert_equal false, @definition.query(0)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_should_query_true_if_value_is_true_string
|
115
|
+
assert_equal true, @definition.query('true')
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_should_query_false_if_value_is_not_true_string
|
119
|
+
assert_equal false, @definition.query('')
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class PreferenceDefinitionWithNumericTypeTest < Test::Unit::TestCase
|
124
|
+
def setup
|
125
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications, :integer)
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_should_type_cast_true_to_integer
|
129
|
+
assert_equal 1, @definition.type_cast(true)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_should_type_cast_false_to_integer
|
133
|
+
assert_equal 0, @definition.type_cast(false)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_should_type_cast_string_to_integer
|
137
|
+
assert_equal 0, @definition.type_cast('hello')
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_should_query_false_if_value_is_nil
|
141
|
+
assert_equal false, @definition.query(nil)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_should_query_true_if_value_is_one
|
145
|
+
assert_equal true, @definition.query(1)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_should_query_false_if_value_is_zero
|
149
|
+
assert_equal false, @definition.query(0)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
class PreferenceDefinitionWithStringTypeTest < Test::Unit::TestCase
|
154
|
+
def setup
|
155
|
+
@definition = PluginAWeek::Preferences::PreferenceDefinition.new(:notifications, :string)
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_should_type_cast_integers_to_strings
|
159
|
+
assert_equal '1', @definition.type_cast('1')
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_should_not_type_cast_booleans
|
163
|
+
assert_equal true, @definition.type_cast(true)
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_should_query_false_if_value_is_nil
|
167
|
+
assert_equal false, @definition.query(nil)
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_should_query_true_if_value_is_one
|
171
|
+
assert_equal true, @definition.query(1)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_should_query_true_if_value_is_zero
|
175
|
+
assert_equal true, @definition.query(0)
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_should_query_false_if_value_is_blank
|
179
|
+
assert_equal false, @definition.query('')
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_should_query_true_if_value_is_not_blank
|
183
|
+
assert_equal true, @definition.query('hello')
|
184
|
+
end
|
185
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../test_helper"
|
2
|
+
|
3
|
+
class PreferenceByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@preference = Preference.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_not_have_an_attribute
|
9
|
+
assert @preference.attribute.blank?
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_not_have_an_owner
|
13
|
+
assert_nil @preference.owner_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_not_have_an_owner_type
|
17
|
+
assert @preference.owner_type.blank?
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_not_have_a_preferenced_association
|
21
|
+
assert_nil @preference.preferenced_id
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_not_have_a_preferenced_type
|
25
|
+
assert @preference.preferenced_type.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_not_have_a_value
|
29
|
+
assert @preference.value.blank?
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_not_have_a_definition
|
33
|
+
assert_nil @preference.definition
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class PreferenceTest < Test::Unit::TestCase
|
38
|
+
def test_should_be_valid_with_a_set_of_valid_attributes
|
39
|
+
preference = new_preference
|
40
|
+
assert preference.valid?
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_should_require_an_attribute
|
44
|
+
preference = new_preference(:attribute => nil)
|
45
|
+
assert !preference.valid?
|
46
|
+
assert_equal 1, Array(preference.errors.on(:attribute)).size
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_require_an_owner_id
|
50
|
+
preference = new_preference(:owner => nil)
|
51
|
+
assert !preference.valid?
|
52
|
+
assert_equal 1, Array(preference.errors.on(:owner_id)).size
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_should_require_an_owner_type
|
56
|
+
preference = new_preference(:owner => nil)
|
57
|
+
assert !preference.valid?
|
58
|
+
assert_equal 1, Array(preference.errors.on(:owner_type)).size
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_should_not_require_a_preferenced_id
|
62
|
+
preference = new_preference(:preferenced => nil)
|
63
|
+
assert preference.valid?
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_require_a_preferenced_id_if_specified
|
67
|
+
preference = new_preference(:preferenced => nil)
|
68
|
+
preference.preferenced_type = 'Car'
|
69
|
+
assert !preference.valid?
|
70
|
+
assert_equal 1, Array(preference.errors.on(:preferenced_id)).size
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_not_require_a_preferenced_type
|
74
|
+
preference = new_preference(:preferenced => nil)
|
75
|
+
assert preference.valid?
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_should_require_a_preferenced_type_if_specified
|
79
|
+
preference = new_preference(:preferenced => nil)
|
80
|
+
preference.preferenced_id = 1
|
81
|
+
assert !preference.valid?
|
82
|
+
assert_equal 1, Array(preference.errors.on(:preferenced_type)).size
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class PreferenceAfterBeingCreatedTest < Test::Unit::TestCase
|
87
|
+
def setup
|
88
|
+
User.preference :notifications, :boolean
|
89
|
+
|
90
|
+
@preference = create_preference(:attribute => 'notifications')
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_should_have_an_owner
|
94
|
+
assert_not_nil @preference.owner
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_should_have_a_definition
|
98
|
+
assert_not_nil @preference.definition
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_have_a_value
|
102
|
+
assert_not_nil @preference.value
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_should_not_have_a_preferenced_association
|
106
|
+
assert_nil @preference.preferenced
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class PreferenceWithPreferencedAssociationTest < Test::Unit::TestCase
|
111
|
+
def setup
|
112
|
+
@preference = create_preference(:preferenced => create_car)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_should_have_a_preferenced_association
|
116
|
+
assert_not_nil @preference.preferenced
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class PreferenceWithBooleanAttributeTest < Test::Unit::TestCase
|
121
|
+
def setup
|
122
|
+
User.preference :notifications, :boolean
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_should_type_cast_nil_values
|
126
|
+
preference = new_preference(:attribute => 'notifications', :value => nil)
|
127
|
+
assert_nil preference.value
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_type_cast_numeric_values
|
131
|
+
preference = new_preference(:attribute => 'notifications', :value => 0)
|
132
|
+
assert_equal false, preference.value
|
133
|
+
|
134
|
+
preference.value = 1
|
135
|
+
assert_equal true, preference.value
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_should_type_cast_boolean_values
|
139
|
+
preference = new_preference(:attribute => 'notifications', :value => false)
|
140
|
+
assert_equal false, preference.value
|
141
|
+
|
142
|
+
preference.value = true
|
143
|
+
assert_equal true, preference.value
|
144
|
+
end
|
145
|
+
end
|