pluginaweek-preferences 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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