autoforme 1.11.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/unit_spec.rb DELETED
@@ -1,511 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- describe AutoForme do
4
- before(:all) do
5
- db_setup(:artists=>[[:name, :string]])
6
- model_setup(:Artist=>[:artists])
7
- end
8
- after(:all) do
9
- Object.send(:remove_const, :Artist)
10
- end
11
-
12
- before do
13
- app_setup(Artist)
14
- end
15
-
16
- it "should handle table class lookup" do
17
- model.table_class_for(:browse, nil).must_equal 'table table-bordered table-striped'
18
- framework.table_class 'foo'
19
- model.table_class_for(:browse, nil).must_equal 'foo'
20
- framework.table_class{|mod, type, req| "#{mod.name} #{type} #{req}"}
21
- model.table_class_for(:browse, 1).must_equal 'Artist browse 1'
22
- model.table_class 'baz'
23
- model.table_class_for(:browse, nil).must_equal 'baz'
24
- model.table_class{|type, req| "#{type} #{req}"}
25
- model.table_class_for(:browse, :foo).must_equal 'browse foo'
26
- end
27
-
28
- it "should handle per page lookup" do
29
- model.limit_for(:browse, nil).must_equal 25
30
- framework.per_page 1
31
- model.limit_for(:browse, nil).must_equal 1
32
- framework.per_page{|mod, type, req| mod.name.length + type.to_s.length + req}
33
- model.limit_for(:browse, 3).must_equal 15
34
- model.per_page 3
35
- model.limit_for(:browse, nil).must_equal 3
36
- model.per_page{|type, req| type.to_s.length + req}
37
- model.limit_for(:browse, -1).must_equal 5
38
- end
39
-
40
- it "should handle columns lookup" do
41
- model.columns_for(:browse, nil).must_equal [:name]
42
- framework.columns{|mod, type, req| [mod.name.to_sym, type, req]}
43
- model.columns_for(:browse, :foo).must_equal [:Artist, :browse, :foo]
44
- model.columns [:foo]
45
- model.columns_for(:browse, nil).must_equal [:foo]
46
- model.columns{|type, req| req ? [type] : [:foo]}
47
- model.columns_for(:browse, true).must_equal [:browse]
48
- model.columns_for(:browse, nil).must_equal [:foo]
49
- end
50
-
51
- it "should handle column options lookup" do
52
- model.column_options_for(:show, nil, :foo).must_equal(:required=>false)
53
- model.column_options_for(:browse, nil, :foo).must_equal({})
54
- framework.column_options :foo=>{:as=>:textarea}
55
- model.column_options_for(:browse, :bar, :foo).must_equal(:as=>:textarea)
56
- model.column_options_for(:search_form, nil, :foo).must_equal(:required=>false)
57
- framework.column_options :foo=>proc{|type, req| {:type=>type, :req=>req}}
58
- model.column_options_for(:browse, :bar, :foo).must_equal(:type=>:browse, :req=>:bar)
59
- framework.column_options{|mod, column, type, req| {mod.name.to_sym=>[type, req, column]}}
60
- model.column_options_for(:browse, :bar, :foo).must_equal(:Artist=>[:browse, :bar, :foo])
61
- framework.column_options{|mod, column, type, req| {5=>6}}
62
- model.column_options :foo=>{1=>2}
63
- model.column_options_for(:browse, nil, :foo).must_equal(1=>2, 5=>6)
64
- model.column_options :foo=>proc{|type, req| {:type=>type, :req=>req}}
65
- model.column_options_for(:browse, nil, :foo).must_equal(:type=>:browse, :req=>nil, 5=>6)
66
- model.column_options{|col, type, req| {:type=>type, :req=>req, :col=>col}}
67
- model.column_options_for(:browse, nil, :foo).must_equal(:type=>:browse, :req=>nil, :col=>:foo, 5=>6)
68
- end
69
-
70
- it "should handle order lookup" do
71
- model.order_for(:browse, nil).must_be_nil
72
- framework.order :bar
73
- model.order_for(:browse, nil).must_equal :bar
74
- framework.order{|mod, type, req| [mod.name.to_sym, type, req]}
75
- model.order_for(:browse, :foo).must_equal [:Artist, :browse, :foo]
76
- model.order [:foo]
77
- model.order_for(:browse, nil).must_equal [:foo]
78
- model.order{|type, req| [type, req]}
79
- model.order_for(:browse, :foo).must_equal [:browse, :foo]
80
- end
81
-
82
- it "should handle eager lookup" do
83
- model.eager_for(:browse, nil).must_be_nil
84
- model.eager [:foo]
85
- model.eager_for(:browse, nil).must_equal [:foo]
86
- model.eager{|type, req| [type, req]}
87
- model.eager_for(:browse, 1).must_equal [:browse, 1]
88
- end
89
-
90
- it "should handle eager_graph lookup" do
91
- model.eager_graph_for(:browse, nil).must_be_nil
92
- model.eager_graph [:foo]
93
- model.eager_graph_for(:browse, nil).must_equal [:foo]
94
- model.eager_graph{|type, req| [type, req]}
95
- model.eager_graph_for(:browse, 1).must_equal [:browse, 1]
96
- end
97
-
98
- it "should handle filter lookup" do
99
- model.filter_for.must_be_nil
100
- framework.filter{|mod| lambda{|ds, type, req| [ds, mod.name.to_sym, type, req]}}
101
- model.filter_for.call(1, :browse, 2).must_equal [1, :Artist, :browse, 2]
102
- model.filter{|ds, type, req| [ds, type, req]}
103
- model.filter_for.call(1, :browse, 2).must_equal [1, :browse, 2]
104
- end
105
-
106
- it "should handle redirect lookup" do
107
- model.redirect_for.must_be_nil
108
- framework.redirect{|mod| lambda{|obj, type, req| [obj, mod.name.to_sym, type, req]}}
109
- model.redirect_for.call(1, :new, 2).must_equal [1, :Artist, :new, 2]
110
- model.redirect{|obj, type, req| [obj, type, req]}
111
- model.redirect_for.call(1, :new, 2).must_equal [1, :new, 2]
112
- end
113
-
114
- it "should handle display_name lookup" do
115
- model.display_name_for.must_be_nil
116
- framework.display_name :foo
117
- model.display_name_for.must_equal :foo
118
- framework.display_name{|mod| mod.name.to_sym}
119
- model.display_name_for.must_equal :Artist
120
-
121
- framework.display_name{|mod| proc{|obj, type, req| "#{obj} #{type} #{req}"}}
122
- model.object_display_name(:show, 1, :foo).must_equal 'foo show 1'
123
-
124
- model.display_name :foo
125
- model.display_name_for.must_equal :foo
126
- model.display_name{|obj| obj.to_s}
127
- model.object_display_name(:show, nil, :foo).must_equal 'foo'
128
- model.display_name{|obj, type| "#{obj} #{type}"}
129
- model.object_display_name(:show, nil, :foo).must_equal 'foo show'
130
- model.display_name{|obj, type, req| "#{obj} #{type} #{req}"}
131
- model.object_display_name(:show, 1, :foo).must_equal 'foo show 1'
132
- end
133
-
134
- it "should handle supported_actions lookup" do
135
- model.supported_action?(:new, nil).must_equal true
136
- model.supported_action?(:edit, nil).must_equal true
137
- model.supported_action?(:search, nil).must_equal true
138
- framework.supported_actions [:new, :search]
139
- model.supported_action?(:new, nil).must_equal true
140
- model.supported_action?(:edit, nil).must_equal false
141
- model.supported_action?(:search, nil).must_equal true
142
- framework.supported_actions{|mod, req| req ? [:new] : []}
143
- model.supported_action?(:new, nil).must_equal false
144
- model.supported_action?(:new, true).must_equal true
145
- model.supported_actions [:edit, :search]
146
- model.supported_action?(:new, nil).must_equal false
147
- model.supported_action?(:edit, nil).must_equal true
148
- model.supported_action?(:search, nil).must_equal true
149
- model.supported_actions{|req| req ? [:new] : []}
150
- model.supported_action?(:new, nil).must_equal false
151
- model.supported_action?(:new, true).must_equal true
152
- end
153
-
154
- it "should handle mtm_associations lookup" do
155
- model.supported_mtm_edit?('foos', nil).must_equal false
156
- model.supported_mtm_edit?('bars', nil).must_equal false
157
- framework.mtm_associations [:foos]
158
- model.supported_mtm_edit?('foos', nil).must_equal true
159
- model.supported_mtm_edit?('bars', nil).must_equal false
160
- framework.mtm_associations{|mod, req| req ? [:foos] : [:bars]}
161
- model.supported_mtm_edit?('foos', nil).must_equal false
162
- model.supported_mtm_edit?('bars', nil).must_equal true
163
- model.supported_mtm_edit?('foos', true).must_equal true
164
- model.supported_mtm_edit?('bars', true).must_equal false
165
- model.mtm_associations ['bars']
166
- model.supported_mtm_edit?('foos', nil).must_equal false
167
- model.supported_mtm_edit?('bars', nil).must_equal true
168
- model.mtm_associations{|req| req ? ['foos'] : ['bars']}
169
- model.supported_mtm_edit?('foos', nil).must_equal false
170
- model.supported_mtm_edit?('bars', nil).must_equal true
171
- model.supported_mtm_edit?('foos', true).must_equal true
172
- model.supported_mtm_edit?('bars', true).must_equal false
173
- end
174
-
175
- it "should handle inline_mtm_associations lookup" do
176
- model.supported_mtm_update?('foos', nil).must_equal false
177
- model.supported_mtm_update?('bars', nil).must_equal false
178
- framework.inline_mtm_associations [:foos]
179
- model.supported_mtm_update?('foos', nil).must_equal true
180
- model.supported_mtm_update?('bars', nil).must_equal false
181
- framework.inline_mtm_associations{|mod, req| req ? [:foos] : [:bars]}
182
- model.supported_mtm_update?('foos', nil).must_equal false
183
- model.supported_mtm_update?('bars', nil).must_equal true
184
- model.supported_mtm_update?('foos', true).must_equal true
185
- model.supported_mtm_update?('bars', true).must_equal false
186
- model.inline_mtm_associations ['bars']
187
- model.supported_mtm_update?('foos', nil).must_equal false
188
- model.supported_mtm_update?('bars', nil).must_equal true
189
- model.inline_mtm_associations{|req| req ? ['foos'] : ['bars']}
190
- model.supported_mtm_update?('foos', nil).must_equal false
191
- model.supported_mtm_update?('bars', nil).must_equal true
192
- model.supported_mtm_update?('foos', true).must_equal true
193
- model.supported_mtm_update?('bars', true).must_equal false
194
- end
195
-
196
- it "should handle association_links lookup" do
197
- model.association_links_for(:show, nil).must_equal []
198
- framework.association_links :foo
199
- model.association_links_for(:show, nil).must_equal [:foo]
200
- framework.association_links{|mod, type, req| [mod.name.to_sym, type, req]}
201
- model.association_links_for(:show, :foo).must_equal [:Artist, :show, :foo]
202
- model.association_links [:bar]
203
- model.association_links_for(:show, nil).must_equal [:bar]
204
- model.association_links{|type, req| [type, req]}
205
- model.association_links_for(:show, :foo).must_equal [:show, :foo]
206
- end
207
-
208
- it "should handle lazy_load_association_links lookup" do
209
- model.lazy_load_association_links?(:show, nil).must_equal false
210
- framework.lazy_load_association_links true
211
- model.lazy_load_association_links?(:show, nil).must_equal true
212
- framework.lazy_load_association_links{|mod, type, req| req > 2}
213
- model.lazy_load_association_links?(:show, 1).must_equal false
214
- model.lazy_load_association_links?(:show, 3).must_equal true
215
- model.lazy_load_association_links false
216
- model.lazy_load_association_links?(:show, nil).must_equal false
217
- model.lazy_load_association_links{|type, req| req > 2}
218
- model.lazy_load_association_links?(:show, 1).must_equal false
219
- model.lazy_load_association_links?(:show, 3).must_equal true
220
- end
221
-
222
- it "should handle form_attributes lookup" do
223
- model.form_attributes_for(:show, nil).must_equal({})
224
- framework.form_attributes :class=>'foo'
225
- model.form_attributes_for(:show, nil).must_equal(:class=>'foo')
226
- framework.form_attributes{|mod, type, req| {:class=>"#{mod} #{type} #{req}"}}
227
- model.form_attributes_for(:show, 1).must_equal(:class=>'Artist show 1')
228
-
229
- framework.form_attributes :class=>'foo'
230
- model.form_attributes :data=>"bar"
231
- model.form_attributes_for(:show, nil).must_equal(:class=>'foo', :data=>'bar')
232
- model.form_attributes{|type, req| {:data=>"#{type} #{req}"}}
233
- model.form_attributes_for(:show, 1).must_equal(:class=>'foo', :data=>'show 1')
234
- end
235
-
236
- it "should handle form_options lookup" do
237
- model.form_options_for(:show, nil).must_equal({})
238
- framework.form_options :class=>'foo'
239
- model.form_options_for(:show, nil).must_equal(:class=>'foo')
240
- framework.form_options{|mod, type, req| {:class=>"#{mod} #{type} #{req}"}}
241
- model.form_options_for(:show, 1).must_equal(:class=>'Artist show 1')
242
-
243
- framework.form_options :class=>'foo'
244
- model.form_options :data=>"bar"
245
- model.form_options_for(:show, nil).must_equal(:class=>'foo', :data=>'bar')
246
- model.form_options{|type, req| {:data=>"#{type} #{req}"}}
247
- model.form_options_for(:show, 1).must_equal(:class=>'foo', :data=>'show 1')
248
- end
249
-
250
- it "should handle page_header lookup" do
251
- model.page_header_for(:show, nil).must_be_nil
252
- framework.page_header "foo"
253
- model.page_header_for(:show, nil).must_equal 'foo'
254
- framework.page_header{|mod, type, req| "#{mod} #{type} #{req}"}
255
- model.page_header_for(:show, 1).must_equal 'Artist show 1'
256
- model.page_header "bar"
257
- model.page_header_for(:show, nil).must_equal 'bar'
258
- model.page_header{|type, req| "#{type} #{req}"}
259
- model.page_header_for(:show, 1).must_equal 'show 1'
260
- end
261
-
262
- it "should handle page_footer lookup" do
263
- model.page_footer_for(:show, nil).must_be_nil
264
- framework.page_footer "foo"
265
- model.page_footer_for(:show, nil).must_equal 'foo'
266
- framework.page_footer{|mod, type, req| "#{mod} #{type} #{req}"}
267
- model.page_footer_for(:show, 1).must_equal 'Artist show 1'
268
- model.page_footer "bar"
269
- model.page_footer_for(:show, nil).must_equal 'bar'
270
- model.page_footer{|type, req| "#{type} #{req}"}
271
- model.page_footer_for(:show, 1).must_equal 'show 1'
272
- end
273
-
274
- it "should handle autocompletion options" do
275
- model.autocomplete_options({})
276
- model.autocomplete(:type=>:show, :query=>'foo').must_equal []
277
- a = Artist.create(:name=>'FooBar')
278
- model.autocomplete(:type=>:show, :query=>'foo').must_equal ["#{a.id} - FooBar"]
279
- model.autocomplete(:type=>:show, :query=>'boo').must_equal []
280
- b = Artist.create(:name=>'BooFar')
281
- model.autocomplete(:type=>:show, :query=>'boo').must_equal ["#{b.id} - BooFar"]
282
- model.autocomplete(:type=>:show, :query=>'oo').sort.must_equal ["#{a.id} - FooBar", "#{b.id} - BooFar"]
283
-
284
- framework.autocomplete_options :display=>:id
285
- model.autocomplete(:type=>:show, :query=>a.id.to_s).must_equal ["#{a.id} - #{a.id}"]
286
- framework.autocomplete_options{|mod, type, req| {:limit=>req}}
287
- model.autocomplete(:type=>:show, :query=>'oo', :request=>1).must_equal ["#{a.id} - FooBar"]
288
- model.autocomplete_options :display=>:id
289
- model.autocomplete(:type=>:show, :query=>a.id.to_s).must_equal ["#{a.id} - #{a.id}"]
290
-
291
- framework.autocomplete_options({})
292
- model.autocomplete(:type=>:show, :query=>a.id.to_s).must_equal ["#{a.id} - #{a.id}"]
293
- model.autocomplete_options :display=>proc{:id}
294
- model.autocomplete(:type=>:show, :query=>b.id.to_s).must_equal ["#{b.id} - #{b.id}"]
295
- model.autocomplete_options :limit=>1
296
- model.autocomplete(:type=>:show, :query=>'oo').must_equal ["#{a.id} - FooBar"]
297
- model.autocomplete_options :limit=>proc{1}
298
- model.autocomplete(:type=>:show, :query=>'oo').must_equal ["#{a.id} - FooBar"]
299
- model.autocomplete_options :callback=>proc{|ds, opts| ds.reverse_order(:id)}
300
- model.autocomplete(:type=>:show, :query=>'oo').must_equal ["#{b.id} - BooFar", "#{a.id} - FooBar"]
301
-
302
- model.autocomplete_options :filter=>proc{|ds, opts| ds.where(:name=>opts[:query])}
303
- model.autocomplete(:type=>:show, :query=>'foo').must_equal []
304
- model.autocomplete(:type=>:show, :query=>'FooBar').must_equal ["#{a.id} - FooBar"]
305
-
306
- model.autocomplete_options{|type, req| {:limit=>req}}
307
- model.autocomplete(:type=>:show, :query=>'oo', :request=>1).must_equal ["#{a.id} - FooBar"]
308
- end
309
-
310
- it "should support looking up model classes when registering by name" do
311
- framework.register_by_name
312
- framework.model(Artist)
313
- framework.model_class(Artist).link.must_equal 'Artist'
314
- end
315
- end
316
-
317
- describe AutoForme do
318
- before(:all) do
319
- db_setup(:artists=>[[:name, :string]], :albums=>[[:name, :string], [:artist_id, :integer, {:table=>:artists}]])
320
- model_setup(:Artist=>[:artists, [[:one_to_many, :albums]]], :Album=>[:albums, [[:many_to_one, :artist]]])
321
- end
322
- after(:all) do
323
- Object.send(:remove_const, :Album)
324
- Object.send(:remove_const, :Artist)
325
- end
326
-
327
- it "should handle autocompletion options with associations" do
328
- artist = nil
329
- model = nil
330
- app_setup do
331
- model Artist do
332
- artist = self
333
- end
334
- model Album do
335
- model = self
336
- columns [:name, :artist]
337
- end
338
- end
339
-
340
- model.association?('artist').must_equal true
341
- artist.autocomplete_options({})
342
- model.autocomplete(:query=>'foo', :association=>:artist).must_equal []
343
- a = Artist.create(:name=>'FooBar')
344
- model.autocomplete(:query=>'foo', :association=>:artist).must_equal ["#{a.id} - FooBar"]
345
- model.autocomplete(:query=>'boo', :association=>:artist).must_equal []
346
- b = Artist.create(:name=>'BooFar')
347
- model.autocomplete(:query=>'boo', :association=>:artist).must_equal ["#{b.id} - BooFar"]
348
- model.autocomplete(:query=>'oo', :association=>:artist).sort.must_equal ["#{a.id} - FooBar", "#{b.id} - BooFar"]
349
- artist.autocomplete_options :display=>:id
350
- model.autocomplete(:query=>a.id.to_s, :association=>:artist).must_equal ["#{a.id} - #{a.id}"]
351
- artist.autocomplete_options :display=>proc{:id}
352
- model.autocomplete(:query=>b.id.to_s, :association=>:artist).must_equal ["#{b.id} - #{b.id}"]
353
- artist.autocomplete_options :limit=>1
354
- model.autocomplete(:query=>'oo', :association=>:artist).must_equal ["#{a.id} - FooBar"]
355
- artist.autocomplete_options :limit=>proc{1}
356
- model.autocomplete(:query=>'oo', :association=>:artist).must_equal ["#{a.id} - FooBar"]
357
- artist.autocomplete_options :callback=>proc{|ds, opts| ds.reverse_order(:id)}
358
- model.autocomplete(:query=>'oo', :association=>:artist).must_equal ["#{b.id} - BooFar", "#{a.id} - FooBar"]
359
-
360
- artist.autocomplete_options :filter=>proc{|ds, opts| ds.where(:name=>opts[:query])}
361
- model.autocomplete(:query=>'foo', :association=>:artist).must_equal []
362
- model.autocomplete(:query=>'FooBar', :association=>:artist).must_equal ["#{a.id} - FooBar"]
363
- end
364
- end
365
-
366
- describe AutoForme do
367
- before(:all) do
368
- db_setup(:artists=>[[:name, :string]], :albums=>[[:name, :string]], :albums_artists=>[[:album_id, :integer, {:table=>:albums}], [:artist_id, :integer, {:table=>:artists}]])
369
- model_setup(:Artist=>[:artists, [[:one_through_one, :album], [:many_to_many, :albums]]], :Album=>[:albums])
370
- end
371
- after(:all) do
372
- Object.send(:remove_const, :Album)
373
- Object.send(:remove_const, :Artist)
374
- end
375
-
376
-
377
- it "should handle not include unhandled association types in association links" do
378
- app_setup do
379
- model Artist do
380
- association_links :album
381
- end
382
- model Album
383
- end
384
-
385
- artist = Artist.create(:name=>'Ar')
386
- artist.add_album(:name=>'Album1')
387
- visit "/Artist/association_links/#{artist.id}"
388
- page.html.wont_include 'Album1'
389
- click_link 'Album'
390
- page.html.must_include 'Album1'
391
- page.current_path.must_equal '/Album/browse'
392
- end
393
- end
394
-
395
- describe AutoForme do
396
- before(:all) do
397
- db_setup(:artists=>[[:name, :string]], :albums=>[[:name, :string]], :albums_artists=>[[:album_id, :integer, {:table=>:albums}], [:artist_id, :integer, {:table=>:artists}]])
398
- model_setup(:Artist=>[:artists, [[:many_to_many, :albums]]], :Album=>[:albums, [[:many_to_many, :artists]]])
399
- end
400
- after(:all) do
401
- Object.send(:remove_const, :Album)
402
- Object.send(:remove_const, :Artist)
403
- end
404
-
405
- it "should handle autocompletion options with many to many exclusions" do
406
- artist = nil
407
- model = nil
408
- app_setup do
409
- model Artist do
410
- artist = self
411
- end
412
- model Album do
413
- model = self
414
- end
415
- end
416
-
417
- artist.autocomplete_options({})
418
- model.autocomplete(:query=>'foo', :association=>:artists).must_equal []
419
- a = Artist.create(:name=>'FooBar')
420
- model.autocomplete(:query=>'foo', :association=>:artists).must_equal ["#{a.id} - FooBar"]
421
- model.autocomplete(:query=>'boo', :association=>:artists).must_equal []
422
- b = Artist.create(:name=>'BooFar')
423
- model.autocomplete(:query=>'boo', :association=>:artists).must_equal ["#{b.id} - BooFar"]
424
- model.autocomplete(:query=>'oo', :association=>:artists).sort.must_equal ["#{a.id} - FooBar", "#{b.id} - BooFar"]
425
- c = Album.create(:name=>'Quux')
426
- c.add_artist(a)
427
- model.autocomplete(:query=>'oo', :association=>:artists, :exclude=>c.id).sort.must_equal ["#{b.id} - BooFar"]
428
- artist.autocomplete_options :display=>:id
429
- model.autocomplete(:query=>a.id.to_s, :association=>:artists).must_equal ["#{a.id} - #{a.id}"]
430
- model.autocomplete(:query=>b.id.to_s, :association=>:artists, :exclude=>c.id).must_equal ["#{b.id} - #{b.id}"]
431
- artist.autocomplete_options :display=>proc{:id}
432
- model.autocomplete(:query=>b.id.to_s, :association=>:artists).must_equal ["#{b.id} - #{b.id}"]
433
- model.autocomplete(:query=>a.id.to_s, :association=>:artists, :exclude=>c.id).must_equal []
434
- artist.autocomplete_options :limit=>1
435
- model.autocomplete(:query=>'oo', :association=>:artists).must_equal ["#{a.id} - FooBar"]
436
- model.autocomplete(:query=>'oo', :association=>:artists, :exclude=>c.id).must_equal ["#{b.id} - BooFar"]
437
- artist.autocomplete_options :limit=>proc{1}
438
- model.autocomplete(:query=>'oo', :association=>:artists).must_equal ["#{a.id} - FooBar"]
439
- model.autocomplete(:query=>'oo', :association=>:artists, :exclude=>c.id).must_equal ["#{b.id} - BooFar"]
440
- artist.autocomplete_options :callback=>proc{|ds, opts| ds.reverse_order(:id)}
441
- model.autocomplete(:query=>'oo', :association=>:artists).must_equal ["#{b.id} - BooFar", "#{a.id} - FooBar"]
442
- model.autocomplete(:query=>'oo', :association=>:artists, :exclude=>c.id).must_equal ["#{b.id} - BooFar"]
443
-
444
- artist.autocomplete_options :filter=>proc{|ds, opts| ds.where(:name=>opts[:query])}
445
- model.autocomplete(:query=>'foo', :association=>:artists).must_equal []
446
- model.autocomplete(:query=>'FooBar', :association=>:artists).must_equal ["#{a.id} - FooBar"]
447
- model.autocomplete(:query=>'FooBar', :association=>:artists, :exclude=>c.id).must_equal []
448
- end
449
- end
450
-
451
-
452
- describe AutoForme::OptsAttributes do
453
- before do
454
- @c = Class.new do
455
- extend AutoForme::OptsAttributes
456
- opts_attribute :foo
457
- attr_accessor :opts
458
- end
459
- @o = @c.new
460
- @o.opts = {}
461
- end
462
-
463
- it "should act as a getter if given no arguments, and setter if given arguments or a block" do
464
- @o.foo.must_be_nil
465
- @o.foo(1).must_equal 1
466
- @o.foo.must_equal 1
467
- p = proc{}
468
- # Work around minitest bug
469
- assert_equal @o.foo(&p), p
470
- assert_equal @o.foo, p
471
- end
472
-
473
- it "should should raise an error if given more than one argument" do
474
- proc{@o.foo(1, 2)}.must_raise(ArgumentError)
475
- end
476
-
477
- it "should should raise an error if given block and argument" do
478
- proc{@o.foo(1){}}.must_raise(ArgumentError)
479
- end
480
- end
481
-
482
- describe AutoForme do
483
- it ".version should return a typical version string" do
484
- AutoForme.version.must_match(/\A\d+\.\d+\.\d+\z/)
485
- end
486
- end
487
-
488
- describe AutoForme::Model do
489
- it "#model should raise error if underlying model is not a valid class string" do
490
- mod = AutoForme::Model.new('artist', nil)
491
- proc{mod.model}.must_raise AutoForme::Error
492
- end
493
- end
494
-
495
- describe AutoForme do
496
- before do
497
- class << AutoForme
498
- def require(f); end
499
- end
500
- end
501
- after do
502
- class << AutoForme
503
- remove_method :require
504
- end
505
- end
506
-
507
- it "should raise error when trying to use unsupported framework or model" do
508
- proc{AutoForme.framework_class_for(:foo)}.must_raise AutoForme::Error
509
- proc{AutoForme.model_class_for(:foo)}.must_raise AutoForme::Error
510
- end
511
- end