dm_preferences 0.5.6 → 1.0
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.
- checksums.yaml +13 -5
- data/.gitignore +2 -0
- data/.travis.yml +2 -2
- data/{CHANGELOG.rdoc → CHANGELOG.md} +26 -15
- data/LICENSE +2 -0
- data/{README.rdoc → README.md} +144 -96
- data/Rakefile +20 -27
- data/dm_preferences.gemspec +7 -5
- data/lib/generators/{USAGE → preferences/USAGE} +0 -0
- data/lib/generators/{preferences_generator.rb → preferences/preferences_generator.rb} +0 -0
- data/lib/generators/{templates → preferences/templates}/create_preferences.rb +5 -1
- data/lib/preferences.rb +33 -10
- data/lib/preferences/engine.rb +2 -1
- data/lib/preferences/preference_definition.rb +15 -4
- data/lib/preferences/version.rb +1 -1
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/{test/app_root → spec/dummy}/app/models/car.rb +0 -0
- data/{test/app_root → spec/dummy}/app/models/employee.rb +0 -0
- data/{test/app_root → spec/dummy}/app/models/manager.rb +0 -0
- data/{test/app_root → spec/dummy}/app/models/user.rb +0 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +32 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/{test/app_root → spec/dummy}/db/migrate/001_create_users.rb +0 -0
- data/{test/app_root → spec/dummy}/db/migrate/002_create_cars.rb +0 -0
- data/{test/app_root → spec/dummy}/db/migrate/003_create_employees.rb +0 -0
- data/spec/dummy/db/migrate/004_create_preferences.rb +16 -0
- data/spec/dummy/db/schema.rb +42 -0
- data/spec/functional/preferences_spec.rb +1427 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/support/assert_queries.rb +36 -0
- data/{test → spec/support}/factory.rb +1 -1
- data/spec/unit/preference_definition_spec.rb +249 -0
- data/{test/unit/preference_test.rb → spec/unit/preference_spec.rb} +114 -122
- metadata +127 -53
- data/test/app_root/db/migrate/004_migrate_preferences_to_version_1.rb +0 -13
- data/test/functional/preferences_test.rb +0 -1387
- data/test/test_helper.rb +0 -26
- data/test/unit/preference_definition_test.rb +0 -237
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
ENV['RAILS_ENV'] ||= 'test'
|
|
2
|
+
|
|
3
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
4
|
+
require 'rspec/rails'
|
|
5
|
+
|
|
6
|
+
Rails.backtrace_cleaner.remove_silencers!
|
|
7
|
+
|
|
8
|
+
# Load support files
|
|
9
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
10
|
+
|
|
11
|
+
RSpec.configure do |config|
|
|
12
|
+
config.mock_with :rspec
|
|
13
|
+
config.use_transactional_fixtures = true
|
|
14
|
+
config.infer_base_class_for_anonymous_controllers = false
|
|
15
|
+
config.order = "random"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Checks for pending migrations before tests are run.
|
|
19
|
+
# If you are not using ActiveRecord, you can remove this line.
|
|
20
|
+
ActiveRecord::Migration.maintain_test_schema!
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
def assert_queries(num = 1, &block)
|
|
3
|
+
expect(ActiveRecord::Base.count_queries(&block)).to eq num
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
# http://stackoverflow.com/questions/5490411/counting-the-number-of-queries-performed
|
|
7
|
+
#------------------------------------------------------------------------------
|
|
8
|
+
module ActiveRecord
|
|
9
|
+
class QueryCounter
|
|
10
|
+
cattr_accessor :query_count do
|
|
11
|
+
0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
IGNORED_SQL = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/, /^SHOW max_identifier_length/]
|
|
15
|
+
|
|
16
|
+
def call(name, start, finish, message_id, values)
|
|
17
|
+
# FIXME: this seems bad. we should probably have a better way to indicate
|
|
18
|
+
# the query was cached
|
|
19
|
+
unless 'CACHE' == values[:name]
|
|
20
|
+
self.class.query_count += 1 unless IGNORED_SQL.any? { |r| values[:sql] =~ r }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
ActiveSupport::Notifications.subscribe('sql.active_record', ActiveRecord::QueryCounter.new)
|
|
27
|
+
|
|
28
|
+
module ActiveRecord
|
|
29
|
+
class Base
|
|
30
|
+
def self.count_queries(&block)
|
|
31
|
+
ActiveRecord::QueryCounter.query_count = 0
|
|
32
|
+
yield
|
|
33
|
+
ActiveRecord::QueryCounter.query_count
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -21,7 +21,7 @@ module Factory
|
|
|
21
21
|
def new_record(model, *args)
|
|
22
22
|
attributes = valid_attributes_for(model, *args)
|
|
23
23
|
record = model.new(attributes)
|
|
24
|
-
attributes.each {|attr, value| record.send("#{attr}=", value)
|
|
24
|
+
attributes.each {|attr, value| record.send("#{attr}=", value)}
|
|
25
25
|
record
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
#------------------------------------------------------------------------------
|
|
4
|
+
describe 'PreferenceDefinitionByDefaultTest' do
|
|
5
|
+
before do
|
|
6
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it 'test_should_have_a_name' do
|
|
10
|
+
# assert_equal 'notifications2', @definition.name
|
|
11
|
+
expect('notifications').to eq @definition.name
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "test_should_not_have_a_default_value" do
|
|
15
|
+
expect(nil).to eq @definition.default_value
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "test_should_have_a_type" do
|
|
19
|
+
assert_equal :boolean, @definition.type
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "test_should_type_cast_values_as_booleans" do
|
|
23
|
+
assert_equal nil, @definition.type_cast(nil)
|
|
24
|
+
assert_equal true, @definition.type_cast(true)
|
|
25
|
+
assert_equal false, @definition.type_cast(false)
|
|
26
|
+
assert_equal false, @definition.type_cast(0)
|
|
27
|
+
assert_equal true, @definition.type_cast(1)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#------------------------------------------------------------------------------
|
|
32
|
+
describe "PreferenceDefinitionTest" do
|
|
33
|
+
it "test_should_raise_exception_if_invalid_option_specified" do
|
|
34
|
+
expect {
|
|
35
|
+
Preferences::PreferenceDefinition.new(:notifications, :invalid => true)
|
|
36
|
+
}.to raise_error(ArgumentError)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
#------------------------------------------------------------------------------
|
|
41
|
+
describe "PreferenceDefinitionWithDefaultValueTest" do
|
|
42
|
+
before do
|
|
43
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :boolean, :default => 1)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "test_should_type_cast_default_values" do
|
|
47
|
+
assert_equal true, @definition.default_value
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
#------------------------------------------------------------------------------
|
|
52
|
+
describe "PreferenceDefinitionWithGroupDefaultsTest" do
|
|
53
|
+
before do
|
|
54
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :boolean, :default => 1, :group_defaults => {:chat => 0})
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "test_should_use_default_for_default_group" do
|
|
58
|
+
assert_equal true, @definition.default_value
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "test_should_use_default_for_unknown_group" do
|
|
62
|
+
assert_equal true, @definition.default_value('email')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "test_should_use_group_default_for_known_group" do
|
|
66
|
+
assert_equal false, @definition.default_value('chat')
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
#------------------------------------------------------------------------------
|
|
71
|
+
describe "PreferenceDefinitionWithStringifiedTypeTest" do
|
|
72
|
+
before do
|
|
73
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :any)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "test_should_symbolize_type" do
|
|
77
|
+
assert_equal :any, @definition.type
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#------------------------------------------------------------------------------
|
|
82
|
+
describe "PreferenceDefinitionWithAnyTypeTest" do
|
|
83
|
+
before do
|
|
84
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :any)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "test_use_custom_type" do
|
|
88
|
+
assert_equal :any, @definition.type
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "test_should_not_be_number" do
|
|
92
|
+
assert !@definition.number?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "test_should_not_type_cast" do
|
|
96
|
+
assert_equal nil, @definition.type_cast(nil)
|
|
97
|
+
assert_equal 0, @definition.type_cast(0)
|
|
98
|
+
assert_equal 1, @definition.type_cast(1)
|
|
99
|
+
assert_equal false, @definition.type_cast(false)
|
|
100
|
+
assert_equal true, @definition.type_cast(true)
|
|
101
|
+
assert_equal '', @definition.type_cast('')
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "test_should_query_false_if_value_is_nil" do
|
|
105
|
+
assert_equal false, @definition.query(nil)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "test_should_query_true_if_value_is_zero" do
|
|
109
|
+
assert_equal true, @definition.query(0)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "test_should_query_true_if_value_is_not_zero" do
|
|
113
|
+
assert_equal true, @definition.query(1)
|
|
114
|
+
assert_equal true, @definition.query(-1)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "test_should_query_false_if_value_is_blank" do
|
|
118
|
+
assert_equal false, @definition.query('')
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "test_should_query_true_if_value_is_not_blank" do
|
|
122
|
+
assert_equal true, @definition.query('hello')
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
#------------------------------------------------------------------------------
|
|
127
|
+
describe "PreferenceDefinitionWithBooleanTypeTest" do
|
|
128
|
+
before do
|
|
129
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "test_should_not_be_number" do
|
|
133
|
+
assert !@definition.number?
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "test_should_not_type_cast_if_value_is_nil" do
|
|
137
|
+
assert_equal nil, @definition.type_cast(nil)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "test_should_type_cast_to_false_if_value_is_zero" do
|
|
141
|
+
assert_equal false, @definition.type_cast(0)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "test_should_type_cast_to_true_if_value_is_not_zero" do
|
|
145
|
+
assert_equal true, @definition.type_cast(1)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "test_should_type_cast_to_true_if_value_is_true_string" do
|
|
149
|
+
assert_equal true, @definition.type_cast('true')
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "test_should_type_cast_to_nil_if_value_is_not_true_string" do
|
|
153
|
+
assert_nil @definition.type_cast('')
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "test_should_query_false_if_value_is_nil" do
|
|
157
|
+
assert_equal false, @definition.query(nil)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "test_should_query_true_if_value_is_one" do
|
|
161
|
+
assert_equal true, @definition.query(1)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "test_should_query_false_if_value_not_one" do
|
|
165
|
+
assert_equal false, @definition.query(0)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "test_should_query_true_if_value_is_true_string" do
|
|
169
|
+
assert_equal true, @definition.query('true')
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "test_should_query_false_if_value_is_not_true_string" do
|
|
173
|
+
assert_equal false, @definition.query('')
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
#------------------------------------------------------------------------------
|
|
178
|
+
describe "PreferenceDefinitionWithNumericTypeTest" do
|
|
179
|
+
before do
|
|
180
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :integer)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "test_should_be_number" do
|
|
184
|
+
assert @definition.number?
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "test_should_type_cast_true_to_integer" do
|
|
188
|
+
assert_equal 1, @definition.type_cast(true)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# it "test_should_type_cast_false_to_integer" do
|
|
192
|
+
# assert_equal 0, @definition.type_cast(false)
|
|
193
|
+
# end
|
|
194
|
+
|
|
195
|
+
it "test_should_type_cast_string_to_integer" do
|
|
196
|
+
assert_equal 0, @definition.type_cast('hello')
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it "test_should_query_false_if_value_is_nil" do
|
|
200
|
+
assert_equal false, @definition.query(nil)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "test_should_query_true_if_value_is_one" do
|
|
204
|
+
assert_equal true, @definition.query(1)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
it "test_should_query_false_if_value_is_zero" do
|
|
208
|
+
assert_equal false, @definition.query(0)
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
#------------------------------------------------------------------------------
|
|
213
|
+
describe "> PreferenceDefinitionWithStringTypeTest" do
|
|
214
|
+
before do
|
|
215
|
+
@definition = Preferences::PreferenceDefinition.new(:notifications, :string)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it "test_should_not_be_number" do
|
|
219
|
+
assert !@definition.number?
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it "test_should_type_cast_integers_to_strings" do
|
|
223
|
+
assert_equal '1', @definition.type_cast('1')
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "test_should_not_type_cast_booleans" do
|
|
227
|
+
assert_equal 't', @definition.type_cast(true)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "test_should_query_false_if_value_is_nil" do
|
|
231
|
+
assert_equal false, @definition.query(nil)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "test_should_query_true_if_value_is_one" do
|
|
235
|
+
assert_equal true, @definition.query(1)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "test_should_query_true_if_value_is_zero" do
|
|
239
|
+
assert_equal true, @definition.query(0)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it "test_should_query_false_if_value_is_blank" do
|
|
243
|
+
assert_equal false, @definition.query('')
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it "test_should_query_true_if_value_is_not_blank" do
|
|
247
|
+
assert_equal true, @definition.query('hello')
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -1,259 +1,251 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
include Factory
|
|
4
|
+
|
|
5
|
+
#------------------------------------------------------------------------------
|
|
6
|
+
describe "PreferenceByDefaultTest" do
|
|
7
|
+
before do
|
|
5
8
|
@preference = Preference.new
|
|
6
9
|
end
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
|
|
11
|
+
it "test_should_not_have_a_name" do
|
|
9
12
|
assert @preference.name.blank?
|
|
10
13
|
end
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
|
|
15
|
+
it "test_should_not_have_an_owner" do
|
|
13
16
|
assert_nil @preference.owner_id
|
|
14
17
|
end
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
it "test_should_not_have_an_owner_type" do
|
|
17
20
|
assert @preference.owner_type.blank?
|
|
18
21
|
end
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
|
|
23
|
+
it "test_should_not_have_a_group_association" do
|
|
21
24
|
assert_nil @preference.group_id
|
|
22
25
|
end
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
|
|
27
|
+
it "test_should_not_have_a_group_type" do
|
|
25
28
|
assert @preference.group_type.nil?
|
|
26
29
|
end
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
|
|
31
|
+
it "test_should_not_have_a_value" do
|
|
29
32
|
assert @preference.value.blank?
|
|
30
33
|
end
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
it "test_should_not_have_a_definition" do
|
|
33
36
|
assert_nil @preference.definition
|
|
34
37
|
end
|
|
35
38
|
end
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
#------------------------------------------------------------------------------
|
|
41
|
+
describe "PreferenceTest" do
|
|
42
|
+
|
|
43
|
+
it "test_should_be_valid_with_a_set_of_valid_attributes" do
|
|
39
44
|
preference = new_preference
|
|
40
45
|
assert preference.valid?
|
|
41
46
|
end
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
|
|
48
|
+
it "test_should_require_a_name" do
|
|
44
49
|
preference = new_preference(:name => nil)
|
|
45
50
|
assert !preference.valid?
|
|
46
|
-
assert preference.errors.
|
|
51
|
+
assert preference.errors.include?(:name)
|
|
47
52
|
end
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
|
|
54
|
+
it "test_should_require_an_owner_id" do
|
|
50
55
|
preference = new_preference(:owner => nil)
|
|
51
56
|
assert !preference.valid?
|
|
52
|
-
assert preference.errors.
|
|
57
|
+
assert preference.errors.include?(:owner_id)
|
|
53
58
|
end
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
|
|
60
|
+
it "test_should_require_an_owner_type" do
|
|
56
61
|
preference = new_preference(:owner => nil)
|
|
57
62
|
assert !preference.valid?
|
|
58
|
-
assert preference.errors.
|
|
63
|
+
assert preference.errors.include?(:owner_type)
|
|
59
64
|
end
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
|
|
66
|
+
it "test_should_not_require_a_group_id" do
|
|
62
67
|
preference = new_preference(:group => nil)
|
|
63
68
|
assert preference.valid?
|
|
64
69
|
end
|
|
65
|
-
|
|
66
|
-
|
|
70
|
+
|
|
71
|
+
it "test_should_not_require_a_group_id_if_type_specified" do
|
|
67
72
|
preference = new_preference(:group => nil)
|
|
68
73
|
preference.group_type = 'Car'
|
|
69
74
|
assert preference.valid?
|
|
70
75
|
end
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
|
|
77
|
+
it "test_should_not_require_a_group_type" do
|
|
73
78
|
preference = new_preference(:group => nil)
|
|
74
79
|
assert preference.valid?
|
|
75
80
|
end
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
|
|
82
|
+
it "test_should_require_a_group_type_if_id_specified" do
|
|
78
83
|
preference = new_preference(:group => nil)
|
|
79
84
|
preference.group_id = 1
|
|
80
85
|
assert !preference.valid?
|
|
81
|
-
assert preference.errors.
|
|
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
|
|
86
|
+
assert preference.errors.include?(:group_type)
|
|
102
87
|
end
|
|
103
88
|
end
|
|
104
89
|
|
|
105
|
-
|
|
106
|
-
|
|
90
|
+
#------------------------------------------------------------------------------
|
|
91
|
+
describe "PreferenceAsAClassTest" do
|
|
92
|
+
it "test_should_be_able_to_split_nil_groups" do
|
|
107
93
|
group_id, group_type = Preference.split_group(nil)
|
|
108
94
|
assert_nil group_id
|
|
109
95
|
assert_nil group_type
|
|
110
96
|
end
|
|
111
|
-
|
|
112
|
-
|
|
97
|
+
|
|
98
|
+
it "test_should_be_able_to_split_non_active_record_groups" do
|
|
113
99
|
group_id, group_type = Preference.split_group('car')
|
|
114
100
|
assert_nil group_id
|
|
115
101
|
assert_equal 'car', group_type
|
|
116
|
-
|
|
102
|
+
|
|
117
103
|
group_id, group_type = Preference.split_group(:car)
|
|
118
104
|
assert_nil group_id
|
|
119
105
|
assert_equal 'car', group_type
|
|
120
|
-
|
|
106
|
+
|
|
121
107
|
group_id, group_type = Preference.split_group(10)
|
|
122
108
|
assert_nil group_id
|
|
123
109
|
assert_equal 10, group_type
|
|
124
110
|
end
|
|
125
|
-
|
|
126
|
-
|
|
111
|
+
|
|
112
|
+
it "test_should_be_able_to_split_active_record_groups" do
|
|
127
113
|
car = create_car
|
|
128
|
-
|
|
114
|
+
|
|
129
115
|
group_id, group_type = Preference.split_group(car)
|
|
130
116
|
assert_equal 1, group_id
|
|
131
117
|
assert_equal 'Car', group_type
|
|
132
118
|
end
|
|
133
119
|
end
|
|
134
120
|
|
|
135
|
-
|
|
136
|
-
|
|
121
|
+
#------------------------------------------------------------------------------
|
|
122
|
+
describe "PreferenceAfterBeingCreatedTest" do
|
|
123
|
+
before do
|
|
137
124
|
User.preference :notifications, :boolean
|
|
138
|
-
|
|
125
|
+
|
|
139
126
|
@preference = create_preference(:name => 'notifications')
|
|
140
127
|
end
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
128
|
+
|
|
129
|
+
it "test_should_have_an_owner" do
|
|
130
|
+
expect(@preference.owner.nil?).to eq false
|
|
144
131
|
end
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
132
|
+
|
|
133
|
+
it "test_should_have_a_definition" do
|
|
134
|
+
expect(@preference.definition.nil?).to eq false
|
|
148
135
|
end
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
136
|
+
|
|
137
|
+
it "test_should_have_a_value" do
|
|
138
|
+
expect(@preference.value.nil?).to eq false
|
|
152
139
|
end
|
|
153
|
-
|
|
154
|
-
|
|
140
|
+
|
|
141
|
+
it "test_should_not_have_a_group_association" do
|
|
155
142
|
assert_nil @preference.group
|
|
156
143
|
end
|
|
157
|
-
|
|
158
|
-
|
|
144
|
+
|
|
145
|
+
after do
|
|
159
146
|
User.preference_definitions.delete('notifications')
|
|
160
147
|
end
|
|
161
148
|
end
|
|
162
149
|
|
|
163
|
-
|
|
164
|
-
|
|
150
|
+
#------------------------------------------------------------------------------
|
|
151
|
+
describe "PreferenceWithBasicGroupTest" do
|
|
152
|
+
before do
|
|
165
153
|
@preference = create_preference(:group_type => 'car')
|
|
166
154
|
end
|
|
167
|
-
|
|
168
|
-
|
|
155
|
+
|
|
156
|
+
it "test_should_have_a_group_association" do
|
|
169
157
|
assert_equal 'car', @preference.group
|
|
170
158
|
end
|
|
171
159
|
end
|
|
172
160
|
|
|
173
|
-
|
|
174
|
-
|
|
161
|
+
#------------------------------------------------------------------------------
|
|
162
|
+
describe "PreferenceWithActiveRecordGroupTest" do
|
|
163
|
+
before do
|
|
175
164
|
@car = create_car
|
|
176
165
|
@preference = create_preference(:group => @car)
|
|
177
166
|
end
|
|
178
|
-
|
|
179
|
-
|
|
167
|
+
|
|
168
|
+
it "test_should_have_a_group_association" do
|
|
180
169
|
assert_equal @car, @preference.group
|
|
181
170
|
end
|
|
182
171
|
end
|
|
183
172
|
|
|
184
|
-
|
|
185
|
-
|
|
173
|
+
#------------------------------------------------------------------------------
|
|
174
|
+
describe "PreferenceWithBooleanTypeTest" do
|
|
175
|
+
before do
|
|
186
176
|
User.preference :notifications, :boolean
|
|
187
177
|
end
|
|
188
|
-
|
|
189
|
-
|
|
178
|
+
|
|
179
|
+
it "test_should_type_cast_nil_values" do
|
|
190
180
|
preference = new_preference(:name => 'notifications', :value => nil)
|
|
191
181
|
assert_nil preference.value
|
|
192
182
|
end
|
|
193
|
-
|
|
194
|
-
|
|
183
|
+
|
|
184
|
+
it "test_should_type_cast_numeric_values" do
|
|
195
185
|
preference = new_preference(:name => 'notifications', :value => 0)
|
|
196
186
|
assert_equal false, preference.value
|
|
197
|
-
|
|
187
|
+
|
|
198
188
|
preference.value = 1
|
|
199
189
|
assert_equal true, preference.value
|
|
200
190
|
end
|
|
201
|
-
|
|
202
|
-
|
|
191
|
+
|
|
192
|
+
it "test_should_type_cast_boolean_values" do
|
|
203
193
|
preference = new_preference(:name => 'notifications', :value => false)
|
|
204
194
|
assert_equal false, preference.value
|
|
205
|
-
|
|
195
|
+
|
|
206
196
|
preference.value = true
|
|
207
197
|
assert_equal true, preference.value
|
|
208
198
|
end
|
|
209
|
-
|
|
210
|
-
|
|
199
|
+
|
|
200
|
+
after do
|
|
211
201
|
User.preference_definitions.delete('notifications')
|
|
212
202
|
end
|
|
213
203
|
end
|
|
214
204
|
|
|
215
|
-
|
|
216
|
-
|
|
205
|
+
#------------------------------------------------------------------------------
|
|
206
|
+
describe "PreferenceWithFloatTypeTest" do
|
|
207
|
+
before do
|
|
217
208
|
User.preference :rate, :float, :default => 10.0
|
|
218
209
|
end
|
|
219
|
-
|
|
220
|
-
|
|
210
|
+
|
|
211
|
+
it "test_should_type_cast_nil_values" do
|
|
221
212
|
preference = new_preference(:name => 'rate', :value => nil)
|
|
222
213
|
assert_nil preference.value
|
|
223
214
|
end
|
|
224
|
-
|
|
225
|
-
|
|
215
|
+
|
|
216
|
+
it "test_should_type_cast_numeric_values" do
|
|
226
217
|
preference = new_preference(:name => 'rate', :value => 1.0)
|
|
227
218
|
assert_equal 1.0, preference.value
|
|
228
|
-
|
|
219
|
+
|
|
229
220
|
preference.value = "1.1"
|
|
230
221
|
assert_equal 1.1, preference.value
|
|
231
222
|
end
|
|
232
223
|
|
|
233
|
-
|
|
224
|
+
after do
|
|
234
225
|
User.preference_definitions.delete('rate')
|
|
235
226
|
end
|
|
236
227
|
end
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
228
|
+
|
|
229
|
+
#------------------------------------------------------------------------------
|
|
230
|
+
describe "PreferenceWithSTIOwnerTest" do
|
|
231
|
+
before do
|
|
240
232
|
@manager = create_manager
|
|
241
233
|
@preference = create_preference(:owner => @manager, :name => 'health_insurance', :value => true)
|
|
242
234
|
end
|
|
243
|
-
|
|
244
|
-
|
|
235
|
+
|
|
236
|
+
it "test_should_have_an_owner" do
|
|
245
237
|
assert_equal @manager, @preference.owner
|
|
246
238
|
end
|
|
247
|
-
|
|
248
|
-
|
|
239
|
+
|
|
240
|
+
it "test_should_have_an_owner_type" do
|
|
249
241
|
assert_equal 'Employee', @preference.owner_type
|
|
250
242
|
end
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
243
|
+
|
|
244
|
+
it "test_should_have_a_definition" do
|
|
245
|
+
expect(@preference.definition.nil?).to eq false
|
|
254
246
|
end
|
|
255
|
-
|
|
256
|
-
|
|
247
|
+
|
|
248
|
+
it "test_should_have_a_value" do
|
|
257
249
|
assert_equal true, @preference.value
|
|
258
250
|
end
|
|
259
251
|
end
|