ruport 1.2.3 → 1.4.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.
data/test/query_test.rb DELETED
@@ -1,259 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require File.join(File.expand_path(File.dirname(__FILE__)), "helpers")
3
-
4
- begin
5
- require 'mocha'
6
- require 'stubba'
7
- rescue LoadError
8
- $stderr.puts "Warning: Mocha not found -- skipping some Query tests"
9
- end
10
-
11
- begin
12
- require 'dbi'
13
- rescue LoadError
14
- $stderr.puts "Warning: DBI not found -- skipping some Query tests"
15
- end
16
-
17
- class TestQuery < Test::Unit::TestCase
18
- def setup
19
- @sources = {
20
- :default => {
21
- :dsn => 'ruport:test', :user => 'greg', :password => 'apple' },
22
- :alternative => {
23
- :dsn => "ruport:test2", :user => "sandal", :password => "harmonix" },
24
- }
25
- Ruport::Query.add_source :default, @sources[:default]
26
- Ruport::Query.add_source :alternative, @sources[:alternative]
27
-
28
- @columns = %w(a b c)
29
- @data = [ [[1,2,3],[4,5,6],[7,8,9]],
30
- [[9,8,7],[6,5,4],[3,2,1]],
31
- [[7,8,9],[4,5,6],[1,2,3]], ]
32
- @datasets = @data.dup
33
-
34
- @sql = [ "select * from foo", "create table foo ..." ]
35
- @sql << @sql.values_at(0, 0).join(";\n")
36
- @sql << @sql.values_at(1, 0).join(";\n")
37
- @query = {
38
- :plain => Ruport::Query.new(@sql[0]),
39
- :sourced => Ruport::Query.new(@sql[0], :source => :alternative),
40
- :paramed => Ruport::Query.new(@sql[0], :params => [ 42 ]),
41
- :raw => Ruport::Query.new(@sql[0], :row_type => :raw),
42
- :resultless => Ruport::Query.new(@sql[1]),
43
- :multi => Ruport::Query.new(@sql[2]),
44
- :mixed => Ruport::Query.new(@sql[3]),
45
- }
46
- end
47
-
48
- if Object.const_defined? :Mocha and Object.const_defined? :DBI
49
-
50
- def test_execute
51
- query = @query[:plain]
52
- setup_mock_dbi(1)
53
-
54
- assert_equal nil, query.execute
55
- end
56
-
57
- def test_execute_sourced
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
- query = @query[:paramed]
66
- setup_mock_dbi(1, :params => [ 42 ])
67
-
68
- assert_equal nil, query.execute
69
- end
70
-
71
- def test_result_resultless
72
- query = @query[:resultless]
73
- setup_mock_dbi(1, :resultless => true, :sql => @sql[1])
74
-
75
- assert_equal nil, query.result
76
- end
77
-
78
- def test_result_multi
79
- query = @query[:multi]
80
- setup_mock_dbi(2)
81
-
82
- assert_equal @data[1], get_raw(query.result)
83
- end
84
-
85
- def test_result_raw_enabled
86
- query = @query[:raw]
87
- setup_mock_dbi(1)
88
-
89
- assert_equal @data[0], query.result
90
- end
91
-
92
- def test_load_file
93
- File.expects(:read).
94
- with("query_test.sql").
95
- returns("select * from foo\n")
96
-
97
- query = Ruport::Query.new "query_test.sql"
98
- assert_equal "select * from foo", query.sql
99
- end
100
-
101
- def test_explicit
102
- File.expects(:read).
103
- with("query_test").
104
- returns("select * from foo\n")
105
-
106
- query = Ruport::Query.new(:file => "query_test")
107
- assert_equal "select * from foo", query.sql
108
-
109
- query = Ruport::Query.new(:string => "query_test")
110
- assert_equal "query_test", query.sql
111
- end
112
-
113
- def test_load_file_not_found
114
- File.expects(:read).
115
- with("query_test.sql").
116
- raises(Errno::ENOENT)
117
-
118
- assert_raises LoadError do
119
- query = Ruport::Query.new "query_test.sql"
120
- end
121
- end
122
-
123
- def test_each
124
- query = @query[:plain]
125
- setup_mock_dbi(2)
126
-
127
- result = []; query.each { |r| result << r.to_a }
128
- assert_equal @data[0], result
129
-
130
- result = []; query.each { |r| result << r.to_a }
131
- assert_equal @data[1], result
132
- end
133
-
134
- def test_each_multi
135
- query = @query[:multi]
136
- setup_mock_dbi(2)
137
-
138
- result = []; query.each { |r| result << r.to_a }
139
- assert_equal @data[1], result
140
- end
141
-
142
- end
143
-
144
- def test_each_without_block
145
- assert_raise(LocalJumpError) { @query[:plain].each }
146
- end
147
-
148
- def test_select_source
149
- query = @query[:plain]
150
- query.select_source :alternative
151
- assert_equal @sources[:alternative], get_query_source(query)
152
-
153
- query.select_source :default
154
- assert_equal @sources[:default], get_query_source(query)
155
- end
156
-
157
- def test_initialize_source_temporary
158
- query = Ruport::Query.new "<unused>", @sources[:alternative]
159
- assert_equal @sources[:alternative], get_query_source(query)
160
- end
161
-
162
- def test_initialize_source_temporary_multiple
163
- query1 = Ruport::Query.new "<unused>", @sources[:default]
164
- query2 = Ruport::Query.new "<unused>", @sources[:alternative]
165
-
166
- assert_equal @sources[:default], get_query_source(query1)
167
- assert_equal @sources[:alternative], get_query_source(query2)
168
- end
169
-
170
- if Object.const_defined? :Mocha and Object.const_defined? :DBI
171
-
172
- def test_to_table
173
- query = @query[:raw]
174
- setup_mock_dbi(3, :returns => @data[0])
175
-
176
- assert_equal @data[0], query.result
177
- assert_equal @data[0].to_table(@columns), query.to_table
178
- assert_equal @data[0], query.result
179
- end
180
-
181
- def test_to_csv
182
- query = @query[:plain]
183
- setup_mock_dbi(1)
184
-
185
- csv = @data[0].to_table(@columns).as(:csv)
186
- assert_equal csv, query.to_csv
187
- end
188
-
189
- def test_missing_dsn
190
- assert_raise(ArgumentError) {
191
- Ruport::Query.add_source :foo, :user => "root", :password => "fff"
192
- }
193
- assert_nothing_raised { Ruport::Query.add_source :bar, :dsn => "..." }
194
- end
195
-
196
- def test_new_defaults
197
- Ruport::Query.add_source :default, :dsn => "dbi:mysql:test",
198
- :user => "root",
199
- :password => ""
200
- assert_equal("dbi:mysql:test", Ruport::Query.default_source.dsn)
201
- assert_equal("root", Ruport::Query.default_source.user)
202
- assert_equal("", Ruport::Query.default_source.password)
203
- end
204
-
205
- def test_multiple_sources
206
- Ruport::Query.add_source :foo, :dsn => "dbi:mysql:test"
207
- Ruport::Query.add_source :bar, :dsn => "dbi:mysql:test2"
208
- assert_equal("dbi:mysql:test", Ruport::Query.sources[:foo].dsn)
209
- assert_equal("dbi:mysql:test2", Ruport::Query.sources[:bar].dsn)
210
- end
211
-
212
- end
213
-
214
- private
215
- def setup_mock_dbi(count, options={})
216
- sql = options[:sql] || @sql[0]
217
- source = options[:source] || :default
218
- resultless = options[:resultless]
219
- params = options[:params] || []
220
-
221
- @dbh = mock("database_handle")
222
- @sth = mock("statement_handle")
223
- def @dbh.execute(*a, &b); execute__(*a, &b); ensure; sth__.finish if b; end
224
- def @sth.each; data__.each { |x| yield(x.dup) }; end
225
- def @sth.fetch_all; data__; end
226
-
227
- DBI.expects(:connect).
228
- with(*@sources[source].values_at(:dsn, :user, :password)).
229
- yields(@dbh).times(count)
230
- @dbh.expects(:execute__).with(sql, *params).
231
- yields(@sth).returns(@sth).times(count)
232
- @dbh.stubs(:sth__).returns(@sth)
233
- @sth.expects(:finish).with().times(count)
234
- unless resultless
235
- @sth.stubs(:fetchable?).returns(true)
236
- @sth.stubs(:column_names).returns(@columns)
237
- if options[:returns]
238
- @sth.expects(:data__).returns(options[:returns]).times(count)
239
- else
240
- @sth.expects(:data__).returns(*@datasets).times(count)
241
- end
242
- else
243
- @sth.stubs(:fetchable?).returns(false)
244
- @sth.stubs(:column_names).returns([])
245
- @sth.stubs(:cancel)
246
- @sth.expects(:data__).times(0)
247
- end
248
- end
249
-
250
- def get_query_source(query)
251
- [ :dsn, :user, :password ].inject({}) do |memo, var|
252
- memo.update var => query.instance_variable_get("@#{var}")
253
- end
254
- end
255
-
256
- def get_raw(table)
257
- table.map { |row| row.to_a }
258
- end
259
- end
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require File.join(File.expand_path(File.dirname(__FILE__)), "helpers")
3
- class TestSqlSplit < Test::Unit::TestCase
4
- include Ruport
5
-
6
- def test_sql_split_trivial
7
- sql = "SELECT * FROM ruport_test"
8
- split = Query::SqlSplit.new sql
9
- assert_equal( 1, split.size )
10
- assert_equal( sql, split.first )
11
- end
12
-
13
- def test_sql_split_complex
14
- sql = File.read File.join(File.expand_path(File.dirname(__FILE__)),
15
- *%w[samples ruport_test.sql])
16
- split = Query::SqlSplit.new sql
17
- assert_equal( 'SELECT * FROM ruport_test', split.last )
18
- end
19
-
20
- end