preferences 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,8 @@ require "#{File.dirname(__FILE__)}/../test_helper"
2
2
 
3
3
  class PreferencesTest < Test::Unit::TestCase
4
4
  def setup
5
+ User.preference :notifications, :boolean
6
+
5
7
  @user = User.new
6
8
  end
7
9
 
@@ -30,9 +32,17 @@ class PreferencesTest < Test::Unit::TestCase
30
32
  assert User.respond_to?(:preference_definitions)
31
33
  end
32
34
 
35
+ def test_should_create_default_preferences_values
36
+ assert User.respond_to?(:default_preference_values)
37
+ end
38
+
33
39
  def test_should_include_new_definitions_in_preference_definitions
34
- definition = User.preference :notifications
35
- assert_equal definition, User.preference_definitions['notifications']
40
+ assert_not_nil User.preference_definitions['notifications']
41
+ end
42
+
43
+ def teardown
44
+ User.preference_definitions.delete('notifications')
45
+ User.default_preference_values.delete('notifications')
36
46
  end
37
47
  end
38
48
 
@@ -60,6 +70,18 @@ class UserByDefaultTest < Test::Unit::TestCase
60
70
  def test_should_have_a_preferred_language
61
71
  assert_equal 'English', @user.preferred_language
62
72
  end
73
+
74
+ def test_should_have_only_default_preference_values
75
+ expected = {
76
+ 'hot_salsa' => nil,
77
+ 'dark_chocolate' => true,
78
+ 'color' => nil,
79
+ 'car' => nil,
80
+ 'language' => 'English'
81
+ }
82
+
83
+ assert_equal expected, @user.preference_values
84
+ end
63
85
  end
64
86
 
65
87
  class UserTest < Test::Unit::TestCase
@@ -175,6 +197,18 @@ class UserWithPreferencesTest < Test::Unit::TestCase
175
197
  assert_equal 1, @user.preferences.size
176
198
  end
177
199
 
200
+ def test_should_include_custom_and_default_preferences_in_preference_values
201
+ expected = {
202
+ 'hot_salsa' => nil,
203
+ 'dark_chocolate' => true,
204
+ 'color' => nil,
205
+ 'car' => nil,
206
+ 'language' => 'Latin'
207
+ }
208
+
209
+ assert_equal expected, @user.preference_values
210
+ end
211
+
178
212
  def test_should_not_remove_preference_if_set_to_default
179
213
  @user.preferred_language = 'English'
180
214
  @user.save!
@@ -215,12 +249,70 @@ class UserWithPreferencesTest < Test::Unit::TestCase
215
249
  end
216
250
  end
217
251
 
218
- class UserWithPreferencesForOtherModelsTest < Test::Unit::TestCase
252
+ class UserWithPreferencesForBasicGroupsTest < Test::Unit::TestCase
253
+ def setup
254
+ @user = create_user
255
+ @user.preferred_color = 'red', 'cars'
256
+ @user.save!
257
+ end
258
+
259
+ def test_should_have_preferences
260
+ assert_equal 1, @user.preferences.size
261
+ end
262
+
263
+ def test_should_have_preference_values_for_group
264
+ expected = {
265
+ 'hot_salsa' => nil,
266
+ 'dark_chocolate' => true,
267
+ 'color' => nil,
268
+ 'car' => nil,
269
+ 'language' => 'English',
270
+ 'cars' => {
271
+ 'hot_salsa' => nil,
272
+ 'dark_chocolate' => true,
273
+ 'color' => 'red',
274
+ 'car' => nil,
275
+ 'language' => 'English'
276
+ }
277
+ }
278
+
279
+ assert_equal expected, @user.preference_values
280
+ end
281
+
282
+ def test_should_not_have_preference_without_group
283
+ assert_nil @user.preferred_color
284
+ end
285
+
286
+ def test_should_have_preference_with_group
287
+ assert_equal 'red', @user.preferred_color('cars')
288
+ end
289
+
290
+ def test_should_modify_existing_preferences_when_saved
291
+ @user.preferred_color = 'blue', 'cars'
292
+ assert @user.save
293
+
294
+ @user.reload
295
+ assert_equal 'blue', @user.preferred_color('cars')
296
+ assert_equal 1, @user.preferences.size
297
+ end
298
+
299
+ def test_should_be_able_to_differentiate_between_groups
300
+ @user.preferred_color = 'blue', 'boats'
301
+ assert @user.save
302
+
303
+ @user.reload
304
+ assert_equal 'red', @user.preferred_color('cars')
305
+ assert_equal 'blue', @user.preferred_color('boats')
306
+ assert_equal 2, @user.preferences.size
307
+ end
308
+ end
309
+
310
+ class UserWithPreferencesForActiveRecordGroupsTest < Test::Unit::TestCase
219
311
  def setup
220
312
  @car = create_car
221
313
 
222
314
  @user = create_user
223
- @user.preferred_color = 'red', {:for => @car}
315
+ @user.preferred_color = 'red', @car
224
316
  @user.save!
