cockpit 0.0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,228 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class SettingsTest < ActiveSupport::TestCase
4
+
5
+ context "Settings" do
6
+
7
+ setup do
8
+ Settings.store = :memory
9
+ Settings.set(:lance => "first", :dane => 2)
10
+ end
11
+
12
+ should "have have values" do
13
+ desired_result = {
14
+ :lance => {
15
+ :type => :string,
16
+ :value => "first"
17
+ },
18
+ :dane => {
19
+ :type => :integer,
20
+ :value => 2
21
+ }
22
+ }
23
+ assert_equal(desired_result, Settings.tree)
24
+ end
25
+
26
+ context "get" do
27
+
28
+ setup do
29
+ Settings.clear
30
+ Settings.set(:lance => "first", :dane => 2)
31
+ end
32
+
33
+ should "be able to get values" do
34
+ assert_equal "first", Settings.get(:lance).value
35
+ assert_equal :string, Settings.get(:lance).value_type
36
+ assert_equal :integer, Settings.get(:dane).value_type
37
+ end
38
+
39
+ should "be able ot get values by using string" do
40
+ assert_equal "first", Settings.get("lance").value
41
+ end
42
+
43
+ should "be able to get values using all syntax" do
44
+ assert_equal "first", Settings.get("lance").value
45
+ assert_equal "first", Settings("lance").value
46
+ assert_equal "first", Settings["lance"].value
47
+ assert_equal "first", Settings.lance.value
48
+ end
49
+
50
+ should "return empty TreeHash if value doesn't exist" do
51
+ assert_equal({}, Settings.get("nope"))
52
+ assert_equal false, Settings.get("nope").nil?
53
+ assert Settings.get("nope").empty?
54
+ assert Settings.get("nope").blank?
55
+ assert_equal({}, Settings["asset.thumb.random"].value)
56
+ end
57
+
58
+ should "raise an error if we use exclamation on 'get!'" do
59
+ assert_raise(RuntimeError) { Settings.get!("nope") }
60
+ end
61
+ end
62
+
63
+ context "set" do
64
+
65
+ setup do
66
+ Settings.clear
67
+ end
68
+
69
+ should "be able to set new values" do
70
+ Settings.set(:name => "value")
71
+ assert_equal "value", Settings[:name].value
72
+ end
73
+
74
+ should "be able to set using []=" do
75
+ Settings[:name] = "value"
76
+ assert_equal "value", Settings[:name].value
77
+ end
78
+
79
+ should "not be able to set a value if it's a string" do
80
+ assert_equal nil, Settings.set("set value")
81
+ end
82
+
83
+ should "be able to set a value using parentheses syntax" do
84
+ Settings("path.to.hash" => "me")
85
+ assert_equal "me", Settings("path.to.hash").value
86
+ end
87
+
88
+ end
89
+
90
+ context "nested values" do
91
+
92
+ should "be able to set nested value by string key" do
93
+ Settings["a.nested.string"] = "value"
94
+ assert_equal "value", Settings["a.nested.string"].value
95
+ assert_kind_of Cockpit::TreeHash, Settings["a.nested"]
96
+ end
97
+
98
+ should "be able to change string to further nested hash" do
99
+ Settings["a.nested.string"] = "value"
100
+ assert_equal "value", Settings["a.nested.string"].value
101
+ Settings["a.nested.string.with.further.depth"] = "value"
102
+ assert_equal "value", Settings["a.nested.string.with.further.depth"].value
103
+ Settings["a.nested.string"] = "value"
104
+ assert_equal "value", Settings["a.nested.string"].value
105
+ end
106
+
107
+ end
108
+
109
+ context "with dsl" do
110
+
111
+ setup do
112
+ Settings.clear
113
+ Settings do
114
+ asset :title => "Asset (and related) Settings" do
115
+ thumb do
116
+ width 100, :tip => "Thumb's width"
117
+ height 100, :tip => "Thumb's height"
118
+ end
119
+ end
120
+ end
121
+ end
122
+
123
+ should "property should be a hash of values" do
124
+ desired_result = {
125
+ :type => :integer,
126
+ :value => 100,
127
+ :tip => "Thumb's width"
128
+ }
129
+ assert_equal(desired_result, Settings["asset.thumb.width"])
130
+ end
131
+
132
+ should "be able to call 'value' on object" do
133
+ assert_equal 100, Settings["asset.thumb.width.value"]
134
+ assert_equal 100, Settings["asset.thumb.width"].value
135
+ end
136
+
137
+ should "be able to call 'tip' if it has tooltip" do
138
+ assert_equal "Thumb's width", Settings["asset.thumb.width"].tip
139
+ end
140
+
141
+ should "be able to call 'tip' through chain" do
142
+ assert_equal "Thumb's width", Settings.asset.thumb.width.tip
143
+ end
144
+
145
+ context "should be able to take a lambda as a value" do
146
+
147
+ setup do
148
+ Settings.clear
149
+ @languages = %w(English Italian Spanish)
150
+ Settings do
151
+ site :title => "Default Site Settings" do
152
+ languages :value => lambda { %w(English Italian Spanish) }
153
+ end
154
+ end
155
+ end
156
+
157
+ should "have a proc as a value" do
158
+ assert_kind_of Proc, Settings["site.languages.value"]
159
+ end
160
+
161
+ should "be able to call the proc" do
162
+ assert @languages, Settings["site.languages.value"].call
163
+ end
164
+
165
+ end
166
+
167
+ context "should be able to take a Proc.new as a value" do
168
+ setup do
169
+ Settings.clear
170
+ @timezones = %w(pacific central eastern)
171
+ Settings do
172
+ site :title => "Default Site Settings" do
173
+ timezones :value => Proc.new { %w(pacific central eastern) }
174
+ end
175
+ end
176
+ end
177
+
178
+ should "have a proc as a value" do
179
+ assert_kind_of Proc, Settings["site.timezones.value"]
180
+ end
181
+
182
+ should "be able to call the proc" do
183
+ assert @timezones, Settings["site.timezones.value"].call
184
+ end
185
+ end
186
+
187
+ context "should be able to take a large dsl and make something of it!" do
188
+
189
+ setup do
190
+ Settings.clear
191
+ load_settings
192
+ end
193
+
194
+ should "find the nested teaser" do
195
+ assert_equal 2, Settings["site.teasers.right"].value
196
+ end
197
+
198
+ end
199
+
200
+ end
201
+
202
+ context "setting categories" do
203
+
204
+ setup do
205
+ Settings.clear
206
+ load_settings
207
+ end
208
+
209
+ should "be able to get settings by category" do
210
+ [:site, :asset].each do |type|
211
+ assert Settings[type].keys
212
+ end
213
+ end
214
+
215
+ should "traverse categories" do
216
+ Settings(:site).each_setting do |key, attributes, value|
217
+ assert attributes
218
+ #puts "Key: #{key.to_s}, Attributes: #{attributes.inspect}, Value: #{value.inspect}"
219
+ end
220
+ end
221
+
222
+ end
223
+
224
+ teardown { Settings.clear }
225
+
226
+ end
227
+
228
+ end
@@ -0,0 +1,153 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class SettingsTest < ActiveSupport::TestCase
4
+
5
+ context "Database Store" do
6
+
7
+ setup do
8
+ Settings.clear
9
+ Settings.store = :db
10
+ end
11
+
12
+ should "have a db as a store" do
13
+ assert_kind_of Cockpit::Store::Database, Settings.store
14
+ end
15
+
16
+ context "save to the database" do
17
+
18
+ setup do
19
+ Settings["lantial"] = "to database"
20
+ Settings["pollard"] = "another"
21
+ end
22
+
23
+ should "have saved lance into the database" do
24
+ assert_equal "to database", Setting.find_by_key("lantial").value
25
+ end
26
+
27
+ should "be able to change a database record through tree" do
28
+ assert_equal "another", Setting.find_by_key("pollard").value
29
+ Settings["pollard"] = "first change"
30
+ assert_equal "first change", Setting.find_by_key("pollard").value
31
+ end
32
+
33
+ should "NOT be able to change a database record independently of the tree" do
34
+ setting = Setting.find_by_key("pollard")
35
+ assert_equal "another", setting.value
36
+ setting.value = "changed!"
37
+ setting.save
38
+
39
+ assert_equal "changed!", Setting.find_by_key("pollard").value
40
+ assert_equal "changed!", Settings["pollard"].value
41
+ end
42
+
43
+ context "get value" do
44
+
45
+ setup do
46
+ Settings.store = :db
47
+ Settings.clear(:hard => true)
48
+ end
49
+
50
+ should "be able to get a previously created setting from the db" do
51
+ assert_equal Cockpit::TreeHash.new, Settings.tree
52
+ Setting.create(:key => "lantial", :value => "custom value")
53
+ assert_equal "custom value", Settings["lantial"].value
54
+ assert_equal({:lantial => {:type => :string, :value => "custom value"}}, Settings.tree)
55
+ end
56
+
57
+ should "be able to save objects using other syntax" do
58
+ key = "im.a.nested.key"
59
+ value = "wow"
60
+ assert_equal nil, Setting.find_by_key(key)
61
+ Settings.im.a.nested.key = value
62
+ assert_equal value, Settings(key).value
63
+ # PENDING!
64
+ # assert_equal value, Setting.find_by_key(key)
65
+ Settings("im.nesting.myself" => "here")
66
+ assert_equal "here", Setting.find_by_key("im.nesting.myself").value
67
+ Settings["me.too.please"] = "let me in"
68
+ assert_equal "let me in", Setting.find_by_key("me.too.please").value
69
+ Settings.set("finally.me" => "too")
70
+ assert_equal "too", Setting.find_by_key("finally.me").value
71
+ end
72
+
73
+ end
74
+
75
+ context "should not save large tree to database" do
76
+
77
+ setup do
78
+ Settings.clear
79
+ load_settings
80
+ end
81
+
82
+ should "find nested objects in database" do
83
+ assert_equal nil, Setting.find_by_key("site.title")
84
+ end
85
+
86
+ end
87
+
88
+ context "should find setting" do
89
+
90
+ setup do
91
+ Settings.store = :db
92
+ Settings("lantial" => "saved")
93
+ end
94
+
95
+ should "find the thing" do
96
+ setting = Setting.find("lantial")
97
+ assert setting
98
+ end
99
+
100
+ teardown do
101
+ Settings.store = :memory
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+ should "be able to switch the store without modifying the tree" do
109
+ # pending
110
+ end
111
+
112
+ context "type casting" do
113
+
114
+ setup do
115
+ @datetime = DateTime.now
116
+ @time = Time.now
117
+ Settings.store = :db
118
+ Setting.detonate
119
+ Settings["a.string"] = "string"
120
+ Settings["a.boolean"] = true
121
+ Settings["a.false_boolean"] = false
122
+ Settings["a.integer"] = 10
123
+ Settings["a.float"] = 10.11
124
+ Settings["a.datetime"] = @datetime
125
+ Settings["a.time"] = @time
126
+ end
127
+
128
+ should "parse types" do
129
+ assert_equal "string", Setting.find("a.string").value
130
+ assert_equal true, Setting.find("a.boolean").value
131
+ assert_equal false, Setting.find("a.false_boolean").value
132
+ assert_equal 10, Setting.find("a.integer").value
133
+ assert_equal 10.11, Setting.find("a.float").value
134
+ assert_equal @time.to_s, Setting.find("a.time").value.to_s
135
+ end
136
+
137
+ should "parse datetime" do
138
+ # close but not quite
139
+ # assert_equal @datetime, Setting.find("a.datetime").value
140
+ # pending
141
+ end
142
+
143
+ teardown do
144
+ Setting.detonate
145
+ end
146
+
147
+ end
148
+
149
+ teardown { Settings.clear }
150
+
151
+ end
152
+
153
+ end
@@ -0,0 +1,68 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class SettingsTest < ActiveSupport::TestCase
4
+
5
+ context "Settings" do
6
+ context "acts_as_configurable module" do
7
+
8
+ setup do
9
+ @user = User.new
10
+ end
11
+
12
+ should "have added settings to global hash" do
13
+ assert User.settings
14
+ assert_equal "Lance", @user.settings.name.value
15
+ assert_equal({:type => :string, :value => "red"}, @user.settings.favorite.color)
16
+ end
17
+
18
+ should "be able to set value" do
19
+ Settings.user.login = "LOGIN"
20
+ assert_equal({:type=>:string, :value => "LOGIN"}, Settings.user.login)
21
+ assert_equal "LOGIN", Settings.user.login.value
22
+ end
23
+
24
+ context "multiple users, custom settings" do
25
+
26
+ setup do
27
+ Settings.clear(:except => [:user])
28
+ @user_a = User.create
29
+ @user_b = User.create
30
+ @now = Time.now
31
+ end
32
+
33
+ should "be able to change settings for user instances" do
34
+ @user_a.settings[:im_a] = "yes"
35
+ @user_b.settings[:im_b] = "yippee"
36
+ assert_equal "yes", @user_a.settings(:im_a).value
37
+ assert_equal "yippee", @user_b.settings.im_b.value
38
+ assert_not_equal @user_a.settings, Settings(:user)
39
+ assert_not_equal "yes", Settings(:user).im_a.value # global settings not changed
40
+ end
41
+
42
+ should "be able to save the user" do
43
+ @user_a.settings.store = :db
44
+ @user_a.settings["im_a.having.fun"] = "lance"
45
+ @user_a.settings["im_a.having.a.good.time"] = @now
46
+ assert @user_a.valid?
47
+ assert_equal "lance", Setting.find_by_key("im_a.having.fun").value
48
+ assert_equal @user_a, Setting.find_by_key("im_a.having.fun").configurable
49
+ assert_equal @user_a, Setting.find_by_key("im_a.having.a.good.time").configurable
50
+ assert_equal @now.to_s, Setting.find_by_key("im_a.having.a.good.time").value.to_s
51
+ # global settings should be unchanged
52
+ assert_kind_of Cockpit::Store::Database, @user_a.settings.store
53
+ #assert_kind_of Cockpit::Store::Memory, Settings.store
54
+ end
55
+
56
+ teardown do
57
+ @user_a.settings.store = :memory
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ teardown { Settings.clear(:except => [:user]) }
65
+
66
+ end
67
+
68
+ end