table_helper 0.0.3
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/CHANGELOG +19 -0
- data/MIT-LICENSE +20 -0
- data/README +161 -0
- data/Rakefile +80 -0
- data/init.rb +1 -0
- data/lib/table_helper/body.rb +119 -0
- data/lib/table_helper/body_row.rb +86 -0
- data/lib/table_helper/cell.rb +51 -0
- data/lib/table_helper/collection_table.rb +60 -0
- data/lib/table_helper/footer.rb +47 -0
- data/lib/table_helper/header.rb +125 -0
- data/lib/table_helper/html_element.rb +46 -0
- data/lib/table_helper/row.rb +72 -0
- data/lib/table_helper.rb +182 -0
- data/test/body_row_test.rb +105 -0
- data/test/body_test.rb +271 -0
- data/test/cell_test.rb +52 -0
- data/test/collection_table_test.rb +254 -0
- data/test/footer_test.rb +72 -0
- data/test/header_test.rb +210 -0
- data/test/html_element_test.rb +74 -0
- data/test/row_test.rb +115 -0
- data/test/table_helper_test.rb +37 -0
- data/test/test_helper.rb +14 -0
- metadata +85 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class BodyRowByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
6
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Object.new, header)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_not_alternate
|
10
|
+
assert !@row.alternate
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_have_a_class_name
|
14
|
+
assert_equal 'row', @row[:class]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BodyRowTest < Test::Unit::TestCase
|
19
|
+
class Post
|
20
|
+
def title
|
21
|
+
'Default Value'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
27
|
+
header.column :title
|
28
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Post.new, header)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_generate_cell_accessors
|
32
|
+
assert @row.respond_to?(:title)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_override_default_cell_content_if_cell_specified
|
36
|
+
@row.title 'Hello World'
|
37
|
+
assert_equal '<tr class="row"><td class="title">Hello World</td></tr>', @row.html
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class BodyRowWithNoColumnsTest < Test::Unit::TestCase
|
42
|
+
def setup
|
43
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
44
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Object.new, header)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_not_build_cells
|
48
|
+
assert_equal '<tr class="row"></tr>', @row.html
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class BodyRowWithCustomAttributeTest < Test::Unit::TestCase
|
53
|
+
class Post
|
54
|
+
def title
|
55
|
+
'Default Value'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def setup
|
60
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
61
|
+
header.column :title
|
62
|
+
header.column :author_name
|
63
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Post.new, header)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_use_attribute_values_as_cell_content
|
67
|
+
@row.author_name 'John Doe'
|
68
|
+
assert_equal '<tr class="row"><td class="title">Default Value</td><td class="author_name">John Doe</td></tr>', @row.html
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class BodyRowWithMissingCellsTest < Test::Unit::TestCase
|
73
|
+
def setup
|
74
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
75
|
+
header.column :title
|
76
|
+
header.column :author_name
|
77
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Object.new, header)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_should_build_missing_cells_if_cells_not_specified
|
81
|
+
assert_equal '<tr class="row"><td class="title empty"></td><td class="author_name empty"></td></tr>', @row.html
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_should_skip_missing_cells_if_colspan_replaces_missing_cells
|
85
|
+
@row.title 'Hello World', :colspan => 2
|
86
|
+
assert_equal '<tr class="row"><td class="title" colspan="2">Hello World</td></tr>', @row.html
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_should_not_skip_missing_cells_if_colspan_doesnt_replace_missing_cells
|
90
|
+
@row.title 'Hello World'
|
91
|
+
assert_equal '<tr class="row"><td class="title">Hello World</td><td class="author_name empty"></td></tr>', @row.html
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class BodyRowAlternatingTest < Test::Unit::TestCase
|
96
|
+
def setup
|
97
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
98
|
+
@row = PluginAWeek::TableHelper::BodyRow.new(Object.new, header)
|
99
|
+
@row.alternate = true
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_should_add_alternate_class
|
103
|
+
assert_equal '<tr class="row alternate"></tr>', @row.html
|
104
|
+
end
|
105
|
+
end
|
data/test/body_test.rb
ADDED
@@ -0,0 +1,271 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class BodyByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
header = PluginAWeek::TableHelper::Header.new([])
|
6
|
+
@body = PluginAWeek::TableHelper::Body.new([], header)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_not_alternate_rows
|
10
|
+
assert_nil @body.alternate_rows
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_have_an_empty_caption
|
14
|
+
assert_equal 'No matches found.', @body.empty_caption
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BodyTest < Test::Unit::TestCase
|
19
|
+
class Post
|
20
|
+
attr_accessor :title
|
21
|
+
|
22
|
+
def initialize(title)
|
23
|
+
@title = title
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def setup
|
28
|
+
@collection = [
|
29
|
+
Post.new('first'),
|
30
|
+
Post.new('second'),
|
31
|
+
Post.new('last')
|
32
|
+
]
|
33
|
+
@header = PluginAWeek::TableHelper::Header.new(@collection)
|
34
|
+
@body = PluginAWeek::TableHelper::Body.new(@collection, @header)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_raise_exception_if_invalid_alternate_rows_specified
|
38
|
+
assert_raise(ArgumentError) {@body.alternate_rows = :invalid}
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_should_not_raise_exception_for_odd_alternate_rows
|
42
|
+
assert_nothing_raised {@body.alternate_rows = :odd}
|
43
|
+
assert_equal :odd, @body.alternate_rows
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_not_raise_exception_for_even_alternate_rows
|
47
|
+
assert_nothing_raised {@body.alternate_rows = :even}
|
48
|
+
assert_equal :even, @body.alternate_rows
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_should_build_row_using_object_location_for_default_index
|
52
|
+
@header.column :title
|
53
|
+
|
54
|
+
@collection.each do |post|
|
55
|
+
html = @body.build_row(post) do |row, built_post, index|
|
56
|
+
assert_equal post, built_post
|
57
|
+
assert_equal @collection.index(post), index
|
58
|
+
end
|
59
|
+
|
60
|
+
expected = <<-end_eval
|
61
|
+
<tr class="row">
|
62
|
+
<td class="title">#{post.title}</td>
|
63
|
+
</tr>
|
64
|
+
end_eval
|
65
|
+
assert_html_equal expected, html
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_should_build_row_using_custom_value_for_index
|
70
|
+
@header.column :title
|
71
|
+
|
72
|
+
html = @body.build_row(@collection.first, 1) do |row, post, index|
|
73
|
+
assert_equal @collection.first, post
|
74
|
+
assert_equal 1, index
|
75
|
+
end
|
76
|
+
|
77
|
+
expected = <<-end_eval
|
78
|
+
<tr class="row">
|
79
|
+
<td class="title">first</td>
|
80
|
+
</tr>
|
81
|
+
end_eval
|
82
|
+
assert_html_equal expected, html
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_should_build_row_with_missing_cells
|
86
|
+
@header.column :title
|
87
|
+
@header.column :author_name
|
88
|
+
|
89
|
+
expected = <<-end_eval
|
90
|
+
<tr class="row">
|
91
|
+
<td class="title">first</td>
|
92
|
+
<td class="author_name empty"></td>
|
93
|
+
</tr>
|
94
|
+
end_eval
|
95
|
+
assert_html_equal expected, @body.build_row(@collection.first)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_should_build_all_rows
|
99
|
+
@header.column :title
|
100
|
+
|
101
|
+
expected = <<-end_eval
|
102
|
+
<tr class="row">
|
103
|
+
<td class="title">first</td>
|
104
|
+
</tr>
|
105
|
+
<tr class="row">
|
106
|
+
<td class="title">second</td>
|
107
|
+
</tr>
|
108
|
+
<tr class="row">
|
109
|
+
<td class="title">last</td>
|
110
|
+
</tr>
|
111
|
+
end_eval
|
112
|
+
assert_html_equal expected, @body.build
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_html_should_use_body_tag
|
116
|
+
@header.column :title
|
117
|
+
@body.build
|
118
|
+
|
119
|
+
expected = <<-end_eval
|
120
|
+
<tbody>
|
121
|
+
<tr class="row">
|
122
|
+
<td class="title">first</td>
|
123
|
+
</tr>
|
124
|
+
<tr class="row">
|
125
|
+
<td class="title">second</td>
|
126
|
+
</tr>
|
127
|
+
<tr class="row">
|
128
|
+
<td class="title">last</td>
|
129
|
+
</tr>
|
130
|
+
</tbody>
|
131
|
+
end_eval
|
132
|
+
assert_html_equal expected, @body.html
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_should_include_custom_attributes_in_body_tag
|
136
|
+
@header.column :title
|
137
|
+
@body[:class] = 'pretty'
|
138
|
+
@body.build
|
139
|
+
|
140
|
+
expected = <<-end_eval
|
141
|
+
<tbody class="pretty">
|
142
|
+
<tr class="row">
|
143
|
+
<td class="title">first</td>
|
144
|
+
</tr>
|
145
|
+
<tr class="row">
|
146
|
+
<td class="title">second</td>
|
147
|
+
</tr>
|
148
|
+
<tr class="row">
|
149
|
+
<td class="title">last</td>
|
150
|
+
</tr>
|
151
|
+
</tbody>
|
152
|
+
end_eval
|
153
|
+
assert_html_equal expected, @body.html
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
class BodyWithEmptyCollectionTest < Test::Unit::TestCase
|
158
|
+
def setup
|
159
|
+
@collection = []
|
160
|
+
@header = PluginAWeek::TableHelper::Header.new(@collection)
|
161
|
+
@body = PluginAWeek::TableHelper::Body.new(@collection, @header)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_should_show_no_content
|
165
|
+
expected = <<-end_eval
|
166
|
+
<tr class="no_content">
|
167
|
+
<td>No matches found.</td>
|
168
|
+
</tr>
|
169
|
+
end_eval
|
170
|
+
assert_html_equal expected, @body.build
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_should_be_empty_if_no_empty_caption
|
174
|
+
@body.empty_caption = nil
|
175
|
+
assert_html_equal '', @body.build
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_should_set_colspan_if_header_has_multiple_columns
|
179
|
+
@header.column :title
|
180
|
+
@header.column :author_name
|
181
|
+
|
182
|
+
expected = <<-end_eval
|
183
|
+
<tr class="no_content">
|
184
|
+
<td colspan="2">No matches found.</td>
|
185
|
+
</tr>
|
186
|
+
end_eval
|
187
|
+
assert_html_equal expected, @body.build
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
class BodyWithAlternatingEvenRowsTest < Test::Unit::TestCase
|
192
|
+
class Post
|
193
|
+
attr_accessor :title
|
194
|
+
|
195
|
+
def initialize(title)
|
196
|
+
@title = title
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def setup
|
201
|
+
@collection = [
|
202
|
+
Post.new('first'),
|
203
|
+
Post.new('second'),
|
204
|
+
Post.new('last')
|
205
|
+
]
|
206
|
+
@header = PluginAWeek::TableHelper::Header.new(@collection)
|
207
|
+
@header.column :title
|
208
|
+
|
209
|
+
@body = PluginAWeek::TableHelper::Body.new(@collection, @header)
|
210
|
+
@body.alternate_rows = :even
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_should_alternate_even_row
|
214
|
+
expected = <<-end_eval
|
215
|
+
<tr class="row alternate">
|
216
|
+
<td class="title">first</td>
|
217
|
+
</tr>
|
218
|
+
end_eval
|
219
|
+
assert_html_equal expected, @body.build_row(@collection.first)
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_should_not_alternate_odd_row
|
223
|
+
expected = <<-end_eval
|
224
|
+
<tr class="row">
|
225
|
+
<td class="title">second</td>
|
226
|
+
</tr>
|
227
|
+
end_eval
|
228
|
+
assert_html_equal expected, @body.build_row(@collection[1])
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
class BodyWithAlternatingOddRowsTest < Test::Unit::TestCase
|
233
|
+
class Post
|
234
|
+
attr_accessor :title
|
235
|
+
|
236
|
+
def initialize(title)
|
237
|
+
@title = title
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def setup
|
242
|
+
@collection = [
|
243
|
+
Post.new('first'),
|
244
|
+
Post.new('second'),
|
245
|
+
Post.new('last')
|
246
|
+
]
|
247
|
+
@header = PluginAWeek::TableHelper::Header.new(@collection)
|
248
|
+
@header.column :title
|
249
|
+
|
250
|
+
@body = PluginAWeek::TableHelper::Body.new(@collection, @header)
|
251
|
+
@body.alternate_rows = :odd
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_should_alternate_odd_row
|
255
|
+
expected = <<-end_eval
|
256
|
+
<tr class="row alternate">
|
257
|
+
<td class="title">second</td>
|
258
|
+
</tr>
|
259
|
+
end_eval
|
260
|
+
assert_html_equal expected, @body.build_row(@collection[1])
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_should_not_alternate_even_row
|
264
|
+
expected = <<-end_eval
|
265
|
+
<tr class="row">
|
266
|
+
<td class="title">first</td>
|
267
|
+
</tr>
|
268
|
+
end_eval
|
269
|
+
assert_html_equal expected, @body.build_row(@collection.first)
|
270
|
+
end
|
271
|
+
end
|
data/test/cell_test.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class CellByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@cell = PluginAWeek::TableHelper::Cell.new(:name)
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_have_a_class_name
|
9
|
+
assert_equal 'name', @cell[:class]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_use_humanized_class_name_for_content
|
13
|
+
assert_equal '<td class="name">Name</td>', @cell.html
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_create_a_data_cell
|
17
|
+
assert_equal '<td class="name">Name</td>', @cell.html
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class CellTest < Test::Unit::TestCase
|
22
|
+
def test_should_use_custom_content_if_specified
|
23
|
+
cell = PluginAWeek::TableHelper::Cell.new(:name, 'John Doe')
|
24
|
+
assert_equal '<td class="name">John Doe</td>', cell.html
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_include_custom_html_options
|
28
|
+
cell = PluginAWeek::TableHelper::Cell.new(:name, 'John Doe', {:float => 'left'})
|
29
|
+
assert_equal '<td class="name" float="left">John Doe</td>', cell.html
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_append_automated_class_name_if_class_already_specified
|
33
|
+
cell = PluginAWeek::TableHelper::Cell.new(:name, 'John Doe', {:class => 'selected'})
|
34
|
+
assert_equal 'name selected', cell[:class]
|
35
|
+
assert_equal '<td class="name selected">John Doe</td>', cell.html
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_raise_exception_if_content_type_is_invalid
|
39
|
+
assert_raise(ArgumentError) {PluginAWeek::TableHelper::Cell.new(:name).content_type = :invalid}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class CellWithHeaderContentType < Test::Unit::TestCase
|
44
|
+
def setup
|
45
|
+
@cell = PluginAWeek::TableHelper::Cell.new(:name)
|
46
|
+
@cell.content_type = :header
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_a_header_cell
|
50
|
+
assert_equal '<th class="name">Name</th>', @cell.html
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,254 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class CollectionTableByDefaultTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@table = PluginAWeek::TableHelper::CollectionTable.new([])
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_cellspacing_should_be_zero
|
9
|
+
assert_equal '0', @table[:cellspacing]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_cellpadding_should_be_zero
|
13
|
+
assert_equal '0', @table[:cellpadding]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_include_header_and_footer
|
17
|
+
html = @table.build do |header, body|
|
18
|
+
assert_instance_of PluginAWeek::TableHelper::Header, header
|
19
|
+
assert_instance_of PluginAWeek::TableHelper::Body, body
|
20
|
+
end
|
21
|
+
|
22
|
+
expected = <<-end_eval
|
23
|
+
<thead style="display: none;">
|
24
|
+
<tr></tr>
|
25
|
+
</thead>
|
26
|
+
<tbody>
|
27
|
+
<tr class="no_content">
|
28
|
+
<td>No matches found.</td>
|
29
|
+
</tr>
|
30
|
+
</tbody>
|
31
|
+
end_eval
|
32
|
+
assert_html_equal expected, html
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class CollectionTableTest < Test::Unit::TestCase
|
37
|
+
class Note
|
38
|
+
def self.column_names
|
39
|
+
['title', 'author_name']
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_accessor :title
|
43
|
+
|
44
|
+
def initialize(title)
|
45
|
+
@title = title
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class Post < Note
|
50
|
+
def self.column_names
|
51
|
+
['title']
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Reflection
|
56
|
+
def klass
|
57
|
+
Note
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class NoteCollection < Array
|
62
|
+
def proxy_reflection
|
63
|
+
Reflection.new
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def setup
|
68
|
+
@collection = [
|
69
|
+
Post.new('first'),
|
70
|
+
Post.new('second'),
|
71
|
+
Post.new('last')
|
72
|
+
]
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_raise_exception_if_invalid_option_specified
|
76
|
+
assert_raise(ArgumentError) {PluginAWeek::TableHelper::CollectionTable.new([], :invalid => true)}
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_should_only_include_body_if_no_header
|
80
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(@collection, :header => false)
|
81
|
+
html = table.build do |body|
|
82
|
+
assert_instance_of PluginAWeek::TableHelper::Body, body
|
83
|
+
end
|
84
|
+
|
85
|
+
expected = <<-end_eval
|
86
|
+
<tbody>
|
87
|
+
<tr class="row">
|
88
|
+
<td class="title">first</td>
|
89
|
+
</tr>
|
90
|
+
<tr class="row">
|
91
|
+
<td class="title">second</td>
|
92
|
+
</tr>
|
93
|
+
<tr class="row">
|
94
|
+
<td class="title">last</td>
|
95
|
+
</tr>
|
96
|
+
</tbody>
|
97
|
+
end_eval
|
98
|
+
assert_html_equal expected, html
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_include_body_and_footer_if_no_header_and_footer
|
102
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(@collection, :header => false, :footer => true)
|
103
|
+
html = table.build do |body, footer|
|
104
|
+
assert_instance_of PluginAWeek::TableHelper::Body, body
|
105
|
+
assert_instance_of PluginAWeek::TableHelper::Footer, footer
|
106
|
+
end
|
107
|
+
|
108
|
+
expected = <<-end_eval
|
109
|
+
<tbody>
|
110
|
+
<tr class="row">
|
111
|
+
<td class="title">first</td>
|
112
|
+
</tr>
|
113
|
+
<tr class="row">
|
114
|
+
<td class="title">second</td>
|
115
|
+
</tr>
|
116
|
+
<tr class="row">
|
117
|
+
<td class="title">last</td>
|
118
|
+
</tr>
|
119
|
+
</tbody>
|
120
|
+
<tfoot>
|
121
|
+
<tr>
|
122
|
+
</tr>
|
123
|
+
</tfoot>
|
124
|
+
end_eval
|
125
|
+
assert_html_equal expected, html
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_should_include_header_body_and_footer_if_footer
|
129
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(@collection, :footer => true)
|
130
|
+
html = table.build do |header, body, footer|
|
131
|
+
assert_instance_of PluginAWeek::TableHelper::Header, header
|
132
|
+
assert_instance_of PluginAWeek::TableHelper::Body, body
|
133
|
+
assert_instance_of PluginAWeek::TableHelper::Footer, footer
|
134
|
+
end
|
135
|
+
|
136
|
+
expected = <<-end_eval
|
137
|
+
<thead>
|
138
|
+
<tr>
|
139
|
+
<th class="title" scope="col">Title</th>
|
140
|
+
</tr>
|
141
|
+
</thead>
|
142
|
+
<tbody>
|
143
|
+
<tr class="row">
|
144
|
+
<td class="title">first</td>
|
145
|
+
</tr>
|
146
|
+
<tr class="row">
|
147
|
+
<td class="title">second</td>
|
148
|
+
</tr>
|
149
|
+
<tr class="row">
|
150
|
+
<td class="title">last</td>
|
151
|
+
</tr>
|
152
|
+
</tbody>
|
153
|
+
<tfoot>
|
154
|
+
<tr>
|
155
|
+
</tr>
|
156
|
+
</tfoot>
|
157
|
+
end_eval
|
158
|
+
assert_html_equal expected, html
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_should_use_custom_class_to_generate_columns
|
162
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(@collection, :class => Note)
|
163
|
+
html = table.build
|
164
|
+
|
165
|
+
expected = <<-end_eval
|
166
|
+
<thead>
|
167
|
+
<tr>
|
168
|
+
<th class="title" scope="col">Title</th>
|
169
|
+
<th class="author_name" scope="col">Author Name</th>
|
170
|
+
</tr>
|
171
|
+
</thead>
|
172
|
+
<tbody>
|
173
|
+
<tr class="row">
|
174
|
+
<td class="title">first</td>
|
175
|
+
<td class="author_name empty"></td>
|
176
|
+
</tr>
|
177
|
+
<tr class="row">
|
178
|
+
<td class="title">second</td>
|
179
|
+
<td class="author_name empty"></td>
|
180
|
+
</tr>
|
181
|
+
<tr class="row">
|
182
|
+
<td class="title">last</td>
|
183
|
+
<td class="author_name empty"></td>
|
184
|
+
</tr>
|
185
|
+
</tbody>
|
186
|
+
end_eval
|
187
|
+
assert_html_equal expected, html
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_should_use_class_from_first_element_to_generate_columns
|
191
|
+
@collection.insert(0, Note.new('zeroth'))
|
192
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(@collection)
|
193
|
+
html = table.build
|
194
|
+
|
195
|
+
expected = <<-end_eval
|
196
|
+
<thead>
|
197
|
+
<tr>
|
198
|
+
<th class="title" scope="col">Title</th>
|
199
|
+
<th class="author_name" scope="col">Author Name</th>
|
200
|
+
</tr>
|
201
|
+
</thead>
|
202
|
+
<tbody>
|
203
|
+
<tr class="row">
|
204
|
+
<td class="title">zeroth</td>
|
205
|
+
<td class="author_name empty"></td>
|
206
|
+
</tr>
|
207
|
+
<tr class="row">
|
208
|
+
<td class="title">first</td>
|
209
|
+
<td class="author_name empty"></td>
|
210
|
+
</tr>
|
211
|
+
<tr class="row">
|
212
|
+
<td class="title">second</td>
|
213
|
+
<td class="author_name empty"></td>
|
214
|
+
</tr>
|
215
|
+
<tr class="row">
|
216
|
+
<td class="title">last</td>
|
217
|
+
<td class="author_name empty"></td>
|
218
|
+
</tr>
|
219
|
+
</tbody>
|
220
|
+
end_eval
|
221
|
+
assert_html_equal expected, html
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_should_use_class_from_proxy_reflection_to_generate_columns
|
225
|
+
collection = NoteCollection.new
|
226
|
+
collection.concat(@collection)
|
227
|
+
table = PluginAWeek::TableHelper::CollectionTable.new(collection)
|
228
|
+
html = table.build
|
229
|
+
|
230
|
+
expected = <<-end_eval
|
231
|
+
<thead>
|
232
|
+
<tr>
|
233
|
+
<th class="title" scope="col">Title</th>
|
234
|
+
<th class="author_name" scope="col">Author Name</th>
|
235
|
+
</tr>
|
236
|
+
</thead>
|
237
|
+
<tbody>
|
238
|
+
<tr class="row">
|
239
|
+
<td class="title">first</td>
|
240
|
+
<td class="author_name empty"></td>
|
241
|
+
</tr>
|
242
|
+
<tr class="row">
|
243
|
+
<td class="title">second</td>
|
244
|
+
<td class="author_name empty"></td>
|
245
|
+
</tr>
|
246
|
+
<tr class="row">
|
247
|
+
<td class="title">last</td>
|
248
|
+
<td class="author_name empty"></td>
|
249
|
+
</tr>
|
250
|
+
</tbody>
|
251
|
+
end_eval
|
252
|
+
assert_html_equal expected, html
|
253
|
+
end
|
254
|
+
end
|