ruport 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,161 +0,0 @@
1
- ***************
2
- *** 1,20 ****
3
- require "test/unit"
4
- require "ruport"
5
- class TestQuery < Test::Unit::TestCase
6
-
7
-
8
- def setup
9
- Ruport::Config.source :default,
10
- :dsn => "ruport:test", :user => "greg", :password => "apple"
11
- -
12
- Ruport::Config.source :alternate,
13
- :dsn => "ruport:test2", :user => "sandal", :password => "harmonix"
14
-
15
- @query1 = Ruport::Query.new "select * from foo", :cache_enabled => true
16
- - @query1.cached_data = [[1,2,3],[4,5,6],[7,8,9]]
17
- end
18
- -
19
- -
20
- def test_result
21
- assert_nothing_raised { @query1.result }
22
- assert_equal([[1,2,3],[4,5,6],[7,8,9]],@query1.result)
23
- --- 1,37 ----
24
- require "test/unit"
25
- require "ruport"
26
- +
27
- + begin
28
- + require 'mocha'
29
- + require 'stubba'
30
- + require 'dbi'
31
- + rescue LoadError
32
- + end
33
- +
34
- class TestQuery < Test::Unit::TestCase
35
-
36
-
37
- def setup
38
- Ruport::Config.source :default,
39
- :dsn => "ruport:test", :user => "greg", :password => "apple"
40
- Ruport::Config.source :alternate,
41
- :dsn => "ruport:test2", :user => "sandal", :password => "harmonix"
42
-
43
- @query1 = Ruport::Query.new "select * from foo", :cache_enabled => true
44
- + @query1.cached_data = [[1,2,3],[4,5,6],[7,8,9]]
45
- +
46
- + @query2 = Ruport::Query.new "select * from foo", :cache_enabled => false
47
- + @query3 = Ruport::Query.new "select * from foo", :cache_enabled => true
48
- +
49
- + if Object.const_defined? :Mocha
50
- + @dbh = mock()
51
- + @sth = [[1,2,3],[4,5,6],[7,8,9]]
52
- + def @sth.fetchable?; true; end
53
- + def @sth.rows; self.length; end
54
- + def @sth.column_names; %w(a b c); end
55
- + end
56
- end
57
- +
58
- def test_result
59
- assert_nothing_raised { @query1.result }
60
- assert_equal([[1,2,3],[4,5,6],[7,8,9]],@query1.result)
61
- ***************
62
- *** 30,48 ****
63
- q = Ruport::Query.new "test/samples/erb_test.sql", :binding => binding
64
- assert_equal "select * from bar", q.sql
65
- end
66
- -
67
- - def test_each
68
- data = [[1,2,3],[4,5,6],[7,8,9]]
69
- @query1.each do |r|
70
- - assert_equal(data.shift,r)
71
- end
72
- data = [1,4,7]
73
- @query1.each do |r|
74
- - assert_equal(data.shift,r.first)
75
- end
76
- assert_raise (LocalJumpError) { @query1.each }
77
- end
78
- -
79
- def test_select_source
80
-
81
- assert_equal( "ruport:test", @query1.instance_eval("@dsn") )
82
- --- 47,125 ----
83
- q = Ruport::Query.new "test/samples/erb_test.sql", :binding => binding
84
- assert_equal "select * from bar", q.sql
85
- end
86
- +
87
- + def test_each_with_cache_precached
88
- + if Object.const_defined? :Mocha
89
- + DBI.expects(:connect).never
90
- + end
91
- +
92
- data = [[1,2,3],[4,5,6],[7,8,9]]
93
- + result = []
94
- @query1.each do |r|
95
- + result << r.to_a
96
- end
97
- + assert_equal data, result
98
- +
99
- data = [1,4,7]
100
- + result = []
101
- @query1.each do |r|
102
- + result << r.first
103
- end
104
- + assert_equal data, result
105
- + end
106
- +
107
- + def test_each_with_cache
108
- + unless Object.const_defined? :Mocha
109
- + $stderr.puts "Skipping test_each_with_cache (requires Mocha)"
110
- + return
111
- + end
112
- +
113
- + DBI.expects(:connect).yields(@dbh)
114
- + @dbh.expects(:execute).yields(@sth)
115
- +
116
- + data = [[1,2,3],[4,5,6],[7,8,9]]
117
- + result = []
118
- + @query3.each do |r|
119
- + result << r.to_a
120
- + end
121
- + assert_equal data, result
122
- +
123
- + data = [1,4,7]
124
- + result = []
125
- + @query3.each do |r|
126
- + result << r.to_a.first
127
- + end
128
- + assert_equal data, result
129
- + end
130
- +
131
- + def test_each_without_cache
132
- + unless Object.const_defined? :Mocha
133
- + $stderr.puts "Skipping test_each_without_cache (requires Mocha)"
134
- + return
135
- + end
136
- +
137
- + DBI.expects(:connect).times(2).yields(@dbh)
138
- + @dbh.expects(:execute).times(2).yields(@sth)
139
- +
140
- + data = [[1,2,3],[4,5,6],[7,8,9]]
141
- + result = []
142
- + @query2.each do |r|
143
- + result << r.to_a
144
- + end
145
- + assert_equal data, result
146
- +
147
- + data = [1,4,7]
148
- + result = []
149
- + @query2.each do |r|
150
- + result << r.to_a.first
151
- + end
152
- + assert_equal data, result
153
- + end
154
- +
155
- + def test_each_without_block
156
- assert_raise (LocalJumpError) { @query1.each }
157
- end
158
- +
159
- def test_select_source
160
-
161
- assert_equal( "ruport:test", @query1.instance_eval("@dsn") )
data/test/test_query.rb~ DELETED
@@ -1,337 +0,0 @@
1
- require "test/unit"
2
- require "ruport"
3
-
4
- begin
5
- require 'mocha'
6
- require 'stubba'
7
- require 'dbi'
8
- rescue LoadError
9
- $stderr.puts "Warning: Mocha not found -- skipping some Query tests"
10
- end
11
-
12
- class TestQuery < Test::Unit::TestCase
13
- def setup
14
- @sources = {
15
- :default => {
16
- :dsn => 'ruport:test', :user => 'greg', :password => 'apple' },
17
- :alternative => {
18
- :dsn => "ruport:test2", :user => "sandal", :password => "harmonix" },
19
- }
20
- Ruport::Config.source :default, @sources[:default]
21
- Ruport::Config.source :alternative, @sources[:alternative]
22
-
23
- @columns = %w(a b c)
24
- @data = [ [[1,2,3],[4,5,6],[7,8,9]],
25
- [[9,8,7],[6,5,4],[3,2,1]],
26
- [[7,8,9],[4,5,6],[1,2,3]], ]
27
- @datasets = @data.dup
28
-
29
- @sql = [ "select * from foo", "create table foo ..." ]
30
- @sql << @sql.values_at(0, 0).join(";\n")
31
- @sql << @sql.values_at(1, 0).join(";\n")
32
- @query = {
33
- :plain => Ruport::Query.new(@sql[0]),
34
- :sourced => Ruport::Query.new(@sql[0], :source => :alternative),
35
- :paramed => Ruport::Query.new(@sql[0], :params => [ 42 ]),
36
- :cached => Ruport::Query.new(@sql[0], :cache_enabled => true),
37
- :uncached => Ruport::Query.new(@sql[0], :cache_enabled => false),
38
- :precached => Ruport::Query.new(@sql[0], :cache_enabled => true),
39
- :raw => Ruport::Query.new(@sql[0], :raw_data => true),
40
- :unraw => Ruport::Query.new(@sql[0], :raw_data => false),
41
- :resultless => Ruport::Query.new(@sql[1]),
42
- :multi => Ruport::Query.new(@sql[2]),
43
- :mixed => Ruport::Query.new(@sql[3]),
44
- }
45
- @query[:precached].cached_data = @data[0]
46
- end
47
-
48
- def test_execute
49
- return unless Object.const_defined? :Mocha
50
- query = @query[:uncached]
51
- setup_mock_dbi(1)
52
-
53
- assert_equal nil, query.execute
54
- end
55
-
56
- def test_execute_sourced
57
- return unless Object.const_defined? :Mocha
58
- query = @query[:sourced]
59
- setup_mock_dbi(1, :source => :alternative)
60
-
61
- assert_equal nil, query.execute
62
- end
63
-
64
- def test_execute_paramed
65
- return unless Object.const_defined? :Mocha
66
- query = @query[:paramed]
67
- setup_mock_dbi(1, :params => [ 42 ])
68
-
69
- assert_equal nil, query.execute
70
- end
71
-
72
- def test_result_cache_disabled
73
- return unless Object.const_defined? :Mocha
74
- query = @query[:uncached]
75
- setup_mock_dbi(3)
76
-
77
- assert_nothing_raised { query.result }
78
- assert_equal @data[1], get_raw(query.result)
79
- assert_equal @data[2], get_raw(query.result)
80
- end
81
-
82
- def test_result_cache_enabled
83
- return unless Object.const_defined? :Mocha
84
- query = @query[:cached]
85
- setup_mock_dbi(1)
86
-
87
- assert_nothing_raised { query.result }
88
- assert_equal @data[0], get_raw(query.result)
89
- assert_equal @data[0], get_raw(query.result)
90
- end
91
-
92
- def test_result_resultless
93
- return unless Object.const_defined? :Mocha
94
- query = @query[:resultless]
95
- setup_mock_dbi(1, :resultless => true, :sql => @sql[1])
96
-
97
- assert_equal nil, query.result
98
- end
99
-
100
- def test_result_multi
101
- return unless Object.const_defined? :Mocha
102
- query = @query[:multi]
103
- setup_mock_dbi(2)
104
-
105
- assert_equal @data[1], get_raw(query.result)
106
- end
107
-
108
- def test_result_raw_disabled
109
- return unless Object.const_defined? :Mocha
110
- query = @query[:unraw]
111
- setup_mock_dbi(1)
112
-
113
- assert_equal @data[0].to_table(@columns), query.result
114
- end
115
-
116
- def test_result_raw_enabled
117
- return unless Object.const_defined? :Mocha
118
- query = @query[:raw]
119
- setup_mock_dbi(1)
120
-
121
- assert_equal @data[0], query.result
122
- end
123
-
124
- def test_update_cache
125
- return unless Object.const_defined? :Mocha
126
- query = @query[:cached]
127
- setup_mock_dbi(2)
128
-
129
- assert_equal @data[0], get_raw(query.result)
130
- query.update_cache
131
- assert_equal @data[1], get_raw(query.cached_data)
132
- assert_equal @data[1], get_raw(query.result)
133
- end
134
-
135
- def test_clear_cache
136
- return unless Object.const_defined? :Mocha
137
- query = @query[:cached]
138
- setup_mock_dbi(2)
139
-
140
- assert_equal @data[0], get_raw(query.result)
141
- query.clear_cache
142
- assert_equal nil, query.cached_data
143
- assert_equal @data[1], get_raw(query.result)
144
- end
145
-
146
- def test_disable_caching
147
- return unless Object.const_defined? :Mocha
148
- query = @query[:cached]
149
- setup_mock_dbi(3)
150
-
151
- assert_equal @data[0], get_raw(query.result)
152
- assert_equal @data[0], get_raw(query.result)
153
- query.disable_caching
154
- assert_equal @data[1], get_raw(query.result)
155
- assert_equal @data[2], get_raw(query.result)
156
- end
157
-
158
- def test_enable_caching
159
- return unless Object.const_defined? :Mocha
160
- query = @query[:uncached]
161
- setup_mock_dbi(3)
162
-
163
- assert_equal @data[0], get_raw(query.result)
164
- assert_equal @data[1], get_raw(query.result)
165
- query.enable_caching
166
- assert_equal @data[2], get_raw(query.result)
167
- assert_equal @data[2], get_raw(query.result)
168
- end
169
-
170
- def test_load_file
171
- return unless Object.const_defined? :Mocha
172
- File.expects(:read).
173
- with("query_test.sql").
174
- returns("select * from foo\n")
175
-
176
- query = Ruport::Query.new "query_test.sql"
177
- assert_equal "select * from foo", query.sql
178
- end
179
-
180
- def test_load_file_erb
181
- return unless Object.const_defined? :Mocha
182
- @table = 'bar'
183
- File.expects(:read).
184
- with("query_test.sql").
185
- returns("select * from <%= @table %>\n")
186
-
187
- query = Ruport::Query.new "query_test.sql", :binding => binding
188
- assert_equal "select * from bar", query.sql
189
- end
190
-
191
- def test_load_file_not_found
192
- return unless Object.const_defined? :Mocha
193
- File.expects(:read).
194
- with("query_test.sql").
195
- raises(Errno::ENOENT)
196
- Ruport.expects(:log).
197
- with("Could not open query_test.sql",
198
- :status => :fatal, :exception => LoadError).
199
- raises(LoadError)
200
-
201
- assert_raises LoadError do
202
- query = Ruport::Query.new "query_test.sql"
203
- end
204
- end
205
-
206
- def test_each_cache_disabled
207
- return unless Object.const_defined? :Mocha
208
- query = @query[:uncached]
209
- setup_mock_dbi(2)
210
-
211
- result = []; query.each { |r| result << r.to_a }
212
- assert_equal @data[0], result
213
-
214
- result = []; query.each { |r| result << r.to_a }
215
- assert_equal @data[1], result
216
- end
217
-
218
- def test_each_cache_enabled
219
- return unless Object.const_defined? :Mocha
220
- query = @query[:cached]
221
- setup_mock_dbi(1)
222
-
223
- result = []; query.each { |r| result << r.to_a }
224
- assert_equal @data[0], result
225
-
226
- result = []; query.each { |r| result << r.to_a }
227
- assert_equal @data[0], result
228
- end
229
-
230
- def test_each_multi
231
- return unless Object.const_defined? :Mocha
232
- query = @query[:multi]
233
- setup_mock_dbi(2)
234
-
235
- result = []; query.each { |r| result << r.to_a }
236
- assert_equal @data[1], result
237
- end
238
-
239
- def test_each_without_block
240
- assert_raise (LocalJumpError) { @query[:precached].each }
241
- end
242
-
243
- def test_select_source
244
- query = @query[:precached]
245
- assert_equal @sources[:default], get_query_source(query)
246
-
247
- query.select_source :alternative
248
- assert_equal @sources[:alternative], get_query_source(query)
249
-
250
- query.select_source :default
251
- assert_equal @sources[:default], get_query_source(query)
252
- end
253
-
254
- def test_initialize_source_temporary
255
- query = Ruport::Query.new "<unused>", @sources[:alternative]
256
- assert_equal @sources[:alternative], get_query_source(query)
257
- end
258
-
259
- def test_initialize_source_temporary_multiple
260
- query1 = Ruport::Query.new "<unused>", @sources[:default]
261
- query2 = Ruport::Query.new "<unused>", @sources[:alternative]
262
-
263
- assert_equal @sources[:default], get_query_source(query1)
264
- assert_equal @sources[:alternative], get_query_source(query2)
265
- end
266
-
267
- def test_generator
268
- query = @query[:precached]
269
- gen = query.generator
270
- assert_equal @data[0][0], gen.next
271
- assert_equal @data[0][1], gen.next
272
- assert_equal @data[0][2], gen.next
273
- assert_raise(EOFError) { gen.next }
274
- end
275
-
276
- def test_to_table
277
- return unless Object.const_defined? :Mocha
278
- query = @query[:raw]
279
- setup_mock_dbi(3, :returns => @data[0])
280
-
281
- assert_equal @data[0], query.result
282
- assert_equal @data[0].to_table(@columns), query.to_table
283
- assert_equal @data[0], query.result
284
- end
285
-
286
- def test_to_csv
287
- return unless Object.const_defined? :Mocha
288
- query = @query[:plain]
289
- setup_mock_dbi(1)
290
-
291
- csv = @data[0].to_table(@columns).as(:csv)
292
- assert_equal csv, query.to_csv
293
- end
294
-
295
- private
296
- def setup_mock_dbi(count, options={})
297
- sql = options[:sql] || @sql[0]
298
- source = options[:source] || :default
299
- returns = options[:returns] || Proc.new { @datasets.shift }
300
- resultless = options[:resultless]
301
- params = options[:params] || []
302
-
303
- @dbh = mock("database_handle")
304
- @sth = mock("statement_handle")
305
- def @dbh.execute(*a, &b); execute__(*a, &b); ensure; sth__.finish if b; end
306
- def @sth.each; data__.each { |x| yield(x) }; end
307
- def @sth.fetch_all; data__; end
308
-
309
- DBI.expects(:connect).
310
- with(*@sources[source].values_at(:dsn, :user, :password)).
311
- yields(@dbh).times(count)
312
- @dbh.expects(:execute__).with(sql, *params).
313
- yields(@sth).returns(@sth).times(count)
314
- @dbh.stubs(:sth__).returns(@sth)
315
- @sth.expects(:finish).with().times(count)
316
- unless resultless
317
- @sth.stubs(:fetchable?).returns(true)
318
- @sth.stubs(:column_names).returns(@columns)
319
- @sth.expects(:data__).returns(returns).times(count)
320
- else
321
- @sth.stubs(:fetchable?).returns(false)
322
- @sth.stubs(:column_names).returns([])
323
- @sth.stubs(:cancel)
324
- @sth.expects(:data__).times(0)
325
- end
326
- end
327
-
328
- def get_query_source(query)
329
- [ :dsn, :user, :password ].inject({}) do |memo, var|
330
- memo.update var => query.instance_variable_get("@#{var}")
331
- end
332
- end
333
-
334
- def get_raw(table)
335
- table.collect { |row| row.to_a }
336
- end
337
- end