225
317
  end
226
318
 
@@ -228,32 +320,51 @@ class UserWithPreferencesForOtherModelsTest < Test::Unit::TestCase
228
320
  assert_equal 1, @user.preferences.size
229
321
  end
230
322
 
231
- def test_should_not_have_preference_without_preferenced_record
323
+ def test_should_have_preference_values_for_group
324
+ expected = {
325
+ 'hot_salsa' => nil,
326
+ 'dark_chocolate' => true,
327
+ 'color' => nil,
328
+ 'car' => nil,
329
+ 'language' => 'English',
330
+ @car => {
331
+ 'hot_salsa' => nil,
332
+ 'dark_chocolate' => true,
333
+ 'color' => 'red',
334
+ 'car' => nil,
335
+ 'language' => 'English'
336
+ }
337
+ }
338
+
339
+ assert_equal expected, @user.preference_values
340
+ end
341
+
342
+ def test_should_not_have_preference_without_group
232
343
  assert_nil @user.preferred_color
233
344
  end
234
345
 
235
- def test_should_have_preference_with_preferenced_record
236
- assert_equal 'red', @user.preferred_color(:for => @car)
346
+ def test_should_have_preference_with_group
347
+ assert_equal 'red', @user.preferred_color(@car)
237
348
  end
238
349
 
239
350
  def test_should_modify_existing_preferences_when_saved
240
- @user.preferred_color = 'blue', {:for => @car}
351
+ @user.preferred_color = 'blue', @car
241
352
  assert @user.save
242
353
 
243
354
  @user.reload
244
- assert_equal 'blue', @user.preferred_color(:for => @car)
355
+ assert_equal 'blue', @user.preferred_color(@car)
245
356
  assert_equal 1, @user.preferences.size
246
357
  end
247
358
 
248
- def test_should_be_able_to_differentiate_between_preferenced_records
359
+ def test_should_be_able_to_differentiate_between_groups
249
360
  @different_car = create_car
250
361
 
251
- @user.preferred_color = 'blue', {:for => @different_car}
362
+ @user.preferred_color = 'blue', @different_car
252
363
  assert @user.save
253
364
 
254
365
  @user.reload
255
- assert_equal 'red', @user.preferred_color(:for => @car)
256
- assert_equal 'blue', @user.preferred_color(:for => @different_car)
366
+ assert_equal 'red', @user.preferred_color(@car)
367
+ assert_equal 'blue', @user.preferred_color(@different_car)
257
368
  assert_equal 2, @user.preferences.size
258
369
  end
259
370
  end
data/test/test_helper.rb CHANGED
@@ -4,7 +4,7 @@ require 'rubygems'
4
4
  require 'plugin_test_helper'
5
5
 
6
6
  # Run the migrations
7
- ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
7
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
8
8
 
9
9
  # Mixin the factory helper
10
10
  require File.expand_path("#{File.dirname(__FILE__)}/factory")
@@ -17,12 +17,12 @@ class PreferenceByDefaultTest < Test::Unit::TestCase
17
17
  assert @preference.owner_type.blank?
18
18
  end
19
19
 
20
- def test_should_not_have_a_preferenced_association
21
- assert_nil @preference.preferenced_id
20
+ def test_should_not_have_a_group_association
21
+ assert_nil @preference.group_id
22
22
  end
23
23
 
24
- def test_should_not_have_a_preferenced_type
25
- assert @preference.preferenced_type.nil?
24
+ def test_should_not_have_a_group_type
25
+ assert @preference.group_type.nil?
26
26
  end
27
27
 
28
28
  def test_should_not_have_a_value
@@ -58,28 +58,53 @@ class PreferenceTest < Test::Unit::TestCase
58
58
  assert_equal 1, Array(preference.errors.on(:owner_type)).size
59
59
  end
60
60
 
61
- def test_should_not_require_a_preferenced_id
62
- preference = new_preference(:preferenced => nil)
61
+ def test_should_not_require_a_group_id
62
+ preference = new_preference(:group => nil)
63
63
  assert preference.valid?
64
64
  end
65
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
66
+ def test_should_not_require_a_group_id_if_type_specified
67
+ preference = new_preference(:group => nil)
68
+ preference.group_type = 'Car'
69
+ assert preference.valid?
71
70
  end
72
71
 
73
- def test_should_not_require_a_preferenced_type
74
- preference = new_preference(:preferenced => nil)
72
+ def test_should_not_require_a_group_type
73
+ preference = new_preference(:group => nil)
75
74
  assert preference.valid?
76
75
  end
77
76
 
78
- def test_should_require_a_preferenced_type_if_specified
79
- preference = new_preference(:preferenced => nil)
80
- preference.preferenced_id = 1
77
+ def test_should_require_a_group_type_if_id_specified
78
+ preference = new_preference(:group => nil)
79
+ preference.group_id = 1
81
80
  assert !preference.valid?
