autoforme 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +4 -0
- data/Rakefile +15 -43
- data/lib/autoforme/action.rb +28 -2
- data/lib/autoforme/frameworks/rails.rb +7 -1
- data/lib/autoforme/frameworks/roda.rb +9 -3
- data/lib/autoforme/frameworks/sinatra.rb +10 -3
- data/lib/autoforme/model.rb +2 -2
- data/lib/autoforme/models/sequel.rb +9 -8
- data/lib/autoforme/version.rb +1 -1
- data/spec/associations_spec.rb +63 -63
- data/spec/basic_spec.rb +156 -146
- data/spec/mtm_spec.rb +67 -67
- data/spec/rails_spec_helper.rb +0 -9
- data/spec/roda_spec_helper.rb +6 -0
- data/spec/sequel_spec_helper.rb +0 -16
- data/spec/spec_helper.rb +12 -4
- data/spec/unit_spec.rb +178 -177
- metadata +59 -2
data/spec/basic_spec.rb
CHANGED
@@ -12,52 +12,58 @@ describe AutoForme do
|
|
12
12
|
it "should have basic functionality working" do
|
13
13
|
app_setup(Artist)
|
14
14
|
visit("/Artist/new")
|
15
|
-
page.title.
|
15
|
+
page.title.must_equal 'Artist - New'
|
16
16
|
fill_in 'Name', :with=>'TestArtistNew'
|
17
17
|
click_button 'Create'
|
18
|
-
page.html.
|
19
|
-
page.current_path.
|
18
|
+
page.html.must_match /Created Artist/
|
19
|
+
page.current_path.must_equal '/Artist/new'
|
20
20
|
|
21
21
|
click_link 'Show'
|
22
|
-
page.title.
|
22
|
+
page.title.must_equal 'Artist - Show'
|
23
23
|
select 'TestArtistNew'
|
24
24
|
click_button 'Show'
|
25
|
-
page.html.
|
25
|
+
page.html.must_match /Name.+TestArtistNew/m
|
26
26
|
|
27
27
|
click_link 'Edit'
|
28
|
-
page.title.
|
28
|
+
page.title.must_equal 'Artist - Edit'
|
29
29
|
select 'TestArtistNew'
|
30
30
|
click_button 'Edit'
|
31
31
|
fill_in 'Name', :with=>'TestArtistUpdate'
|
32
32
|
click_button 'Update'
|
33
|
-
page.html.
|
34
|
-
page.html.
|
35
|
-
page.current_path.
|
33
|
+
page.html.must_match /Updated Artist/
|
34
|
+
page.html.must_match /Name.+TestArtistUpdate/m
|
35
|
+
page.current_path.must_match %r{/Artist/edit/\d+}
|
36
36
|
|
37
37
|
click_link 'Search'
|
38
|
-
page.title.
|
38
|
+
page.title.must_equal 'Artist - Search'
|
39
39
|
fill_in 'Name', :with=>'Upd'
|
40
40
|
click_button 'Search'
|
41
|
-
page.all('th').map{|s| s.text}.
|
42
|
-
page.all('td').map{|s| s.text}.
|
41
|
+
page.all('th').map{|s| s.text}.must_equal ['Name', 'Show', 'Edit', 'Delete']
|
42
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Show", "Edit", "Delete"]
|
43
|
+
click_link 'CSV Format'
|
44
|
+
page.body.must_equal "Name\nTestArtistUpdate\n"
|
43
45
|
|
46
|
+
visit("/Artist/browse")
|
44
47
|
click_link 'Search'
|
45
48
|
fill_in 'Name', :with=>'Foo'
|
46
49
|
click_button 'Search'
|
47
|
-
page.all('td').map{|s| s.text}.
|
50
|
+
page.all('td').map{|s| s.text}.must_equal []
|
48
51
|
|
49
52
|
click_link 'Artist'
|
50
|
-
page.title.
|
51
|
-
page.all('td').map{|s| s.text}.
|
53
|
+
page.title.must_equal 'Artist - Browse'
|
54
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Show", "Edit", "Delete"]
|
55
|
+
click_link 'CSV Format'
|
56
|
+
page.body.must_equal "Name\nTestArtistUpdate\n"
|
52
57
|
|
58
|
+
visit("/Artist/browse")
|
53
59
|
page.all('td').last.find('a').click
|
54
60
|
click_button 'Delete'
|
55
|
-
page.title.
|
56
|
-
page.html.
|
57
|
-
page.current_path.
|
61
|
+
page.title.must_equal 'Artist - Delete'
|
62
|
+
page.html.must_match /Deleted Artist/
|
63
|
+
page.current_path.must_equal '/Artist/delete'
|
58
64
|
|
59
65
|
click_link 'Artist'
|
60
|
-
page.all('td').map{|s| s.text}.
|
66
|
+
page.all('td').map{|s| s.text}.must_equal []
|
61
67
|
end
|
62
68
|
|
63
69
|
it "should have basic functionality working in a subdirectory" do
|
@@ -65,44 +71,44 @@ describe AutoForme do
|
|
65
71
|
visit("/prefix/Artist/new")
|
66
72
|
fill_in 'Name', :with=>'TestArtistNew'
|
67
73
|
click_button 'Create'
|
68
|
-
page.html.
|
69
|
-
page.current_path.
|
74
|
+
page.html.must_match /Created Artist/
|
75
|
+
page.current_path.must_equal '/prefix/Artist/new'
|
70
76
|
|
71
77
|
click_link 'Show'
|
72
78
|
select 'TestArtistNew'
|
73
79
|
click_button 'Show'
|
74
|
-
page.html.
|
80
|
+
page.html.must_match /Name.+TestArtistNew/m
|
75
81
|
|
76
82
|
click_link 'Edit'
|
77
83
|
select 'TestArtistNew'
|
78
84
|
click_button 'Edit'
|
79
85
|
fill_in 'Name', :with=>'TestArtistUpdate'
|
80
86
|
click_button 'Update'
|
81
|
-
page.html.
|
82
|
-
page.html.
|
83
|
-
page.current_path.
|
87
|
+
page.html.must_match /Updated Artist/
|
88
|
+
page.html.must_match /Name.+TestArtistUpdate/m
|
89
|
+
page.current_path.must_match %r{/prefix/Artist/edit/\d+}
|
84
90
|
|
85
91
|
click_link 'Search'
|
86
92
|
fill_in 'Name', :with=>'Upd'
|
87
93
|
click_button 'Search'
|
88
|
-
page.all('th').map{|s| s.text}.
|
89
|
-
page.all('td').map{|s| s.text}.
|
94
|
+
page.all('th').map{|s| s.text}.must_equal ['Name', 'Show', 'Edit', 'Delete']
|
95
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Show", "Edit", "Delete"]
|
90
96
|
|
91
97
|
click_link 'Search'
|
92
98
|
fill_in 'Name', :with=>'Foo'
|
93
99
|
click_button 'Search'
|
94
|
-
page.all('td').map{|s| s.text}.
|
100
|
+
page.all('td').map{|s| s.text}.must_equal []
|
95
101
|
|
96
102
|
click_link 'Artist'
|
97
|
-
page.all('td').map{|s| s.text}.
|
103
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Show", "Edit", "Delete"]
|
98
104
|
|
99
105
|
page.all('td').last.find('a').click
|
100
106
|
click_button 'Delete'
|
101
|
-
page.html.
|
102
|
-
page.current_path.
|
107
|
+
page.html.must_match /Deleted Artist/
|
108
|
+
page.current_path.must_equal '/prefix/Artist/delete'
|
103
109
|
|
104
110
|
click_link 'Artist'
|
105
|
-
page.all('td').map{|s| s.text}.
|
111
|
+
page.all('td').map{|s| s.text}.must_equal []
|
106
112
|
end
|
107
113
|
|
108
114
|
it "should have delete button on edit page" do
|
@@ -115,9 +121,9 @@ describe AutoForme do
|
|
115
121
|
select 'TestArtistNew'
|
116
122
|
click_button 'Edit'
|
117
123
|
click_button 'Delete'
|
118
|
-
Artist.count.
|
124
|
+
Artist.count.must_equal 1
|
119
125
|
click_button 'Delete'
|
120
|
-
Artist.count.
|
126
|
+
Artist.count.must_equal 0
|
121
127
|
end
|
122
128
|
|
123
129
|
it "should support custom headers and footers" do
|
@@ -126,7 +132,7 @@ describe AutoForme do
|
|
126
132
|
page_footer "<a href='/Artist/edit'>E</a>"
|
127
133
|
end
|
128
134
|
visit("/Artist/browse")
|
129
|
-
page.html.
|
135
|
+
page.html.wont_match /search/
|
130
136
|
click_link 'N'
|
131
137
|
fill_in 'Name', :with=>'TestArtistNew'
|
132
138
|
click_button 'Create'
|
@@ -151,14 +157,14 @@ describe AutoForme do
|
|
151
157
|
visit("/Artist/new")
|
152
158
|
fill_in 'Name', :with=>'TestArtistNew'
|
153
159
|
click_button 'Create'
|
154
|
-
page.current_path.
|
160
|
+
page.current_path.must_match %r{/Artist/edit/\d}
|
155
161
|
click_button 'Update'
|
156
|
-
page.current_path.
|
162
|
+
page.current_path.must_match %r{/Artist/show/\d}
|
157
163
|
click_link 'Delete'
|
158
164
|
select 'TestArtistNew'
|
159
165
|
click_button 'Delete'
|
160
166
|
click_button 'Delete'
|
161
|
-
page.current_path.
|
167
|
+
page.current_path.must_equal "/Artist/new"
|
162
168
|
end
|
163
169
|
|
164
170
|
it "should support custom form options and attributes" do
|
@@ -167,9 +173,9 @@ describe AutoForme do
|
|
167
173
|
form_options :input_defaults=>{'text'=>{:class=>'barfoo'}}
|
168
174
|
end
|
169
175
|
visit("/Artist/new")
|
170
|
-
find('form')[:class].
|
171
|
-
find('form')[:action].
|
172
|
-
find('form input#artist_name')[:class].
|
176
|
+
find('form')[:class].must_equal 'foobar forme artist'
|
177
|
+
find('form')[:action].must_equal '/create_artist'
|
178
|
+
find('form input#artist_name')[:class].must_equal 'barfoo'
|
173
179
|
end
|
174
180
|
|
175
181
|
it "should support support specifying column options per type" do
|
@@ -180,25 +186,25 @@ describe AutoForme do
|
|
180
186
|
visit("/Artist/new")
|
181
187
|
fill_in 'New Artist Name', :with=>'TestArtistNew'
|
182
188
|
click_button 'Create'
|
183
|
-
page.current_path.
|
189
|
+
page.current_path.must_equal '/Artist/new'
|
184
190
|
|
185
191
|
click_link 'Show'
|
186
192
|
select 'TestArtistNew'
|
187
193
|
click_button 'Show'
|
188
|
-
page.html.
|
194
|
+
page.html.must_match /Show Artist Name.+TestArtistNew/m
|
189
195
|
click_button 'Edit'
|
190
196
|
fill_in 'Edit Artist Name', :with=>'TestArtistUpdate'
|
191
197
|
click_button 'Update'
|
192
|
-
page.html.
|
193
|
-
page.current_path.
|
198
|
+
page.html.must_match /Edit Artist Name.+TestArtistUpdate/m
|
199
|
+
page.current_path.must_match %r{/Artist/edit/\d+}
|
194
200
|
|
195
201
|
click_link 'Search'
|
196
202
|
fill_in 'Search_form Artist Name', :with=>'Upd'
|
197
203
|
click_button 'Search'
|
198
|
-
page.all('th').map{|s| s.text}.
|
204
|
+
page.all('th').map{|s| s.text}.must_equal ["Search Artist Name", "Show", "Edit", "Delete"]
|
199
205
|
|
200
206
|
click_link 'Artist'
|
201
|
-
page.all('th').map{|s| s.text}.
|
207
|
+
page.all('th').map{|s| s.text}.must_equal ["Browse Artist Name", "Show", "Edit", "Delete"]
|
202
208
|
end
|
203
209
|
|
204
210
|
it "should support specifying display names per type" do
|
@@ -218,18 +224,18 @@ describe AutoForme do
|
|
218
224
|
visit("/Artist/show")
|
219
225
|
select 'stArtistN'
|
220
226
|
click_button 'Show'
|
221
|
-
page.html.
|
227
|
+
page.html.must_match /Name.+TestArtistNew/m
|
222
228
|
|
223
229
|
click_link 'Edit'
|
224
230
|
select 'estArtistNe'
|
225
231
|
click_button 'Edit'
|
226
|
-
page.html.
|
232
|
+
page.html.must_match /Name.+TestArtistNew/m
|
227
233
|
|
228
234
|
click_link 'Delete'
|
229
235
|
select 'Artist'
|
230
236
|
click_button 'Delete'
|
231
237
|
click_button 'Delete'
|
232
|
-
Artist.count.
|
238
|
+
Artist.count.must_equal 0
|
233
239
|
end
|
234
240
|
|
235
241
|
it "should support create, update, delete hooks" do
|
@@ -258,20 +264,20 @@ describe AutoForme do
|
|
258
264
|
end
|
259
265
|
visit("/Artist/new")
|
260
266
|
click_button 'Create'
|
261
|
-
a.
|
267
|
+
a.must_equal [:new, :create, -1, 'create', 1, :new]
|
262
268
|
a.clear
|
263
269
|
|
264
270
|
click_link 'Edit'
|
265
271
|
select 'weNtsitrAtseT'
|
266
272
|
click_button 'Edit'
|
267
|
-
page.html.
|
273
|
+
page.html.must_match /weNtsitrAtseT21/
|
268
274
|
click_button 'Update'
|
269
|
-
a.
|
275
|
+
a.must_equal [:edit, :edit, :update, -2, 'update', 2, :edit]
|
270
276
|
a.clear
|
271
277
|
|
272
278
|
click_link 'Show'
|
273
|
-
page.current_path.
|
274
|
-
a.
|
279
|
+
page.current_path.must_equal '/Artist/browse'
|
280
|
+
a.must_equal [:show, :browse]
|
275
281
|
a.clear
|
276
282
|
|
277
283
|
click_link 'Delete', :match=>:first
|
@@ -279,13 +285,13 @@ describe AutoForme do
|
|
279
285
|
select 'WENTSITRATSET21'
|
280
286
|
click_button 'Delete'
|
281
287
|
click_button 'Delete'
|
282
|
-
a.
|
288
|
+
a.must_equal [:delete, :delete, :destroy, -3, 'destroy', 3, :delete]
|
283
289
|
a.clear
|
284
290
|
|
285
291
|
select 'A'
|
286
292
|
click_button 'Delete'
|
287
|
-
proc{click_button 'Delete'}.
|
288
|
-
a.
|
293
|
+
proc{click_button 'Delete'}.must_raise RuntimeError
|
294
|
+
a.must_equal [:delete, :destroy, -3]
|
289
295
|
end
|
290
296
|
|
291
297
|
it "should support specifying table class for data tables per type" do
|
@@ -293,10 +299,10 @@ describe AutoForme do
|
|
293
299
|
table_class{|type, req| type == :browse ? 'foo' : 'bar'}
|
294
300
|
end
|
295
301
|
visit("/Artist/browse")
|
296
|
-
first('table')['class'].
|
302
|
+
first('table')['class'].must_equal 'foo'
|
297
303
|
click_link 'Search'
|
298
304
|
click_button 'Search'
|
299
|
-
first('table')['class'].
|
305
|
+
first('table')['class'].must_equal 'bar'
|
300
306
|
end
|
301
307
|
|
302
308
|
it "should support specifying numbers of rows per page per type" do
|
@@ -305,28 +311,28 @@ describe AutoForme do
|
|
305
311
|
end
|
306
312
|
5.times{|i| Artist.create(:name=>i.to_s)}
|
307
313
|
visit("/Artist/browse")
|
308
|
-
first('li.disabled a').text.
|
309
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
314
|
+
first('li.disabled a').text.must_equal 'Previous'
|
315
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1'
|
310
316
|
click_link 'Next'
|
311
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
317
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 3'
|
312
318
|
click_link 'Next'
|
313
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
314
|
-
first('li.disabled a').text.
|
319
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'4'
|
320
|
+
first('li.disabled a').text.must_equal 'Next'
|
315
321
|
click_link 'Previous'
|
316
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
322
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 3'
|
317
323
|
click_link 'Previous'
|
318
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
319
|
-
first('li.disabled a').text.
|
324
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1'
|
325
|
+
first('li.disabled a').text.must_equal 'Previous'
|
320
326
|
|
321
327
|
click_link 'Search'
|
322
328
|
click_button 'Search'
|
323
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
329
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1 2'
|
324
330
|
click_link 'Next'
|
325
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
326
|
-
first('li.disabled a').text.
|
331
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'3 4'
|
332
|
+
first('li.disabled a').text.must_equal 'Next'
|
327
333
|
click_link 'Previous'
|
328
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
329
|
-
first('li.disabled a').text.
|
334
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1 2'
|
335
|
+
first('li.disabled a').text.must_equal 'Previous'
|
330
336
|
end
|
331
337
|
|
332
338
|
it "should support specifying supported actions" do
|
@@ -336,25 +342,25 @@ describe AutoForme do
|
|
336
342
|
visit("/Artist/new")
|
337
343
|
fill_in 'Name', :with=>'TestArtistNew'
|
338
344
|
click_button 'Create'
|
339
|
-
page.current_path.
|
340
|
-
page.html.
|
341
|
-
page.html.
|
345
|
+
page.current_path.must_equal '/Artist/new'
|
346
|
+
page.html.wont_match /Show/
|
347
|
+
page.html.wont_match /Delete/
|
342
348
|
|
343
349
|
click_link 'Edit'
|
344
350
|
select 'TestArtistNew'
|
345
351
|
click_button 'Edit'
|
346
352
|
fill_in 'Name', :with=>'TestArtistUpdate'
|
347
353
|
click_button 'Update'
|
348
|
-
page.html.
|
349
|
-
page.current_path.
|
354
|
+
page.html.must_match /Name.+TestArtistUpdate/m
|
355
|
+
page.current_path.must_match %r{/Artist/edit/\d+}
|
350
356
|
|
351
357
|
click_link 'Search'
|
352
358
|
fill_in 'Name', :with=>'Upd'
|
353
359
|
click_button 'Search'
|
354
|
-
page.all('td').map{|s| s.text}.
|
360
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Edit"]
|
355
361
|
|
356
362
|
click_link 'Artist'
|
357
|
-
page.all('td').map{|s| s.text}.
|
363
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Edit"]
|
358
364
|
end
|
359
365
|
|
360
366
|
it "should have basic functionality working" do
|
@@ -365,22 +371,22 @@ describe AutoForme do
|
|
365
371
|
visit("/BarArtist/new")
|
366
372
|
fill_in 'Name', :with=>'TestArtistNew'
|
367
373
|
click_button 'Create'
|
368
|
-
page.html.
|
369
|
-
page.current_path.
|
374
|
+
page.html.must_match /Created FooArtist/
|
375
|
+
page.current_path.must_equal '/BarArtist/new'
|
370
376
|
|
371
377
|
click_link 'Edit'
|
372
378
|
select 'TestArtistNew'
|
373
379
|
click_button 'Edit'
|
374
380
|
fill_in 'Name', :with=>'TestArtistUpdate'
|
375
381
|
click_button 'Update'
|
376
|
-
page.html.
|
382
|
+
page.html.must_match /Updated FooArtist/
|
377
383
|
|
378
384
|
click_link 'FooArtist'
|
379
|
-
page.all('td').map{|s| s.text}.
|
385
|
+
page.all('td').map{|s| s.text}.must_equal ["TestArtistUpdate", "Show", "Edit", "Delete"]
|
380
386
|
|
381
387
|
page.all('td').last.find('a').click
|
382
388
|
click_button 'Delete'
|
383
|
-
page.html.
|
389
|
+
page.html.must_match /Deleted FooArtist/
|
384
390
|
end
|
385
391
|
|
386
392
|
it "should use text boxes on list page when autocompleting is enabled" do
|
@@ -392,7 +398,7 @@ describe AutoForme do
|
|
392
398
|
visit('/Artist/show')
|
393
399
|
fill_in 'Artist', :with=>a.id.to_s
|
394
400
|
click_button 'Show'
|
395
|
-
page.html.
|
401
|
+
page.html.must_match /Name.+TestArtistNew/m
|
396
402
|
|
397
403
|
click_link 'Edit'
|
398
404
|
fill_in 'Artist', :with=>a.id.to_s
|
@@ -403,7 +409,7 @@ describe AutoForme do
|
|
403
409
|
fill_in 'Artist', :with=>a.id.to_s
|
404
410
|
click_button 'Delete'
|
405
411
|
click_button 'Delete'
|
406
|
-
Artist.count.
|
412
|
+
Artist.count.must_equal 0
|
407
413
|
end
|
408
414
|
end
|
409
415
|
|
@@ -434,18 +440,18 @@ describe AutoForme do
|
|
434
440
|
fill_in 'N2', :with=>'V2'
|
435
441
|
fill_in 'N3', :with=>'V3'
|
436
442
|
fill_in 'N4', :with=>'V4'
|
437
|
-
page.body.
|
443
|
+
page.body.wont_match /<label>N5/i
|
438
444
|
click_button 'Create'
|
439
445
|
|
440
446
|
click_link 'Show'
|
441
447
|
select 'V0'
|
442
448
|
click_button 'Show'
|
443
|
-
page.body.
|
444
|
-
page.body.
|
445
|
-
page.body.
|
446
|
-
page.body.
|
447
|
-
page.body.
|
448
|
-
page.body.
|
449
|
+
page.body.must_match /[VN]0/i
|
450
|
+
page.body.must_match /[VN]1/i
|
451
|
+
page.body.must_match /[VN]2/i
|
452
|
+
page.body.wont_match /[VN]3/i
|
453
|
+
page.body.must_match /[VN]4/i
|
454
|
+
page.body.must_match /N5/i
|
449
455
|
|
450
456
|
click_link 'Edit'
|
451
457
|
select 'V0'
|
@@ -454,22 +460,26 @@ describe AutoForme do
|
|
454
460
|
fill_in 'N1', :with=>'Q1'
|
455
461
|
fill_in 'N2', :with=>'Q2'
|
456
462
|
fill_in 'N3', :with=>'Q3'
|
457
|
-
page.body.
|
463
|
+
page.body.wont_match /<label>N4/i
|
458
464
|
fill_in 'N5', :with=>'Q5'
|
459
465
|
click_button 'Update'
|
460
466
|
|
461
467
|
click_link 'Search'
|
462
468
|
fill_in 'N0', :with=>'Q0'
|
463
|
-
page.body.
|
469
|
+
page.body.wont_match /<label>N1/i
|
464
470
|
fill_in 'N2', :with=>'Q2'
|
465
471
|
fill_in 'N3', :with=>'Q3'
|
466
472
|
fill_in 'N4', :with=>'V4'
|
467
473
|
fill_in 'N5', :with=>'Q5'
|
468
474
|
click_button 'Search'
|
469
|
-
page.all('td').map{|s| s.text}.
|
470
|
-
|
471
|
-
|
472
|
-
|
475
|
+
page.all('td').map{|s| s.text}.must_equal ["Q1", "Q2", "Q3", "V4", "Q5", "Show", "Edit", "Delete"]
|
476
|
+
click_link 'CSV Format'
|
477
|
+
page.body.must_equal "N1,N2,N3,N4,N5\nQ1,Q2,Q3,V4,Q5\n"
|
478
|
+
|
479
|
+
visit '/Artist/browse'
|
480
|
+
page.all('td').map{|s| s.text}.must_equal ["Q0", "Q1", "Q3", "V4", "Q5", "Show", "Edit", "Delete"]
|
481
|
+
click_link 'CSV Format'
|
482
|
+
page.body.must_equal "N0,N1,N3,N4,N5\nQ0,Q1,Q3,V4,Q5\n"
|
473
483
|
end
|
474
484
|
|
475
485
|
it "should support specifying order per type" do
|
@@ -483,20 +493,20 @@ describe AutoForme do
|
|
483
493
|
Artist.create(:n0=>'0', :n1=>'4', :n2=>'1', :n3=>'5', :n4=>'3')
|
484
494
|
|
485
495
|
visit("/Artist/show")
|
486
|
-
page.all('option').map{|s| s.text}.
|
496
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1', '0']
|
487
497
|
|
488
498
|
click_link 'Edit'
|
489
|
-
page.all('option').map{|s| s.text}.
|
499
|
+
page.all('option').map{|s| s.text}.must_equal ['', '0', '1', '2']
|
490
500
|
|
491
501
|
click_link 'Delete'
|
492
|
-
page.all('option').map{|s| s.text}.
|
502
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '0', '1']
|
493
503
|
|
494
504
|
click_link 'Search'
|
495
505
|
click_button 'Search'
|
496
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
506
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal ['0', '2', '1']
|
497
507
|
|
498
508
|
click_link 'Artist'
|
499
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
509
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal ['1', '2', '0']
|
500
510
|
end
|
501
511
|
|
502
512
|
it "should support specifying filter per type" do
|
@@ -522,16 +532,16 @@ describe AutoForme do
|
|
522
532
|
Artist.create(:n0=>'0', :n1=>'4', :n2=>'1', :n3=>'5', :n4=>'3')
|
523
533
|
|
524
534
|
visit("/Artist/show")
|
525
|
-
page.all('option').map{|s| s.text}.
|
535
|
+
page.all('option').map{|s| s.text}.must_equal ['', '0']
|
526
536
|
|
527
537
|
click_link 'Edit'
|
528
|
-
page.all('option').map{|s| s.text}.
|
538
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2']
|
529
539
|
select '2'
|
530
540
|
click_button 'Edit'
|
531
541
|
click_button 'Update'
|
532
542
|
|
533
543
|
click_link 'Delete'
|
534
|
-
page.all('option').map{|s| s.text}.
|
544
|
+
page.all('option').map{|s| s.text}.must_equal ['', '1']
|
535
545
|
select '1'
|
536
546
|
click_button 'Delete'
|
537
547
|
click_button 'Delete'
|
@@ -539,10 +549,10 @@ describe AutoForme do
|
|
539
549
|
|
540
550
|
click_link 'Search'
|
541
551
|
click_button 'Search'
|
542
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
552
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1'
|
543
553
|
|
544
554
|
click_link 'Artist'
|
545
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
555
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1'
|
546
556
|
end
|
547
557
|
|
548
558
|
it "should support specifying filter per type using request params" do
|
@@ -569,19 +579,19 @@ describe AutoForme do
|
|
569
579
|
Artist.create(:n0=>'0', :n1=>'4', :n2=>'1', :n3=>'5', :n4=>'3')
|
570
580
|
|
571
581
|
visit("/Artist/show?f=3")
|
572
|
-
page.all('option').map{|s| s.text}.
|
582
|
+
page.all('option').map{|s| s.text}.must_equal ['', '0']
|
573
583
|
|
574
584
|
visit("/Artist/edit?f=1")
|
575
|
-
page.all('option').map{|s| s.text}.
|
585
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2']
|
576
586
|
|
577
587
|
visit("/Artist/delete?f=2")
|
578
|
-
page.all('option').map{|s| s.text}.
|
588
|
+
page.all('option').map{|s| s.text}.must_equal ['', '1']
|
579
589
|
|
580
590
|
visit("/Artist/search/1?f=4")
|
581
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
591
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1'
|
582
592
|
|
583
593
|
visit("/Artist/browse?f=6")
|
584
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
594
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1'
|
585
595
|
end
|
586
596
|
|
587
597
|
it "should support specifying filter per type using request session" do
|
@@ -596,16 +606,16 @@ describe AutoForme do
|
|
596
606
|
visit '/session/set?n1=2'
|
597
607
|
|
598
608
|
visit("/Artist/show")
|
599
|
-
page.all('option').map{|s| s.text}.
|
609
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
600
610
|
|
601
611
|
click_link 'Edit'
|
602
|
-
page.all('option').map{|s| s.text}.
|
612
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
603
613
|
select '2'
|
604
614
|
click_button 'Edit'
|
605
615
|
click_button 'Update'
|
606
616
|
|
607
617
|
click_link 'Delete'
|
608
|
-
page.all('option').map{|s| s.text}.
|
618
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
609
619
|
select '1'
|
610
620
|
click_button 'Delete'
|
611
621
|
click_button 'Delete'
|
@@ -613,10 +623,10 @@ describe AutoForme do
|
|
613
623
|
|
614
624
|
click_link 'Search'
|
615
625
|
click_button 'Search'
|
616
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
626
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 1'
|
617
627
|
|
618
628
|
click_link 'Artist'
|
619
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
629
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 1'
|
620
630
|
end
|
621
631
|
|
622
632
|
it "should support session_value for restricting access by matching session variable to column value" do
|
@@ -638,23 +648,23 @@ describe AutoForme do
|
|
638
648
|
click_button 'Create'
|
639
649
|
|
640
650
|
click_link 'Show'
|
641
|
-
page.all('option').map{|s| s.text}.
|
651
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
642
652
|
|
643
653
|
click_link 'Edit'
|
644
|
-
page.all('option').map{|s| s.text}.
|
654
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
645
655
|
select '2'
|
646
656
|
click_button 'Edit'
|
647
657
|
click_button 'Update'
|
648
658
|
|
649
659
|
click_link 'Search'
|
650
660
|
click_button 'Search'
|
651
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
661
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 1'
|
652
662
|
|
653
663
|
click_link 'Artist'
|
654
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
664
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 1'
|
655
665
|
|
656
666
|
click_link 'Delete', :match=>:first
|
657
|
-
page.all('option').map{|s| s.text}.
|
667
|
+
page.all('option').map{|s| s.text}.must_equal ['', '2', '1']
|
658
668
|
select '1'
|
659
669
|
click_button 'Delete'
|
660
670
|
end
|
@@ -672,14 +682,14 @@ describe AutoForme do
|
|
672
682
|
it "should display decimals in float format in tables" do
|
673
683
|
app_setup(Artist)
|
674
684
|
visit("/Artist/new")
|
675
|
-
page.title.
|
685
|
+
page.title.must_equal 'Artist - New'
|
676
686
|
fill_in 'Num', :with=>'1.01'
|
677
687
|
click_button 'Create'
|
678
688
|
click_link 'Artist'
|
679
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
689
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1.01'
|
680
690
|
click_link 'Search'
|
681
691
|
click_button 'Search'
|
682
|
-
page.all('tr td:first-child').map{|s| s.text}.
|
692
|
+
page.all('tr td:first-child').map{|s| s.text}.must_equal %w'1.01'
|
683
693
|
end
|
684
694
|
end
|
685
695
|
|
@@ -708,50 +718,50 @@ describe AutoForme do
|
|
708
718
|
end
|
709
719
|
end
|
710
720
|
visit("/Artist/new")
|
711
|
-
page.title.
|
721
|
+
page.title.must_equal 'Artist - New'
|
712
722
|
fill_in 'Name', :with=>'TestArtistNew'
|
713
723
|
click_button 'Create'
|
714
|
-
page.html.
|
715
|
-
page.current_path.
|
724
|
+
page.html.must_match /Created Artist/
|
725
|
+
page.current_path.must_equal '/Artist/new'
|
716
726
|
|
717
727
|
click_link 'Show'
|
718
|
-
page.title.
|
728
|
+
page.title.must_equal 'Artist - Show'
|
719
729
|
select '[-TestArtistNew-]'
|
720
730
|
click_button 'Show'
|
721
|
-
page.html.
|
731
|
+
page.html.must_match /Name.+-TestArtistNew-/m
|
722
732
|
|
723
733
|
click_link 'Edit'
|
724
|
-
page.title.
|
734
|
+
page.title.must_equal 'Artist - Edit'
|
725
735
|
select '[-TestArtistNew-]'
|
726
736
|
click_button 'Edit'
|
727
737
|
fill_in 'Name', :with=>'TestArtistUpdate'
|
728
738
|
click_button 'Update'
|
729
|
-
page.html.
|
730
|
-
page.html.
|
731
|
-
page.current_path.
|
739
|
+
page.html.must_match /Updated Artist/
|
740
|
+
page.html.must_match /Name.+-TestArtistUpdate-/m
|
741
|
+
page.current_path.must_match %r{/Artist/edit/\d+}
|
732
742
|
|
733
743
|
click_link 'Search'
|
734
|
-
page.title.
|
744
|
+
page.title.must_equal 'Artist - Search'
|
735
745
|
fill_in 'Name', :with=>'Upd'
|
736
746
|
click_button 'Search'
|
737
|
-
page.all('th').map{|s| s.text}.
|
738
|
-
page.all('td').map{|s| s.text}.
|
747
|
+
page.all('th').map{|s| s.text}.must_equal ['Name', 'Show', 'Edit', 'Delete']
|
748
|
+
page.all('td').map{|s| s.text}.must_equal ["-TestArtistUpdate-", "Show", "Edit", "Delete"]
|
739
749
|
|
740
750
|
click_link 'Search'
|
741
751
|
fill_in 'Name', :with=>'Foo'
|
742
752
|
click_button 'Search'
|
743
|
-
page.all('td').map{|s| s.text}.
|
753
|
+
page.all('td').map{|s| s.text}.must_equal []
|
744
754
|
|
745
755
|
click_link 'Artist'
|
746
|
-
page.title.
|
747
|
-
page.all('td').map{|s| s.text}.
|
756
|
+
page.title.must_equal 'Artist - Browse'
|
757
|
+
page.all('td').map{|s| s.text}.must_equal ["-TestArtistUpdate-", "Show", "Edit", "Delete"]
|
748
758
|
|
749
759
|
page.all('td').last.find('a').click
|
750
760
|
click_button 'Delete'
|
751
|
-
page.html.
|
752
|
-
page.current_path.
|
761
|
+
page.html.must_match /Deleted Artist/
|
762
|
+
page.current_path.must_equal '/Artist/delete'
|
753
763
|
|
754
764
|
click_link 'Artist'
|
755
|
-
page.all('td').map{|s| s.text}.
|
765
|
+
page.all('td').map{|s| s.text}.must_equal []
|
756
766
|
end
|
757
767
|
end
|