dm_preferences 0.5.6 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +13 -5
  2. data/.gitignore +2 -0
  3. data/.travis.yml +2 -2
  4. data/{CHANGELOG.rdoc → CHANGELOG.md} +26 -15
  5. data/LICENSE +2 -0
  6. data/{README.rdoc → README.md} +144 -96
  7. data/Rakefile +20 -27
  8. data/dm_preferences.gemspec +7 -5
  9. data/lib/generators/{USAGE → preferences/USAGE} +0 -0
  10. data/lib/generators/{preferences_generator.rb → preferences/preferences_generator.rb} +0 -0
  11. data/lib/generators/{templates → preferences/templates}/create_preferences.rb +5 -1
  12. data/lib/preferences.rb +33 -10
  13. data/lib/preferences/engine.rb +2 -1
  14. data/lib/preferences/preference_definition.rb +15 -4
  15. data/lib/preferences/version.rb +1 -1
  16. data/spec/dummy/Rakefile +6 -0
  17. data/spec/dummy/app/models/.keep +0 -0
  18. data/{test/app_root → spec/dummy}/app/models/car.rb +0 -0
  19. data/{test/app_root → spec/dummy}/app/models/employee.rb +0 -0
  20. data/{test/app_root → spec/dummy}/app/models/manager.rb +0 -0
  21. data/{test/app_root → spec/dummy}/app/models/user.rb +0 -0
  22. data/spec/dummy/bin/bundle +3 -0
  23. data/spec/dummy/bin/rails +4 -0
  24. data/spec/dummy/bin/rake +4 -0
  25. data/spec/dummy/bin/setup +29 -0
  26. data/spec/dummy/config.ru +4 -0
  27. data/spec/dummy/config/application.rb +32 -0
  28. data/spec/dummy/config/boot.rb +5 -0
  29. data/spec/dummy/config/database.yml +25 -0
  30. data/spec/dummy/config/environment.rb +5 -0
  31. data/spec/dummy/config/environments/development.rb +41 -0
  32. data/spec/dummy/config/environments/production.rb +79 -0
  33. data/spec/dummy/config/environments/test.rb +42 -0
  34. data/spec/dummy/config/initializers/assets.rb +11 -0
  35. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  36. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  37. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  38. data/spec/dummy/config/initializers/inflections.rb +16 -0
  39. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  40. data/spec/dummy/config/initializers/session_store.rb +3 -0
  41. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  42. data/spec/dummy/config/locales/en.yml +23 -0
  43. data/spec/dummy/config/routes.rb +56 -0
  44. data/spec/dummy/config/secrets.yml +22 -0
  45. data/{test/app_root → spec/dummy}/db/migrate/001_create_users.rb +0 -0
  46. data/{test/app_root → spec/dummy}/db/migrate/002_create_cars.rb +0 -0
  47. data/{test/app_root → spec/dummy}/db/migrate/003_create_employees.rb +0 -0
  48. data/spec/dummy/db/migrate/004_create_preferences.rb +16 -0
  49. data/spec/dummy/db/schema.rb +42 -0
  50. data/spec/functional/preferences_spec.rb +1427 -0
  51. data/spec/spec_helper.rb +20 -0
  52. data/spec/support/assert_queries.rb +36 -0
  53. data/{test → spec/support}/factory.rb +1 -1
  54. data/spec/unit/preference_definition_spec.rb +249 -0
  55. data/{test/unit/preference_test.rb → spec/unit/preference_spec.rb} +114 -122
  56. metadata +127 -53
  57. data/test/app_root/db/migrate/004_migrate_preferences_to_version_1.rb +0 -13
  58. data/test/functional/preferences_test.rb +0 -1387
  59. data/test/test_helper.rb +0 -26
  60. data/test/unit/preference_definition_test.rb +0 -237
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm_preferences
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Walker
@@ -9,116 +9,190 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-30 00:00:00.000000000 Z
12
+ date: 2015-08-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rake
15
+ name: rails
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '4.2'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '4.2'
28
+ - !ruby/object:Gem::Dependency
29
+ name: sqlite3
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
19
33
  - !ruby/object:Gem::Version
20
34
  version: '0'
21
35
  type: :development
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
25
- - - ">="
39
+ - - ~>
26
40
  - !ruby/object:Gem::Version
27
41
  version: '0'
28
42
  - !ruby/object:Gem::Dependency
29
- name: plugin_test_helper
43
+ name: rspec-rails
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
- - - ">="
46
+ - - ~>
33
47
  - !ruby/object:Gem::Version
34
- version: 0.3.2
48
+ version: '3.0'
35
49
  type: :development
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
- - - ">="
53
+ - - ~>
40
54
  - !ruby/object:Gem::Version
41
- version: 0.3.2
55
+ version: '3.0'
42
56
  description: Adds support for easily creating custom preferences for ActiveRecord
43
57
  models
44
58
  email: github@digitalmoksha.com
45
59
  executables: []
46
60
  extensions: []
47
61
  extra_rdoc_files:
48
- - README.rdoc
49
- - CHANGELOG.rdoc
62
+ - README.md
63
+ - CHANGELOG.md
50
64
  - LICENSE
51
65
  files:
52
- - ".gitignore"
53
- - ".travis.yml"
54
- - CHANGELOG.rdoc
66
+ - .gitignore
67
+ - .travis.yml
68
+ - CHANGELOG.md
55
69
  - Gemfile
56
70
  - LICENSE
57
- - README.rdoc
71
+ - README.md
58
72
  - Rakefile
59
73
  - app/models/preference.rb
60
74
  - dm_preferences.gemspec
61
75
  - lib/dm_preferences.rb
62
- - lib/generators/USAGE
63
- - lib/generators/preferences_generator.rb
64
- - lib/generators/templates/create_preferences.rb
76
+ - lib/generators/preferences/USAGE
77
+ - lib/generators/preferences/preferences_generator.rb
78
+ - lib/generators/preferences/templates/create_preferences.rb
65
79
  - lib/preferences.rb
66
80
  - lib/preferences/engine.rb
67
81
  - lib/preferences/preference_definition.rb
68
82
  - lib/preferences/version.rb
69
- - test/app_root/app/models/car.rb
70
- - test/app_root/app/models/employee.rb
71
- - test/app_root/app/models/manager.rb
72
- - test/app_root/app/models/user.rb
73
- - test/app_root/db/migrate/001_create_users.rb
74
- - test/app_root/db/migrate/002_create_cars.rb
75
- - test/app_root/db/migrate/003_create_employees.rb
76
- - test/app_root/db/migrate/004_migrate_preferences_to_version_1.rb
77
- - test/factory.rb
78
- - test/functional/preferences_test.rb
79
- - test/test_helper.rb
80
- - test/unit/preference_definition_test.rb
81
- - test/unit/preference_test.rb
83
+ - spec/dummy/Rakefile
84
+ - spec/dummy/app/models/.keep
85
+ - spec/dummy/app/models/car.rb
86
+ - spec/dummy/app/models/employee.rb
87
+ - spec/dummy/app/models/manager.rb
88
+ - spec/dummy/app/models/user.rb
89
+ - spec/dummy/bin/bundle
90
+ - spec/dummy/bin/rails
91
+ - spec/dummy/bin/rake
92
+ - spec/dummy/bin/setup
93
+ - spec/dummy/config.ru
94
+ - spec/dummy/config/application.rb
95
+ - spec/dummy/config/boot.rb
96
+ - spec/dummy/config/database.yml
97
+ - spec/dummy/config/environment.rb
98
+ - spec/dummy/config/environments/development.rb
99
+ - spec/dummy/config/environments/production.rb
100
+ - spec/dummy/config/environments/test.rb
101
+ - spec/dummy/config/initializers/assets.rb
102
+ - spec/dummy/config/initializers/backtrace_silencers.rb
103
+ - spec/dummy/config/initializers/cookies_serializer.rb
104
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
105
+ - spec/dummy/config/initializers/inflections.rb
106
+ - spec/dummy/config/initializers/mime_types.rb
107
+ - spec/dummy/config/initializers/session_store.rb
108
+ - spec/dummy/config/initializers/wrap_parameters.rb
109
+ - spec/dummy/config/locales/en.yml
110
+ - spec/dummy/config/routes.rb
111
+ - spec/dummy/config/secrets.yml
112
+ - spec/dummy/db/migrate/001_create_users.rb
113
+ - spec/dummy/db/migrate/002_create_cars.rb
114
+ - spec/dummy/db/migrate/003_create_employees.rb
115
+ - spec/dummy/db/migrate/004_create_preferences.rb
116
+ - spec/dummy/db/schema.rb
117
+ - spec/dummy/db/test.sqlite3
118
+ - spec/dummy/log/development.log
119
+ - spec/dummy/log/test.log
120
+ - spec/functional/preferences_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/support/assert_queries.rb
123
+ - spec/support/factory.rb
124
+ - spec/unit/preference_definition_spec.rb
125
+ - spec/unit/preference_spec.rb
82
126
  homepage: https://github.com/digitalmoksha/preferences
