pluginaweek-preferences 0.3.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.
@@ -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
+ Test::Unit::TestCase.class_eval do
12
+ include Factory
13
+ end
@@ -0,0 +1,185 @@
1
+ require "#{File.dirname(__FILE__)}/../test_helper"
2
+
3
+ class PreferenceDefinitionByDefaultTest < ActiveSupport::TestCase
4
+ def setup
5
+ @definition = Preferences::PreferenceDefinition.new(:notifications)
6
+ end
7
+
8
+ def test_should_have_a_name
9
+ assert_equal 'notifications', @definition.name
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 < ActiveSupport::TestCase
26
+ def test_should_raise_exception_if_invalid_option_specified
27
+ assert_raise(ArgumentError) {Preferences::PreferenceDefinition.new(:notifications, :invalid => true)}
28
+ end
29
+ end
30
+
31
+ class PreferenceDefinitionWithDefaultValueTest < ActiveSupport::TestCase
32
+ def setup
33
+ @definition = 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 < ActiveSupport::TestCase
42
+ def setup
43
+ @definition = 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 < ActiveSupport::TestCase
78
+ def setup
79
+ @definition = 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_nil_if_value_is_not_true_string
99
+ assert_nil @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 < ActiveSupport::TestCase
124
+ def setup
125
+ @definition = 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 < ActiveSupport::TestCase
154
+ def setup
155
+ @definition = 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,234 @@
1
+ require "#{File.dirname(__FILE__)}/../test_helper"
2
+
3
+ class PreferenceByDefaultTest < ActiveSupport::TestCase
4
+ def setup
5
+ @preference = Preference.new
6
+ end
7
+
8
+ def test_should_not_have_a_name
9
+ assert @preference.name.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_group_association
21
+ assert_nil @preference.group_id
22
+ end
23
+
24
+ def test_should_not_have_a_group_type
25
+ assert @preference.group_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 < ActiveSupport::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_a_name
44
+ preference = new_preference(:name => nil)
45
+ assert !preference.valid?
46
+ assert preference.errors.invalid?(:name)
47
+ end
48
+
49
+ def test_should_require_an_owner_id
50
+ preference = new_preference(:owner => nil)
51
+ assert !preference.valid?
52
+ assert preference.errors.invalid?(:owner_id)
53
+ end
54
+
55
+ def test_should_require_an_owner_type
56
+ preference = new_preference(:owner => nil)
57
+ assert !preference.valid?
58
+ assert preference.errors.invalid?(:owner_type)
59
+ end
60
+
61
+ def test_should_not_require_a_group_id
62
+ preference = new_preference(:group => nil)
63
+ assert preference.valid?
64
+ end
65
+
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?
70
+ end
71
+
72
+ def test_should_not_require_a_group_type
73
+ preference = new_preference(:group => nil)
74
+ assert preference.valid?
75
+ end
76
+
77
+ def test_should_require_a_group_type_if_id_specified
78
+ preference = new_preference(:group => nil)
79
+ preference.group_id = 1
80
+ assert !preference.valid?
81
+ assert preference.errors.invalid?(:group_type)
82
+ end
83
+
84
+ def test_should_protect_attributes_from_mass_assignment
85
+ preference = Preference.new(
86
+ :id => 1,
87
+ :name => 'notifications',
88
+ :value => '123',
89
+ :owner_id => 1,
90
+ :owner_type => 'User',
91
+ :group_id => 1,
92
+ :group_type => 'Car'
93
+ )
94
+
95
+ assert_nil preference.id
96
+ assert_equal 'notifications', preference.name
97
+ assert_equal '123', preference.value
98
+ assert_equal 1, preference.owner_id
99
+ assert_equal 'User', preference.owner_type
100
+ assert_equal 1, preference.group_id
101
+ assert_equal 'Car', preference.group_type
102
+ end
103
+ end
104
+
105
+ class PreferenceAsAClassTest < ActiveSupport::TestCase
106
+ def test_should_be_able_to_split_nil_groups
107
+ group_id, group_type = Preference.split_group(nil)
108
+ assert_nil group_id
109
+ assert_nil group_type
110
+ end
111
+
112
+ def test_should_be_able_to_split_non_active_record_groups
113
+ group_id, group_type = Preference.split_group('car')
114
+ assert_nil group_id
115
+ assert_equal 'car', group_type
116
+
117
+ group_id, group_type = Preference.split_group(10)
118
+ assert_nil group_id
119
+ assert_equal 10, group_type
120
+ end
121
+
122
+ def test_should_be_able_to_split_active_record_groups
123
+ car = create_car
124
+
125
+ group_id, group_type = Preference.split_group(car)
126
+ assert_equal 1, group_id
127
+ assert_equal 'Car', group_type
128
+ end
129
+ end
130
+
131
+ class PreferenceAfterBeingCreatedTest < ActiveSupport::TestCase
132
+ def setup
133
+ User.preference :notifications, :boolean
134
+
135
+ @preference = create_preference(:name => 'notifications')
136
+ end
137
+
138
+ def test_should_have_an_owner
139
+ assert_not_nil @preference.owner
140
+ end
141
+
142
+ def test_should_have_a_definition
143
+ assert_not_nil @preference.definition
144
+ end
145
+
146
+ def test_should_have_a_value
147
+ assert_not_nil @preference.value
148
+ end
149
+
150
+ def test_should_not_have_a_group_association
151
+ assert_nil @preference.group
152
+ end
153
+
154
+ def teardown
155
+ User.preference_definitions.delete('notifications')
156
+ User.default_preferences.delete('notifications')
157
+ end
158
+ end
159
+
160
+ class PreferenceWithBasicGroupTest < ActiveSupport::TestCase
161
+ def setup
162
+ @preference = create_preference(:group_type => 'car')
163
+ end
164
+
165
+ def test_should_have_a_group_association
166
+ assert_equal 'car', @preference.group
167
+ end
168
+ end
169
+
170
+ class PreferenceWithActiveRecordGroupTest < ActiveSupport::TestCase
171
+ def setup
172
+ @car = create_car
173
+ @preference = create_preference(:group => @car)
174
+ end
175
+
176
+ def test_should_have_a_group_association
177
+ assert_equal @car, @preference.group
178
+ end
179
+ end
180
+
181
+ class PreferenceWithBooleanTypeTest < ActiveSupport::TestCase
182
+ def setup
183
+ User.preference :notifications, :boolean
184
+ end
185
+
186
+ def test_should_type_cast_nil_values
187
+ preference = new_preference(:name => 'notifications', :value => nil)
188
+ assert_nil preference.value
189
+ end
190
+
191
+ def test_should_type_cast_numeric_values
192
+ preference = new_preference(:name => 'notifications', :value => 0)
193
+ assert_equal false, preference.value
194
+
195
+ preference.value = 1
196
+ assert_equal true, preference.value
197
+ end
198
+
199
+ def test_should_type_cast_boolean_values
200
+ preference = new_preference(:name => 'notifications', :value => false)
201
+ assert_equal false, preference.value
202
+
203
+ preference.value = true
204
+ assert_equal true, preference.value
205
+ end
206
+
207
+ def teardown
208
+ User.preference_definitions.delete('notifications')
209
+ User.default_preferences.delete('notifications')
210
+ end
211
+ end
212
+
213
+ class PreferenceWithSTIOwnerTest < ActiveSupport::TestCase
214
+ def setup
215
+ @manager = create_manager
216
+ @preference = create_preference(:owner => @manager, :name => 'health_insurance', :value => true)
217
+ end
218
+
219
+ def test_should_have_an_owner
220
+ assert_equal @manager, @preference.owner
221
+ end
222
+
223
+ def test_should_have_an_owner_type
224
+ assert_equal 'Employee', @preference.owner_type
225
+ end
226
+
227
+ def test_should_have_a_definition
228
+ assert_not_nil @preference.definition
229
+ end
230
+
231
+ def test_should_have_a_value
232
+ assert_equal true, @preference.value
233
+ end
234
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pluginaweek-preferences
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ platform: ruby
6
+ authors:
7
+ - Aaron Pfeifer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-08 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Adds support for easily creating custom preferences for ActiveRecord models
17
+ email: aaron@pluginaweek.org
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - app/models
26
+ - app/models/preference.rb
27
+ - lib/preferences
28
+ - lib/preferences/preference_definition.rb
29
+ - lib/preferences.rb
30
+ - test/unit
31
+ - test/unit/preference_definition_test.rb
32
+ - test/unit/preference_test.rb
33
+ - test/factory.rb
34
+ - test/app_root
35
+ - test/app_root/app
36
+ - test/app_root/app/models
37
+ - test/app_root/app/models/employee.rb
38
+ - test/app_root/app/models/user.rb
39
+ - test/app_root/app/models/manager.rb
40
+ - test/app_root/app/models/car.rb
41
+ - test/app_root/db
42
+ - test/app_root/db/migrate
43
+ - test/app_root/db/migrate/001_create_users.rb
44
+ - test/app_root/db/migrate/004_migrate_preferences_to_version_1.rb
45
+ - test/app_root/db/migrate/002_create_cars.rb
46
+ - test/app_root/db/migrate/003_create_employees.rb
47
+ - test/test_helper.rb
48
+ - test/functional
49
+ - test/functional/preferences_test.rb
50
+ - CHANGELOG.rdoc
51
+ - init.rb
52
+ - LICENSE
53
+ - Rakefile
54
+ - README.rdoc
55
+ has_rdoc: true
56
+ homepage: http://www.pluginaweek.org
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project: pluginaweek
77
+ rubygems_version: 1.2.0
78
+ signing_key:
79
+ specification_version: 2
80
+ summary: Adds support for easily creating custom preferences for ActiveRecord models
81
+ test_files:
82
+ - test/unit/preference_definition_test.rb
83
+ - test/unit/preference_test.rb
84
+ - test/functional/preferences_test.rb