82
- assert_equal 1, Array(preference.errors.on(:preferenced_type)).size
81
+ assert_equal 1, Array(preference.errors.on(:group_type)).size
82
+ end
83
+ end
84
+
85
+ class PreferenceAsAClassTest < Test::Unit::TestCase
86
+ def test_should_be_able_to_split_nil_groups
87
+ group_id, group_type = Preference.split_group(nil)
88
+ assert_nil group_id
89
+ assert_nil group_type
90
+ end
91
+
92
+ def test_should_be_able_to_split_non_active_record_groups
93
+ group_id, group_type = Preference.split_group('car')
94
+ assert_nil group_id
95
+ assert_equal 'car', group_type
96
+
97
+ group_id, group_type = Preference.split_group(10)
98
+ assert_nil group_id
99
+ assert_equal 10, group_type
100
+ end
101
+
102
+ def test_should_be_able_to_split_active_record_groups
103
+ car = create_car
104
+
105
+ group_id, group_type = Preference.split_group(car)
106
+ assert_equal 1, group_id
107
+ assert_equal 'Car', group_type
83
108
  end
84
109
  end
85
110
 
@@ -102,18 +127,34 @@ class PreferenceAfterBeingCreatedTest < Test::Unit::TestCase
102
127
  assert_not_nil @preference.value
103
128
  end
104
129
 
105
- def test_should_not_have_a_preferenced_association
106
- assert_nil @preference.preferenced
130
+ def test_should_not_have_a_group_association
131
+ assert_nil @preference.group
132
+ end
133
+
134
+ def teardown
135
+ User.preference_definitions.delete('notifications')
136
+ User.default_preference_values.delete('notifications')
137
+ end
138
+ end
139
+
140
+ class PreferenceWithBasicGroupTest < Test::Unit::TestCase
141
+ def setup
142
+ @preference = create_preference(:group_type => 'car')
143
+ end
144
+
145
+ def test_should_have_a_group_association
146
+ assert_equal 'car', @preference.group
107
147
  end
108
148
  end
109
149
 
110
- class PreferenceWithPreferencedAssociationTest < Test::Unit::TestCase
150
+ class PreferenceWithActiveRecordGroupTest < Test::Unit::TestCase
111
151
  def setup
112
- @preference = create_preference(:preferenced => create_car)
152
+ @car = create_car
153
+ @preference = create_preference(:group => @car)
113
154
  end
114
155
 
115
- def test_should_have_a_preferenced_association
116
- assert_not_nil @preference.preferenced
156
+ def test_should_have_a_group_association
157
+ assert_equal @car, @preference.group
117
158
  end
118
159
  end
119
160
 
@@ -142,4 +183,9 @@ class PreferenceWithBooleanAttributeTest < Test::Unit::TestCase
142
183
  preference.value = true
143
184
  assert_equal true, preference.value
144
185
  end
186
+
187
+ def teardown
188
+ User.preference_definitions.delete('notifications')
189
+ User.default_preference_values.delete('notifications')
190
+ end
145
191
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preferences
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Pfeifer
@@ -9,7 +9,7 @@ autorequire: preferences
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-10 00:00:00 -04:00
12
+ date: 2008-06-19 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -27,24 +27,24 @@ files:
27
27
  - lib/preferences
28
28
  - lib/preferences/preference_definition.rb
29
29
  - lib/preferences.rb
30
- - test/factory.rb
31
30
  - test/app_root
32
- - test/app_root/log
33
- - test/app_root/log/in_memory.log
31
+ - test/app_root/app
32
+ - test/app_root/app/models
33
+ - test/app_root/app/models/car.rb
34
+ - test/app_root/app/models/user.rb
35
+ - test/app_root/config
36
+ - test/app_root/config/environment.rb
34
37
  - test/app_root/db
35
38
  - test/app_root/db/migrate
39
+ - test/app_root/db/migrate/001_create_users.rb
36
40
  - test/app_root/db/migrate/003_migrate_preferences_to_version_1.rb
37
41
  - test/app_root/db/migrate/002_create_cars.rb
38
- - test/app_root/db/migrate/001_create_users.rb
39
- - test/app_root/config
40
- - test/app_root/config/environment.rb
41
- - test/app_root/app
42
- - test/app_root/app/models
43
- - test/app_root/app/models/user.rb
44
- - test/app_root/app/models/car.rb
42
+ - test/app_root/log
43
+ - test/app_root/log/in_memory.log
45
44
  - test/functional
46
45
  - test/functional/preferences_test.rb
47
46
  - test/test_helper.rb
47
+ - test/factory.rb
48
48
  - test/unit
49
49
  - test/unit/preference_test.rb
50
50
  - test/unit/preference_definition_test.rb
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  requirements: []
76
76
 
77
77
  rubyforge_project:
78
- rubygems_version: 1.1.0
78
+ rubygems_version: 1.1.1
79
79
  signing_key:
80
80
  specification_version: 2
81
81
  summary: Adds support for easily creating custom preferences for models