83
- licenses: []
127
+ licenses:
128
+ - MIT
84
129
  metadata: {}
85
130
  post_install_message:
86
131
  rdoc_options:
87
- - "--line-numbers"
88
- - "--inline-source"
89
- - "--title"
132
+ - --line-numbers
133
+ - --inline-source
134
+ - --title
90
135
  - preferences
91
- - "--main"
136
+ - --main
92
137
  - README.rdoc
93
138
  require_paths:
94
139
  - lib
95
140
  required_ruby_version: !ruby/object:Gem::Requirement
96
141
  requirements:
97
- - - ">="
142
+ - - ! '>='
98
143
  - !ruby/object:Gem::Version
99
144
  version: '0'
100
145
  required_rubygems_version: !ruby/object:Gem::Requirement
101
146
  requirements:
102
- - - ">="
147
+ - - ! '>='
103
148
  - !ruby/object:Gem::Version
104
149
  version: '0'
105
150
  requirements: []
106
151
  rubyforge_project:
107
- rubygems_version: 2.4.5
152
+ rubygems_version: 2.4.2
108
153
  signing_key:
109
154
  specification_version: 4
110
155
  summary: Custom preferences for ActiveRecord models
111
156
  test_files:
112
- - test/app_root/app/models/car.rb
113
- - test/app_root/app/models/employee.rb
114
- - test/app_root/app/models/manager.rb
115
- - test/app_root/app/models/user.rb
116
- - test/app_root/db/migrate/001_create_users.rb
117
- - test/app_root/db/migrate/002_create_cars.rb
118
- - test/app_root/db/migrate/003_create_employees.rb
119
- - test/app_root/db/migrate/004_migrate_preferences_to_version_1.rb
120
- - test/factory.rb
121
- - test/functional/preferences_test.rb
122
- - test/test_helper.rb
123
- - test/unit/preference_definition_test.rb
124
- - test/unit/preference_test.rb
157
+ - spec/dummy/app/models/car.rb
158
+ - spec/dummy/app/models/employee.rb
159
+ - spec/dummy/app/models/manager.rb
160
+ - spec/dummy/app/models/user.rb
161
+ - spec/dummy/bin/bundle
162
+ - spec/dummy/bin/rails
163
+ - spec/dummy/bin/rake
164
+ - spec/dummy/bin/setup
165
+ - spec/dummy/config/application.rb
166
+ - spec/dummy/config/boot.rb
167
+ - spec/dummy/config/database.yml
168
+ - spec/dummy/config/environment.rb
169
+ - spec/dummy/config/environments/development.rb
170
+ - spec/dummy/config/environments/production.rb
171
+ - spec/dummy/config/environments/test.rb
172
+ - spec/dummy/config/initializers/assets.rb
173
+ - spec/dummy/config/initializers/backtrace_silencers.rb
174
+ - spec/dummy/config/initializers/cookies_serializer.rb
175
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
176
+ - spec/dummy/config/initializers/inflections.rb
177
+ - spec/dummy/config/initializers/mime_types.rb
178
+ - spec/dummy/config/initializers/session_store.rb
179
+ - spec/dummy/config/initializers/wrap_parameters.rb
180
+ - spec/dummy/config/locales/en.yml
181
+ - spec/dummy/config/routes.rb
182
+ - spec/dummy/config/secrets.yml
183
+ - spec/dummy/config.ru
184
+ - spec/dummy/db/migrate/001_create_users.rb
185
+ - spec/dummy/db/migrate/002_create_cars.rb
186
+ - spec/dummy/db/migrate/003_create_employees.rb
187
+ - spec/dummy/db/migrate/004_create_preferences.rb
188
+ - spec/dummy/db/schema.rb
189
+ - spec/dummy/db/test.sqlite3
190
+ - spec/dummy/log/development.log
191
+ - spec/dummy/log/test.log
192
+ - spec/dummy/Rakefile
193
+ - spec/functional/preferences_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/support/assert_queries.rb
196
+ - spec/support/factory.rb
197
+ - spec/unit/preference_definition_spec.rb
198
+ - spec/unit/preference_spec.rb
@@ -1,13 +0,0 @@
1
- class MigratePreferencesToVersion1 < ActiveRecord::Migration
2
- def self.up
3
- ActiveRecord::Migrator.new(:up, "#{Rails.root}/../../generators/preferences/templates", 0).migrations.each do |migration|
4
- migration.migrate(:up)
5
- end
6
- end
7
-
8
- def self.down
9
- ActiveRecord::Migrator.new(:down, "#{Rails.root}/../../generators/preferences/templates", 0).migrations.each do |migration|
10
- migration.migrate(:down)
11
- end
12
- end
13
- end
@@ -1,1387 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
-
3
- class ModelPreferenceTest < ActiveRecord::TestCase
4
- def default_test
5
- end
6
-
7
- def teardown
8
- User.preference_definitions.clear
9
- end
10
- end
11
-
12
- class ModelWithoutPreferencesTest < ActiveRecord::TestCase
13
- def test_should_not_create_preference_definitions
14
- assert !Car.respond_to?(:preference_definitions)
15
- end
16
-
17
- def test_should_not_create_stored_preferences_association
18
- assert !Car.new.respond_to?(:stored_preferences)
19
- end
20
-
21
- def test_should_not_create_preference_scopes
22
- assert !Car.respond_to?(:with_preferences)
23
- assert !Car.respond_to?(:without_preferences)
24
- end
25
- end
26
-
27
- class PreferencesAfterFirstBeingDefinedTest < ModelPreferenceTest
28
- def setup
29
- User.preference :notifications
30
- @user = new_user
31
- end
32
-
33
- def test_should_create_preference_definitions
34
- assert User.respond_to?(:preference_definitions)
35
- end
36
-
37
- def test_should_create_preference_scopes
38
- assert User.respond_to?(:with_preferences)
39
- assert User.respond_to?(:without_preferences)
40
- end
41
-
42
- def test_should_create_stored_preferences_associations
43
- assert @user.respond_to?(:stored_preferences)
44
- end
45
- end
46
-
47
- class PreferencesAfterBeingDefinedTest < ModelPreferenceTest
48
- def setup
49
- @definition = User.preference :notifications
50
- @user = new_user
51
- end
52
-
53
- def test_should_raise_exception_if_invalid_options_specified
54
- assert_raise(ArgumentError) {User.preference :notifications, :invalid => true}
55
- assert_raise(ArgumentError) {User.preference :notifications, :boolean, :invalid => true}
56
- end
57
-
58
- def test_should_create_definition
59
- assert_not_nil @definition
60
- assert_equal 'notifications', @definition.name
61
- end
62
-
63
- def test_should_create_preferred_query_method
64
- assert @user.respond_to?(:preferred_notifications?)
65
- end
66
-
67
- def test_should_create_prefers_query_method
68
- assert @user.respond_to?(:prefers_notifications?)
69
- end
70
-
71
- def test_should_create_preferred_reader
72
- assert @user.respond_to?(:preferred_notifications)
73
- end
74
-
75
- def test_should_create_prefers_reader
76
- assert @user.respond_to?(:prefers_notifications)
77
- end
78
-
79
- def test_should_create_preferred_writer
80
- assert @user.respond_to?(:preferred_notifications=)
81
- end
82
-
83
- def test_should_create_prefers_writer
84
- assert @user.respond_to?(:prefers_notifications=)
85
- end
86
-
87
- def test_should_create_preferred_changed_query
88
- assert @user.respond_to?(:preferred_notifications_changed?)
89
- end
90
-
91
- def test_should_create_prefers_changed_query
92
- assert @user.respond_to?(:prefers_notifications_changed?)
93
- end
94
-
95
- def test_should_create_preferred_was
96
- assert @user.respond_to?(:preferred_notifications_was)
97
- end
98
-
99
- def test_should_create_prefers_was
100
- assert @user.respond_to?(:prefers_notifications_was)
101
- end
102
-
103
- def test_should_create_preferred_change
104
- assert @user.respond_to?(:preferred_notifications_change)
105
- end
106
-
107
- def test_should_create_prefers_change
108
- assert @user.respond_to?(:prefers_notifications_change)
109
- end
110
-
111
- def test_should_create_preferred_will_change
112
- assert @user.respond_to?(:preferred_notifications_will_change!)
113
- end
114
-
115
- def test_should_create_prefers_will_change
116
- assert @user.respond_to?(:prefers_notifications_will_change!)
117
- end
118
-
119
- def test_should_create_preferred_reset
120
- assert @user.respond_to?(:reset_preferred_notifications!)
121
- end
122
-
123
- def test_should_create_prefers_reset
124
- assert @user.respond_to?(:reset_prefers_notifications!)
125
- end
126
-
127
- def test_should_include_new_definitions_in_preference_definitions
128
- assert_equal e = {'notifications' => @definition}, User.preference_definitions
129
- end
130
- end
131
-
132
- class PreferencesTypeCasted < ModelPreferenceTest
133
- def setup
134
- @definition = User.preference :rate, :float, :default => 1.0
135
- @user = new_user
136
- end
137
-
138
- def test_should_have_float_type
139
- assert_equal :float, @definition.type
140
- end
141
-
142
- def test_should_only_have_default_preferences
143
- assert_equal e = {'rate' => 1.0}, @user.preferences
144
- end
145
-
146
- def test_should_type_cast_changed_values
147
- @user.write_preference(:rate, "1.1")
148
- assert_equal e = {'rate' => 1.1}, @user.preferences
149
- end
150
- end
151
-
152
- class PreferencesByDefaultTest < ModelPreferenceTest
153
- def setup
154
- @definition = User.preference :notifications
155
- @user = new_user
156
- end
157
-
158
- def test_should_have_boolean_type
159
- assert_equal :boolean, @definition.type
160
- end
161
-
162
- def test_should_not_have_default_value
163
- assert_nil @definition.default_value
164
- end
165
-
166
- def test_should_only_have_default_preferences
167
- assert_equal e = {'notifications' => nil}, @user.preferences
168
- end
169
-
170
- def test_should_not_query_preferences_changed
171
- assert_equal false, @user.preferences_changed?
172
- end
173
-
174
- def test_should_not_query_group_preferences_changed
175
- assert_equal false, @user.preferences_changed?(:chat)
176
- end
177
-
178
- def test_should_not_have_preferences_changed
179
- assert_equal [], @user.preferences_changed
180
- end
181
-
182
- def test_should_not_have_group_preferences_changed
183
- assert_equal [], @user.preferences_changed(:chat)
184
- end
185
-
186
- def test_should_not_have_preference_changes
187
- assert_equal e = {}, @user.preference_changes
188
- end
189
-
190
- def test_should_not_have_group_preference_changes
191
- assert_equal e = {}, @user.preference_changes(:chat)
192
- end
193
- end
194
-
195
- class PreferencesWithCustomTypeTest < ModelPreferenceTest
196
- def setup
197
- @definition = User.preference :vehicle_id, :integer
198
- @user = new_user
199
- end
200
-
201
- def test_should_have_integer_type
202
- assert_equal :integer, @definition.type
203
- end
204
-
205
- def test_should_not_have_default_value
206
- assert_nil @definition.default_value
207
- end
208
-
209
- def test_should_only_have_default_preferences
210
- assert_equal e = {'vehicle_id' => nil}, @user.preferences
211
- end
212
- end
213
-
214
- class PreferencesWithCustomDefaultTest < ModelPreferenceTest
215
- def setup
216
- @definition = User.preference :color, :string, :default => 'red'
217
- @user = new_user
218
- end
219
-
220
- def test_should_have_boolean_type
221
- assert_equal :string, @definition.type
222
- end
223
-
224
- def test_should_have_default_value
225
- assert_equal 'red', @definition.default_value
226
- end
227
-
228
- def test_should_only_have_default_preferences
229
- assert_equal e = {'color' => 'red'}, @user.preferences
230
- end
231
- end
232
-
233
- class PreferencesWithMultipleDefinitionsTest < ModelPreferenceTest
234
- def setup
235
- User.preference :notifications, :default => true
236
- User.preference :color, :string, :default => 'red'
237
- @user = new_user
238
- end
239
-
240
- def test_should_only_have_default_preferences
241
- assert_equal e = {'notifications' => true, 'color' => 'red'}, @user.preferences
242
- end
243
- end
244
-
245
- class PreferencesAfterBeingCreatedTest < ModelPreferenceTest
246
- def setup
247
- User.preference :notifications, :default => true
248
- @user = create_user
249
- end
250
-
251
- def test_should_not_have_any_stored_preferences
252
- assert @user.stored_preferences.empty?
253
- end
254
- end
255
-
256
- class PreferencesReaderTest < ModelPreferenceTest
257
- def setup
258
- User.preference :notifications, :default => true
259
- User.preference :rate, :float, :default => 1.0
260
- @user = create_user
261
- end
262
-
263
- def test_should_raise_exception_if_invalid_preference_read
264
- exception = assert_raise(ArgumentError) { @user.preferred(:invalid) }
265
- assert_equal 'Unknown preference: invalid', exception.message
266
- end
267
-
268
- def test_use_default_value_if_not_stored
269
- assert_equal true, @user.preferred(:notifications)
270
- end
271
-
272
- def test_should_use_group_default_value_if_not_stored
273
- User.preference :language, :string, :default => 'English', :group_defaults => {:chat => 'Latin'}
274
- assert_equal 'English', @user.preferred(:language)
275
- end
276
-
277
- def test_should_use_stored_value_if_stored
278
- create_preference(:owner => @user, :name => 'notifications', :value => false)
279
- assert_equal false, @user.preferred(:notifications)
280
- end
281
-
282
- def test_should_type_cast_based_on_preference_definition
283
- @user.write_preference(:notifications, 'false')
284
- assert_equal false, @user.preferred(:notifications)
285
- @user.write_preference(:rate, "1.2")
286
- assert_equal 1.2, @user.preferred(:rate)
287
- end
288
-
289
- def test_should_cache_stored_values
290
- create_preference(:owner => @user, :name => 'notifications', :value => false)
291
- assert_queries(1) { @user.preferred(:notifications) }
292
- assert_queries(0) { @user.preferred(:notifications) }
293
- end
294
-
295
- def test_should_not_query_if_preferences_already_loaded
296
- @user.preferences
297
- assert_queries(0) { @user.preferred(:notifications) }
298
- end
299
-
300
- def test_should_use_value_from_preferences_lookup
301
- create_preference(:owner => @user, :name => 'notifications', :value => false)
302
- @user.preferences
303
-
304
- assert_queries(0) { assert_equal false, @user.preferred(:notifications) }
305
- end
306
-
307
- def test_should_be_able_to_use_prefers_reader
308
- assert_equal true, @user.prefers_notifications
309
- end
310
-
311
- def test_should_be_able_to_use_preferred_reader
312
- assert_equal true, @user.preferred_notifications
313
- end
314
- end
315
-
316
- class PreferencesGroupReaderTest < ModelPreferenceTest
317
- def setup
318
- User.preference :notifications, :default => true
319
- @user = create_user
320
- end
321
-
322
- def test_should_use_default_value_if_not_stored
323
- assert_equal true, @user.preferred(:notifications, :chat)
324
- end
325
-
326
- def test_should_use_group_default_value_if_not_stored
327
- User.preference :language, :string, :default => 'English', :group_defaults => {:chat => 'Latin'}
328
- assert_equal 'Latin', @user.preferred(:language, :chat)
329
- end
330
-
331
- def test_should_use_stored_value_if_stored
332
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
333
- assert_equal false, @user.preferred(:notifications, :chat)
334
- end
335
-
336
- def test_should_cache_stored_values
337
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
338
- assert_queries(1) { @user.preferred(:notifications, :chat) }
339
- assert_queries(0) { @user.preferred(:notifications, :chat) }
340
- end
341
-
342
- def test_should_not_query_if_preferences_already_loaded
343
- @user.preferences(:chat)
344
- assert_queries(0) { @user.preferred(:notifications, :chat) }
345
- end
346
-
347
- def test_should_use_value_from_preferences_lookup
348
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
349
- @user.preferences(:chat)
350
-
351
- assert_queries(0) { assert_equal false, @user.preferred(:notifications, :chat) }
352
- end
353
-
354
- def test_should_be_able_to_use_prefers_reader
355
- assert_equal true, @user.prefers_notifications(:chat)
356
- end
357
-
358
- def test_should_be_able_to_use_preferred_reader
359
- assert_equal true, @user.preferred_notifications(:chat)
360
- end
361
- end
362
-
363
- class PreferencesARGroupReaderTest < ModelPreferenceTest
364
- def setup
365
- @car = create_car
366
-
367
- User.preference :notifications, :default => true
368
- @user = create_user
369
- end
370
-
371
- def test_use_default_value_if_not_stored
372
- assert_equal true, @user.preferred(:notifications, @car)
373
- end
374
-
375
- def test_should_use_stored_value_if_stored
376
- create_preference(:owner => @user, :group_type => 'Car', :group_id => @car.id, :name => 'notifications', :value => false)
377
- assert_equal false, @user.preferred(:notifications, @car)
378
- end
379
-
380
- def test_should_use_value_from_preferences_lookup
381
- create_preference(:owner => @user, :group_type => 'Car', :group_id => @car.id, :name => 'notifications', :value => false)
382
- @user.preferences(@car)
383
-
384
- assert_queries(0) { assert_equal false, @user.preferred(:notifications, @car) }
385
- end
386
-
387
- def test_should_be_able_to_use_prefers_reader
388
- assert_equal true, @user.prefers_notifications(@car)
389
- end
390
-
391
- def test_should_be_able_to_use_preferred_reader
392
- assert_equal true, @user.preferred_notifications(@car)
393
- end
394
- end
395
-
396
- class PreferencesQueryTest < ModelPreferenceTest
397
- def setup
398
- User.preference :language, :string
399
- @user = create_user
400
- end
401
-
402
- def test_should_raise_exception_if_invalid_preference_queried
403
- exception = assert_raise(ArgumentError) { @user.preferred?(:invalid) }
404
- assert_equal 'Unknown preference: invalid', exception.message
405
- end
406
-
407
- def test_should_be_true_if_present
408
- @user.preferred_language = 'English'
409
- assert_equal true, @user.preferred?(:language)
410
- end
411
-
412
- def test_should_be_false_if_not_present
413
- assert_equal false, @user.preferred?(:language)
414
- end
415
-
416
- def test_should_use_stored_value_if_stored
417
- create_preference(:owner => @user, :name => 'language', :value => 'English')
418
- assert_equal true, @user.preferred?(:language)
419
- end
420
-
421
- def test_should_cache_stored_values
422
- create_preference(:owner => @user, :name => 'language', :value => 'English')
423
- assert_queries(1) { @user.preferred?(:language) }
424
- assert_queries(0) { @user.preferred?(:language) }
425
- end
426
-
427
- def test_should_be_able_to_use_prefers_reader
428
- assert_equal false, @user.prefers_language?
429
- end
430
-
431
- def test_should_be_able_to_use_preferred_reader
432
- assert_equal false, @user.preferred_language?
433
- end
434
- end
435
-
436
- class PreferencesGroupQueryTest < ModelPreferenceTest
437
- def setup
438
- User.preference :language, :string
439
- @user = create_user
440
- end
441
-
442
- def test_should_be_true_if_present
443
- @user.preferred_language = 'English', :chat
444
- assert_equal true, @user.preferred?(:language, :chat)
445
- end
446
-
447
- def test_should_be_false_if_not_present
448
- assert_equal false, @user.preferred?(:language, :chat)
449
- end
450
-
451
- def test_should_use_stored_value_if_stored
452
- create_preference(:owner => @user, :group_type => 'chat', :name => 'language', :value => 'English')
453
- assert_equal true, @user.preferred?(:language, :chat)
454
- end
455
-
456
- def test_should_cache_stored_values
457
- create_preference(:owner => @user, :group_type => 'chat', :name => 'language', :value => 'English')
458
- assert_queries(1) { @user.preferred?(:language, :chat) }
459
- assert_queries(0) { @user.preferred?(:language, :chat) }
460
- end
461
-
462
- def test_should_be_able_to_use_prefers_reader
463
- assert_equal false, @user.prefers_language?(:chat)
464
- end
465
-
466
- def test_should_be_able_to_use_preferred_reader
467
- assert_equal false, @user.preferred_language?(:chat)
468
- end
469
- end
470
-
471
- class PreferencesARGroupQueryTest < ModelPreferenceTest
472
- def setup
473
- @car = create_car
474
-
475
- User.preference :language, :string
476
- @user = create_user
477
- end
478
-
479
- def test_should_be_true_if_present
480
- @user.preferred_language = 'English', @car
481
- assert_equal true, @user.preferred?(:language, @car)
482
- end
483
-
484
- def test_should_be_false_if_not_present
485
- assert_equal false, @user.preferred?(:language, @car)
486
- end
487
-
488
- def test_should_use_stored_value_if_stored
489
- create_preference(:owner => @user, :group_type => 'Car', :group_id => @car.id, :name => 'language', :value => 'English')
490
- assert_equal true, @user.preferred?(:language, @car)
491
- end
492
-
493
- def test_should_be_able_to_use_prefers_reader
494
- assert_equal false, @user.prefers_language?(@car)
495
- end
496
-
497
- def test_should_be_able_to_use_preferred_reader
498
- assert_equal false, @user.preferred_language?(@car)
499
- end
500
- end
501
-
502
- class PreferencesWriterTest < ModelPreferenceTest
503
- def setup
504
- User.preference :notifications, :boolean, :default => true
505
- User.preference :language, :string, :default => 'English'
506
- @user = create_user(:login => 'admin')
507
- end
508
-
509
- def test_should_raise_exception_if_invalid_preference_written
510
- exception = assert_raise(ArgumentError) { @user.write_preference(:invalid, true) }
511
- assert_equal 'Unknown preference: invalid', exception.message
512
- end
513
-
514
- def test_should_have_same_value_if_not_changed
515
- @user.write_preference(:notifications, true)
516
- assert_equal true, @user.preferred(:notifications)
517
- end
518
-
519
- def test_should_use_new_value_if_changed
520
- @user.write_preference(:notifications, false)
521
- assert_equal false, @user.preferred(:notifications)
522
- end
523
-
524
- def test_should_not_save_record_after_changing_preference
525
- @user.login = 'test'
526
- @user.write_preference(:notifications, false)
527
-
528
- assert_equal 'admin', User.find(@user.id).login
529
- end
530
-
531
- def test_should_not_create_stored_preferences_immediately
532
- @user.write_preference(:notifications, false)
533
- assert @user.stored_preferences.empty?
534
- end
535
-
536
- def test_should_not_create_stored_preference_if_value_not_changed
537
- @user.write_preference(:notifications, true)
538
- @user.save!
539
-
540
- assert_equal 0, @user.stored_preferences.count
541
- end
542
-
543
- def test_should_not_create_stored_integer_preference_if_typecast_not_changed
544
- User.preference :age, :integer
545
-
546
- @user.write_preference(:age, '')
547
- @user.save!
548
-
549
- assert_equal 0, @user.stored_preferences.count
550
- end
551
-
552
- def test_should_create_stored_integer_preference_if_typecast_changed
553
- User.preference :age, :integer, :default => 0
554
-
555
- @user.write_preference(:age, '')
556
- @user.save!
557
-
558
- assert_nil @user.preferred(:age)
559
- assert_equal 1, @user.stored_preferences.count
560
- end
561
-
562
- def test_should_create_stored_preference_if_value_changed
563
- @user.write_preference(:notifications, false)
564
- @user.save!
565
-
566
- assert_equal 1, @user.stored_preferences.count
567
- end
568
-
569
- def test_should_overwrite_existing_stored_preference_if_value_changed
570
- preference = create_preference(:owner => @user, :name => 'notifications', :value => true)
571
-
572
- @user.write_preference(:notifications, false)
573
- @user.save!
574
-
575
- preference.reload
576
- assert_equal false, preference.value
577
- end
578
-
579
- def test_should_not_remove_preference_if_set_to_default
580
- create_preference(:owner => @user, :name => 'notifications', :value => false)
581
-
582
- @user.write_preference(:notifications, true)
583
- @user.save!
584
- @user.reload
585
-
586
- assert_equal 1, @user.stored_preferences.size
587
- preference = @user.stored_preferences.first
588
- assert_equal true, preference.value
589
- end
590
-
591
- def test_should_not_remove_preference_if_set_to_nil
592
- create_preference(:owner => @user, :name => 'notifications', :value => false)
593
-
594
- @user.write_preference(:notifications, nil)
595
- @user.save!
596
- @user.reload
597
-
598
- assert_equal 1, @user.stored_preferences.size
599
- preference = @user.stored_preferences.first
600
- assert_nil preference.value
601
- end
602
-
603
- def test_should_not_query_for_old_value_if_preferences_loaded
604
- @user.preferences
605
-
606
- assert_queries(0) { @user.write_preference(:notifications, false) }
607
- end
608
- end
609
-
610
- class PreferencesGroupWriterTest < ModelPreferenceTest
611
- def setup
612
- User.preference :notifications, :boolean, :default => true
613
- User.preference :language, :string, :default => 'English'
614
- @user = create_user(:login => 'admin')
615
- end
616
-
617
- def test_should_have_same_value_if_not_changed
618
- @user.write_preference(:notifications, true, :chat)
619
- assert_equal true, @user.preferred(:notifications, :chat)
620
- end
621
-
622
- def test_should_use_new_value_if_changed
623
- @user.write_preference(:notifications, false, :chat)
624
- assert_equal false, @user.preferred(:notifications, :chat)
625
- end
626
-
627
- def test_should_not_create_stored_preference_if_value_not_changed
628
- @user.write_preference(:notifications, true, :chat)
629
- @user.save!
630
-
631
- assert_equal 0, @user.stored_preferences.count
632
- end
633
-
634
- def test_should_create_stored_preference_if_value_changed
635
- @user.write_preference(:notifications, false, :chat)
636
- @user.save!
637
-
638
- assert_equal 1, @user.stored_preferences.count
639
- end
640
-
641
- def test_should_set_group_attributes_on_stored_preferences
642
- @user.write_preference(:notifications, false, :chat)
643
- @user.save!
644
-
645
- preference = @user.stored_preferences.first
646
- assert_equal 'chat', preference.group_type
647
- assert_nil preference.group_id
648
- end
649
-
650
- def test_should_overwrite_existing_stored_preference_if_value_changed
651
- preference = create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => true)
652
-
653
- @user.write_preference(:notifications, false, :chat)
654
- @user.save!
655
-
656
- preference.reload
657
- assert_equal false, preference.value
658
- end
659
- end
660
-
661
- class PreferencesARGroupWriterTest < ModelPreferenceTest
662
- def setup
663
- @car = create_car
664
-
665
- User.preference :notifications, :boolean, :default => true
666
- User.preference :language, :string, :default => 'English'
667
- @user = create_user(:login => 'admin')
668
- end
669
-
670
- def test_should_have_same_value_if_not_changed
671
- @user.write_preference(:notifications, true, @car)
672
- assert_equal true, @user.preferred(:notifications, @car)
673
- end
674
-
675
- def test_should_use_new_value_if_changed
676
- @user.write_preference(:notifications, false, @car)
677
- assert_equal false, @user.preferred(:notifications, @car)
678
- end
679
-
680
- def test_should_not_create_stored_preference_if_value_not_changed
681
- @user.write_preference(:notifications, true, @car)
682
- @user.save!
683
-
684
- assert_equal 0, @user.stored_preferences.count
685
- end
686
-
687
- def test_should_create_stored_preference_if_value_changed
688
- @user.write_preference(:notifications, false, @car)
689
- @user.save!
690
-
691
- assert_equal 1, @user.stored_preferences.count
692
- end
693
-
694
- def test_should_set_group_attributes_on_stored_preferences
695
- @user.write_preference(:notifications, false, @car)
696
- @user.save!
697
-
698
- preference = @user.stored_preferences.first
699
- assert_equal 'Car', preference.group_type
700
- assert_equal @car.id, preference.group_id
701
- end
702
- end
703
-
704
- class PreferencesAfterChangingPreferenceTest < ModelPreferenceTest
705
- def setup
706
- User.preference :notifications, :boolean, :default => true
707
- User.preference :language, :string, :default => 'English'
708
- @user = create_user
709
-
710
- @user.write_preference(:notifications, false)
711
- end
712
-
713
- def test_should_query_preferences_changed
714
- assert_equal true, @user.preferences_changed?
715
- end
716
-
717
- def test_should_query_preference_changed
718
- assert_equal true, @user.prefers_notifications_changed?
719
- end
720
-
721
- def test_should_not_query_preferences_changed_for_group
722
- assert_equal false, @user.preferences_changed?(:chat)
723
- end
724
-
725
- def test_should_not_query_preference_changed_for_group
726
- assert_equal false, @user.prefers_notifications_changed?(:chat)
727
- end
728
-
729
- def test_should_have_preferences_changed
730
- assert_equal ['notifications'], @user.preferences_changed
731
- end
732
-
733
- def test_should_not_build_same_preferences_changed_result
734
- assert_not_same @user.preferences_changed, @user.preferences_changed
735
- end
736
-
737
- def test_should_not_have_preferences_changed_for_group
738
- assert_equal [], @user.preferences_changed(:chat)
739
- end
740
-
741
- def test_should_track_multiple_preferences_changed
742
- @user.write_preference(:language, 'Latin')
743
- assert_equal ['language', 'notifications'], @user.preferences_changed.sort
744
- end
745
-
746
- def test_should_have_preference_changes
747
- assert_equal e = {'notifications' => [true, false]}, @user.preference_changes
748
- end
749
-
750
- def test_should_not_build_same_preference_changes_result
751
- assert_not_same @user.preference_changes, @user.preference_changes
752
- end
753
-
754
- def test_should_have_preference_change
755
- assert_equal [true, false], @user.prefers_notifications_change
756
- end
757
-
758
- def test_should_have_preference_was
759
- assert_equal true, @user.prefers_notifications_was
760
- end
761
-
762
- def test_should_not_have_preference_changes_for_group
763
- assert_equal e = {}, @user.preference_changes(:chat)
764
- end
765
-
766
- def test_should_not_have_preference_change_for_group
767
- assert_nil @user.prefers_notifications_change(:chat)
768
- end
769
-
770
- def test_should_have_preference_was_for_group
771
- assert_equal true, @user.prefers_notifications_was(:chat)
772
- end
773
-
774
- def test_should_use_latest_value_for_preference_changes
775
- @user.write_preference(:notifications, nil)
776
- assert_equal e = {'notifications' => [true, nil]}, @user.preference_changes
777
- end
778
-
779
- def test_should_use_cloned_old_value_for_preference_changes
780
- old_value = @user.preferred(:language)
781
- @user.write_preference(:language, 'Latin')
782
-
783
- tracked_old_value = @user.preference_changes['language'][0]
784
- assert_equal old_value, tracked_old_value
785
- assert_not_same old_value, tracked_old_value
786
- end
787
-
788
- def test_should_track_multiple_preference_changes
789
- @user.write_preference(:language, 'Latin')
790
- assert_equal e = {'notifications' => [true, false], 'language' => ['English', 'Latin']}, @user.preference_changes
791
- end
792
- end
793
-
794
- class PreferencesAfterChangingGroupPreferenceTest < ModelPreferenceTest
795
- def setup
796
- User.preference :notifications, :boolean, :default => true
797
- User.preference :language, :string, :default => 'English'
798
- @user = create_user
799
-
800
- @user.write_preference(:notifications, false, :chat)
801
- end
802
-
803
- def test_should_not_query_preferences_changed
804
- assert_equal false, @user.preferences_changed?
805
- end
806
-
807
- def test_not_should_query_preference_changed
808
- assert_equal false, @user.prefers_notifications_changed?
809
- end
810
-
811
- def test_should_query_preferences_changed_for_group
812
- assert_equal true, @user.preferences_changed?(:chat)
813
- end
814
-
815
- def test_should_query_preference_changed_for_group
816
- assert_equal true, @user.prefers_notifications_changed?(:chat)
817
- end
818
-
819
- def test_should_have_preferences_changed
820
- assert_equal [], @user.preferences_changed
821
- end
822
-
823
- def test_should_not_have_preferences_changed_for_group
824
- assert_equal ['notifications'], @user.preferences_changed(:chat)
825
- end
826
-
827
- def test_should_have_preference_changes
828
- assert_equal e = {}, @user.preference_changes
829
- end
830
-
831
- def test_should_not_have_preference_change
832
- assert_nil @user.prefers_notifications_change
833
- end
834
-
835
- def test_should_have_preference_was
836
- assert_equal true, @user.prefers_notifications_was
837
- end
838
-
839
- def test_should_not_have_preference_changes_for_group
840
- assert_equal e = {'notifications' => [true, false]}, @user.preference_changes(:chat)
841
- end
842
-
843
- def test_should_have_preference_change_for_group
844
- assert_equal [true, false], @user.prefers_notifications_change(:chat)
845
- end
846
-
847
- def test_should_have_preference_was_for_group
848
- assert_equal true, @user.prefers_notifications_was(:chat)
849
- end
850
- end
851
-
852
- class PreferencesAfterRevertPreferenceChangeTest < ModelPreferenceTest
853
- def setup
854
- User.preference :notifications, :boolean, :default => true
855
-
856
- @user = create_user
857
- @user.write_preference(:notifications, false)
858
- @user.write_preference(:notifications, true)
859
- end
860
-
861
- def test_should_not_query_preferences_changed
862
- assert_equal false, @user.preferences_changed?
863
- end
864
-
865
- def test_should_not_have_preferences_changed
866
- assert_equal [], @user.preferences_changed
867
- end
868
-
869
- def test_should_not_have_preference_changes
870
- assert_equal e = {}, @user.preference_changes
871
- end
872
- end
873
-
874
- class PreferencesAfterForcingChangeTest < ModelPreferenceTest
875
- def setup
876
- User.preference :notifications, :boolean, :default => true
877
-
878
- @user = create_user
879
- @user.prefers_notifications_will_change!
880
- @user.save
881
- end
882
-
883
- def test_should_store_preference
884
- assert_equal 1, @user.stored_preferences.count
885
-
886
- preference = @user.stored_preferences.first
887
- assert_equal nil, preference.group_type
888
- assert_equal nil, preference.group_id
889
- assert_equal true, preference.value
890
- end
891
- end
892
-
893
- class PreferencesAfterForcingChangeForGroupTest < ModelPreferenceTest
894
- def setup
895
- User.preference :notifications, :boolean, :default => true
896
- User.preference :language, :string, :default => 'English'
897
-
898
- @user = create_user
899
- @user.prefers_notifications_will_change!(:chat)
900
- @user.save
901
- end
902
-
903
- def test_should_store_preference
904
- assert_equal 1, @user.stored_preferences.count
905
-
906
- preference = @user.stored_preferences.first
907
- assert_equal 'chat', preference.group_type
908
- assert_equal nil, preference.group_id
909
- assert_equal true, preference.value
910
- end
911
-
912
- def test_should_use_cloned_value_for_tracking_old_value
913
- old_value = @user.preferred(:language)
914
- @user.preferred_language_will_change!
915
-
916
- tracked_old_value = @user.preferred_language_was
917
- assert_equal old_value, tracked_old_value
918
- assert_not_same old_value, tracked_old_value
919
- end
920
- end
921
-
922
- class PreferencesAfterResettingPreferenceTest < ModelPreferenceTest
923
- def setup
924
- User.preference :notifications, :boolean, :default => true
925
-
926
- @user = create_user
927
- @user.write_preference(:notifications, false)
928
- @user.write_preference(:notifications, false, :chat)
929
- @user.reset_prefers_notifications!
930
- end
931
-
932
- def test_should_revert_to_original_value
933
- assert_equal true, @user.preferred(:notifications)
934
- end
935
-
936
- def test_should_not_reset_groups
937
- assert_equal true, @user.preferred(:notifications, :chat)
938
- end
939
- end
940
-
941
- class PreferencesAfterResettingPreferenceTest < ModelPreferenceTest
942
- def setup
943
- User.preference :notifications, :boolean, :default => true
944
-
945
- @user = create_user
946
- @user.write_preference(:notifications, false)
947
- @user.write_preference(:notifications, false, :chat)
948
- @user.reset_prefers_notifications!(:chat)
949
- end
950
-
951
- def test_should_revert_to_original_value
952
- assert_equal true, @user.preferred(:notifications, :chat)
953
- end
954
-
955
- def test_should_not_reset_default_group
956
- assert_equal false, @user.preferred(:notifications)
957
- end
958
- end
959
-
960
- class PreferencesLookupTest < ModelPreferenceTest
961
- def setup
962
- User.preference :notifications, :boolean, :default => true
963
- User.preference :language, :string, :default => 'English', :group_defaults => {:chat => 'Latin'}
964
-
965
- @user = create_user
966
- end
967
-
968
- def test_should_only_have_defaults_if_nothing_customized
969
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences
970
- end
971
-
972
- def test_should_merge_defaults_with_unsaved_changes
973
- @user.write_preference(:notifications, false)
974
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences
975
- end
976
-
977
- def test_should_merge_defaults_with_saved_changes
978
- create_preference(:owner => @user, :name => 'notifications', :value => false)
979
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences
980
- end
981
-
982
- def test_should_merge_stored_preferences_with_unsaved_changes
983
- create_preference(:owner => @user, :name => 'notifications', :value => false)
984
- @user.write_preference(:language, 'Latin')
985
- assert_equal e = {'notifications' => false, 'language' => 'Latin'}, @user.preferences
986
- end
987
-
988
- def test_should_use_unsaved_changes_over_stored_preferences
989
- create_preference(:owner => @user, :name => 'notifications', :value => true)
990
- @user.write_preference(:notifications, false)
991
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences
992
- end
993
-
994
- def test_should_typecast_unsaved_changes
995
- @user.write_preference(:notifications, 'true')
996
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences
997
- end
998
-
999
- def test_should_cache_results
1000
- assert_queries(1) { @user.preferences }
1001
- assert_queries(0) { @user.preferences }
1002
- end
1003
-
1004
- def test_should_not_query_if_stored_preferences_eager_loaded
1005
- create_preference(:owner => @user, :name => 'notifications', :value => false)
1006
- user = User.find(@user.id, :include => :stored_preferences)
1007
-
1008
- assert_queries(0) do
1009
- assert_equal e = {'notifications' => false, 'language' => 'English'}, user.preferences
1010
- end
1011
- end
1012
-
1013
- def test_should_not_generate_same_object_twice
1014
- assert_not_same @user.preferences, @user.preferences
1015
- end
1016
-
1017
- def test_should_use_preferences_for_prefs
1018
- assert_equal @user.preferences, @user.prefs
1019
- end
1020
- end
1021
-
1022
- class PreferencesGroupLookupTest < ModelPreferenceTest
1023
- def setup
1024
- User.preference :notifications, :boolean, :default => true
1025
- User.preference :language, :string, :default => 'English', :group_defaults => {:chat => 'Latin'}
1026
-
1027
- @user = create_user
1028
- end
1029
-
1030
- def test_should_only_have_defaults_if_nothing_customized
1031
- assert_equal e = {'notifications' => true, 'language' => 'Latin'}, @user.preferences(:chat)
1032
- end
1033
-
1034
- def test_should_merge_defaults_with_unsaved_changes
1035
- @user.write_preference(:notifications, false, :chat)
1036
- assert_equal e = {'notifications' => false, 'language' => 'Latin'}, @user.preferences(:chat)
1037
- end
1038
-
1039
- def test_should_merge_defaults_with_saved_changes
1040
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
1041
- assert_equal e = {'notifications' => false, 'language' => 'Latin'}, @user.preferences(:chat)
1042
- end
1043
-
1044
- def test_should_merge_stored_preferences_with_unsaved_changes
1045
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
1046
- @user.write_preference(:language, 'Spanish', :chat)
1047
- assert_equal e = {'notifications' => false, 'language' => 'Spanish'}, @user.preferences(:chat)
1048
- end
1049
-
1050
- def test_should_typecast_unsaved_changes
1051
- @user.write_preference(:notifications, 'true', :chat)
1052
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences
1053
- end
1054
-
1055
- def test_should_cache_results
1056
- assert_queries(1) { @user.preferences(:chat) }
1057
- assert_queries(0) { @user.preferences(:chat) }
1058
- end
1059
-
1060
- def test_should_not_query_if_all_preferences_individually_loaded
1061
- @user.preferred(:notifications, :chat)
1062
- @user.preferred(:language, :chat)
1063
-
1064
- assert_queries(0) { @user.preferences(:chat) }
1065
- end
1066
-
1067
- def test_should_not_generate_same_object_twice
1068
- assert_not_same @user.preferences(:chat), @user.preferences(:chat)
1069
- end
1070
- end
1071
-
1072
- class PreferencesARGroupLookupTest < ModelPreferenceTest
1073
- def setup
1074
- @car = create_car
1075
-
1076
- User.preference :notifications, :boolean, :default => true
1077
- User.preference :language, :string, :default => 'English'
1078
-
1079
- @user = create_user
1080
- end
1081
-
1082
- def test_should_only_have_defaults_if_nothing_customized
1083
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences(@car)
1084
- end
1085
-
1086
- def test_should_merge_defaults_with_unsaved_changes
1087
- @user.write_preference(:notifications, false, @car)
1088
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences(@car)
1089
- end
1090
-
1091
- def test_should_merge_defaults_with_saved_changes
1092
- create_preference(:owner => @user, :group_type => 'Car', :group_id => @car.id, :name => 'notifications', :value => false)
1093
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences(@car)
1094
- end
1095
-
1096
- def test_should_merge_stored_preferences_with_unsaved_changes
1097
- create_preference(:owner => @user, :group_type => 'Car', :group_id => @car.id, :name => 'notifications', :value => false)
1098
- @user.write_preference(:language, 'Latin', @car)
1099
- assert_equal e = {'notifications' => false, 'language' => 'Latin'}, @user.preferences(@car)
1100
- end
1101
- end
1102
-
1103
- class PreferencesNilGroupLookupTest < ModelPreferenceTest
1104
- def setup
1105
- @car = create_car
1106
-
1107
- User.preference :notifications, :boolean, :default => true
1108
- User.preference :language, :string, :default => 'English'
1109
-
1110
- @user = create_user
1111
- end
1112
-
1113
- def test_should_only_have_defaults_if_nothing_customized
1114
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences(nil)
1115
- end
1116
-
1117
- def test_should_merge_defaults_with_unsaved_changes
1118
- @user.write_preference(:notifications, false)
1119
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences(nil)
1120
- end
1121
-
1122
- def test_should_merge_defaults_with_saved_changes
1123
- create_preference(:owner => @user, :name => 'notifications', :value => false)
1124
- assert_equal e = {'notifications' => false, 'language' => 'English'}, @user.preferences(nil)
1125
- end
1126
-
1127
- def test_should_merge_stored_preferences_with_unsaved_changes
1128
- create_preference(:owner => @user, :name => 'notifications', :value => false)
1129
- @user.write_preference(:language, 'Latin')
1130
- assert_equal e = {'notifications' => false, 'language' => 'Latin'}, @user.preferences(nil)
1131
- end
1132
- end
1133
-
1134
- class PreferencesLookupWithGroupsTest < ModelPreferenceTest
1135
- def setup
1136
- User.preference :notifications, :boolean, :default => true
1137
- User.preference :language, :string, :default => 'English'
1138
-
1139
- @user = create_user
1140
- create_preference(:owner => @user, :group_type => 'chat', :name => 'notifications', :value => false)
1141
- end
1142
-
1143
- def test_not_include_group_preferences_by_default
1144
- assert_equal e = {'notifications' => true, 'language' => 'English'}, @user.preferences
1145
- end
1146
- end
1147
-
1148
- class PreferencesAfterBeingReloadedTest < ModelPreferenceTest
1149
- def setup
1150
- User.preference :notifications, :boolean, :default => true
1151
-
1152
- @user = create_user
1153
- @user.write_preference(:notifications, false)
1154
- @user.reload
1155
- end
1156
-
1157
- def test_should_reset_unsaved_preferences
1158
- assert_equal true, @user.preferred(:notifications)
1159
- end
1160
-
1161
- def test_should_not_save_reset_preferences
1162
- @user.save!
1163
- assert @user.stored_preferences.empty?
1164
- end
1165
-
1166
- def test_should_reset_preferences
1167
- assert_equal e = {'notifications' => true}, @user.preferences
1168
- end
1169
-
1170
- def test_should_clear_query_cache_for_preferences
1171
- assert_queries(1) { @user.preferences }
1172
- end
1173
-
1174
- def test_should_reset_preferences_changed_query
1175
- assert_equal false, @user.preferences_changed?
1176
- end
1177
-
1178
- def test_should_reset_preferences_changed
1179
- assert_equal [], @user.preferences_changed
1180
- end
1181
-
1182
- def test_should_reset_preference_changes
1183
- assert_equal e = {}, @user.preference_changes
1184
- end
1185
- end
1186
-
1187
- class PreferencesForGroupAfterBeingReloadedTest < ModelPreferenceTest
1188
- def setup
1189
- User.preference :notifications, :boolean, :default => true
1190
-
1191
- @user = create_user
1192
- @user.write_preference(:notifications, false, :chat)
1193
- @user.reload
1194
- end
1195
-
1196
- def test_should_reset_unsaved_preferences
1197
- assert_equal true, @user.preferred(:notifications, :chat)
1198
- end
1199
-
1200
- def test_should_reset_preferences
1201
- assert_equal e = {'notifications' => true}, @user.preferences(:chat)
1202
- end
1203
-
1204
- def test_should_clear_query_cache_for_preferences
1205
- assert_queries(1) { @user.preferences(:chat) }
1206
- end
1207
-
1208
- def test_should_reset_preferences_changed_query
1209
- assert_equal false, @user.preferences_changed?(:chat)
1210
- end
1211
-
1212
- def test_should_reset_preferences_changed
1213
- assert_equal [], @user.preferences_changed(:chat)
1214
- end
1215
-
1216
- def test_should_reset_preference_changes
1217
- assert_equal e = {}, @user.preference_changes(:chat)
1218
- end
1219
- end
1220
-
1221
- class PreferencesWithScopeTest < ModelPreferenceTest
1222
- def setup
1223
- User.preference :notifications
1224
- User.preference :language, :string, :default => 'English'
1225
- User.preference :color, :string, :default => 'red'
1226
-
1227
- @user = create_user
1228
- @customized_user = create_user(:login => 'customized',
1229
- :prefers_notifications => false,
1230
- :preferred_language => 'Latin'
1231
- )
1232
- @customized_user.prefers_notifications = false, :chat
1233
- @customized_user.preferred_language = 'Latin', :chat
1234
- @customized_user.save!
1235
- end
1236
-
1237
- def test_should_not_find_if_no_preference_matched
1238
- assert_equal [], User.with_preferences(:language => 'Italian')
1239
- end
1240
-
1241
- def test_should_find_with_null_preference
1242
- assert_equal [@user], User.with_preferences(:notifications => nil)
1243
- end
1244
-
1245
- def test_should_find_with_default_preference
1246
- assert_equal [@user], User.with_preferences(:language => 'English')
1247
- end
1248
-
1249
- def test_should_find_with_multiple_default_preferences
1250
- assert_equal [@user], User.with_preferences(:notifications => nil, :language => 'English')
1251
- end
1252
-
1253
- def test_should_find_with_custom_preference
1254
- assert_equal [@customized_user], User.with_preferences(:language => 'Latin')
1255
- end
1256
-
1257
- def test_should_find_with_multiple_custom_preferences
1258
- assert_equal [@customized_user], User.with_preferences(:notifications => false, :language => 'Latin')
1259
- end
1260
-
1261
- def test_should_find_with_mixed_default_and_custom_preferences
1262
- assert_equal [@customized_user], User.with_preferences(:color => 'red', :language => 'Latin')
1263
- end
1264
-
1265
- def test_should_find_with_default_group_preference
1266
- assert_equal [@user], User.with_preferences(:chat => {:language => 'English'})
1267
- end
1268
-
1269
- def test_should_find_with_customized_default_group_preference
1270
- User.preference :country, :string, :default => 'US', :group_defaults => {:chat => 'UK'}
1271
- @customized_user.preferred_country = 'US', :chat
1272
- @customized_user.save!
1273
-
1274
- assert_equal [@user], User.with_preferences(:chat => {:country => 'UK'})
1275
- end
1276
-
1277
- def test_should_find_with_multiple_default_group_preferences
1278
- assert_equal [@user], User.with_preferences(:chat => {:notifications => nil, :language => 'English'})
1279
- end
1280
-
1281
- def test_should_find_with_custom_group_preference
1282
- assert_equal [@customized_user], User.with_preferences(:chat => {:language => 'Latin'})
1283
- end
1284
-
1285
- def test_should_find_with_multiple_custom_group_preferences
1286
- assert_equal [@customized_user], User.with_preferences(:chat => {:notifications => false, :language => 'Latin'})
1287
- end
1288
-
1289
- def test_should_find_with_mixed_default_and_custom_group_preferences
1290
- assert_equal [@customized_user], User.with_preferences(:chat => {:color => 'red', :language => 'Latin'})
1291
- end
1292
-
1293
- def test_should_find_with_mixed_basic_and_group_preferences
1294
- @customized_user.preferred_language = 'English'
1295
- @customized_user.save!
1296
-
1297
- assert_equal [@customized_user], User.with_preferences(:language => 'English', :chat => {:language => 'Latin'})
1298
- end
1299
-
1300
- def test_should_allow_chaining
1301
- assert_equal [@user], User.with_preferences(:language => 'English').with_preferences(:color => 'red')
1302
- end
1303
- end
1304
-
1305
- class PreferencesWithoutScopeTest < ModelPreferenceTest
1306
- def setup
1307
- User.preference :notifications
1308
- User.preference :language, :string, :default => 'English'
1309
- User.preference :color, :string, :default => 'red'
1310
-
1311
- @user = create_user
1312
- @customized_user = create_user(:login => 'customized',
1313
- :prefers_notifications => false,
1314
- :preferred_language => 'Latin'
1315
- )
1316
- @customized_user.prefers_notifications = false, :chat
1317
- @customized_user.preferred_language = 'Latin', :chat
1318
- @customized_user.save!
1319
- end
1320
-
1321
- def test_should_not_find_if_no_preference_matched
1322
- assert_equal [], User.without_preferences(:color => 'red')
1323
- end
1324
-
1325
- def test_should_find_with_null_preference
1326
- assert_equal [@user], User.without_preferences(:notifications => false)
1327
- end
1328
-
1329
- def test_should_find_with_default_preference
1330
- assert_equal [@user], User.without_preferences(:language => 'Latin')
1331
- end
1332
-
1333
- def test_should_find_with_multiple_default_preferences
1334
- assert_equal [@user], User.without_preferences(:language => 'Latin', :notifications => false)
1335
- end
1336
-
1337
- def test_should_find_with_custom_preference
1338
- assert_equal [@customized_user], User.without_preferences(:language => 'English')
1339
- end
1340
-
1341
- def test_should_find_with_multiple_custom_preferences
1342
- assert_equal [@customized_user], User.without_preferences(:language => 'English', :notifications => nil)
1343
- end
1344
-
1345
- def test_should_find_with_mixed_default_and_custom_preferences
1346
- assert_equal [@customized_user], User.without_preferences(:language => 'English', :color => 'blue')
1347
- end
1348
-
1349
- def test_should_find_with_default_group_preference
1350
- assert_equal [@user], User.without_preferences(:chat => {:language => 'Latin'})
1351
- end
1352
-
1353
- def test_should_find_with_customized_default_group_preference
1354
- User.preference :country, :string, :default => 'US', :group_defaults => {:chat => 'UK'}
1355
- @customized_user.preferred_country = 'US', :chat
1356
- @customized_user.save!
1357
-
1358
- assert_equal [@user], User.without_preferences(:chat => {:country => 'US'})
1359
- end
1360
-
1361
- def test_should_find_with_multiple_default_group_preferences
1362
- assert_equal [@user], User.without_preferences(:chat => {:language => 'Latin', :notifications => false})
1363
- end
1364
-
1365
- def test_should_find_with_custom_group_preference
1366
- assert_equal [@customized_user], User.without_preferences(:chat => {:language => 'English'})
1367
- end
1368
-
1369
- def test_should_find_with_multiple_custom_group_preferences
1370
- assert_equal [@customized_user], User.without_preferences(:chat => {:language => 'English', :notifications => nil})
1371
- end
1372
-
1373
- def test_should_find_with_mixed_default_and_custom_group_preferences
1374
- assert_equal [@customized_user], User.without_preferences(:chat => {:language => 'English', :color => 'blue'})
1375
- end
1376
-
1377
- def test_should_find_with_mixed_basic_and_group_preferences
1378
- @customized_user.preferred_language = 'English'
1379
- @customized_user.save!
1380
-
1381
- assert_equal [@customized_user], User.without_preferences(:language => 'Latin', :chat => {:language => 'English'})
1382
- end
1383
-
1384
- def test_should_allow_chaining
1385
- assert_equal [@user], User.without_preferences(:language => 'Latin').without_preferences(:color => 'blue')
1386
- end
1387
- end