5
5
require 'active_support/core_ext/string'
6
6
7
7
describe AnnotateModels do
8
+ def mock_index ( name , columns = [ ] , unique = false )
9
+ double ( "IndexKeyDefinition" ,
10
+ :name => name ,
11
+ :columns => columns ,
12
+ :unique => unique
13
+ )
14
+ end
15
+
8
16
def mock_foreign_key ( name , from_column , to_table , to_column = 'id' , constraints = { } )
9
17
double ( "ForeignKeyDefinition" ,
10
18
:name => name ,
@@ -20,21 +28,22 @@ def mock_connection(indexes = [], foreign_keys = [])
20
28
double ( "Conn" ,
21
29
:indexes => indexes ,
22
30
:foreign_keys => foreign_keys ,
23
- :supports_foreign_keys? => true ,
31
+ :supports_foreign_keys? => true
24
32
)
25
33
end
26
34
27
- def mock_class ( table_name , primary_key , columns , foreign_keys = [ ] )
35
+ def mock_class ( table_name , primary_key , columns , indexes = [ ] , foreign_keys = [ ] )
28
36
options = {
29
- :connection => mock_connection ( [ ] , foreign_keys ) ,
37
+ :connection => mock_connection ( indexes , foreign_keys ) ,
30
38
:table_exists? => true ,
31
39
:table_name => table_name ,
32
40
:primary_key => primary_key ,
33
41
:column_names => columns . map { |col | col . name . to_s } ,
34
42
:columns => columns ,
35
43
:column_defaults => Hash [ columns . map { |col |
36
44
[ col . name , col . default ]
37
- } ]
45
+ } ] ,
46
+ :table_name_prefix => '' ,
38
47
}
39
48
40
49
double ( "An ActiveRecord class" , options )
@@ -181,7 +190,7 @@ def mock_column(name, type, options={})
181
190
klass = mock_class ( :users , :id , [
182
191
mock_column ( :id , :integer ) ,
183
192
mock_column ( :foreign_thing_id , :integer ) ,
184
- ] ,
193
+ ] , [ ] ,
185
194
[
186
195
mock_foreign_key (
187
196
'fk_rails_cf2568e89e' ,
@@ -220,7 +229,7 @@ def mock_column(name, type, options={})
220
229
klass = mock_class ( :users , :id , [
221
230
mock_column ( :id , :integer ) ,
222
231
mock_column ( :foreign_thing_id , :integer ) ,
223
- ] ,
232
+ ] , [ ] ,
224
233
[
225
234
mock_foreign_key (
226
235
'fk_rails_02e851e3b7' ,
@@ -246,6 +255,44 @@ def mock_column(name, type, options={})
246
255
EOS
247
256
end
248
257
258
+ it "should get indexes keys" do
259
+ klass = mock_class ( :users , :id , [
260
+ mock_column ( :id , :integer ) ,
261
+ mock_column ( :foreign_thing_id , :integer ) ,
262
+ ] , [ mock_index ( 'index_rails_02e851e3b7' , [ 'id' ] ) ,
263
+ mock_index ( 'index_rails_02e851e3b8' , [ 'foreign_thing_id' ] ) ] )
264
+ expect ( AnnotateModels . get_schema_info ( klass , "Schema Info" , :show_indexes => true ) ) . to eql ( <<-EOS )
265
+ # Schema Info
266
+ #
267
+ # Table name: users
268
+ #
269
+ # id :integer not null, primary key
270
+ # foreign_thing_id :integer not null
271
+ #
272
+ # Indexes
273
+ #
274
+ # index_rails_02e851e3b7 (id)
275
+ # index_rails_02e851e3b8 (foreign_thing_id)
276
+ #
277
+ EOS
278
+ end
279
+
280
+ it "should not crash getting indexes keys" do
281
+ klass = mock_class ( :users , :id , [
282
+ mock_column ( :id , :integer ) ,
283
+ mock_column ( :foreign_thing_id , :integer ) ,
284
+ ] , [ ] )
285
+ expect ( AnnotateModels . get_schema_info ( klass , "Schema Info" , :show_indexes => true ) ) . to eql ( <<-EOS )
286
+ # Schema Info
287
+ #
288
+ # Table name: users
289
+ #
290
+ # id :integer not null, primary key
291
+ # foreign_thing_id :integer not null
292
+ #
293
+ EOS
294
+ end
295
+
249
296
it "should get schema info as RDoc" do
250
297
klass = mock_class ( :users , :id , [
251
298
mock_column ( :id , :integer ) ,
0 commit comments