gridify 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ sqlite3:
2
+ :adapter: sqlite3
3
+ :database: vendor/plugins/gridify/spec/db/gridify.sqlite3.db
@@ -0,0 +1,7 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :chickens, :force => true do |t|
3
+ t.column :name, :string
4
+ t.column :age, :integer
5
+ t.column :created_at, :datetime
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid column model" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, options )
8
+ end
9
+
10
+ #------------------------------
11
+ it "should build for all attributes" do
12
+ new_grid
13
+ names = @grid.columns.map {|col| col.name}
14
+ names.should == ['id', 'name', 'age', 'created_at']
15
+ end
16
+
17
+ it "should handle :except option" do
18
+ new_grid :except => 'age'
19
+ names = @grid.columns.map {|col| col.name}
20
+ names.should_not include('age')
21
+ end
22
+
23
+ it "should handle :only option" do
24
+ new_grid :only => ['id', 'age']
25
+ names = @grid.columns.map {|col| col.name}
26
+ names.should_not include('name')
27
+ names.should include('age')
28
+ end
29
+
30
+ it "should support searchable per model" do
31
+ new_grid :searchable => false
32
+ @grid.columns.each do |col|
33
+ col.to_json.should include('"search": false')
34
+ end
35
+ end
36
+
37
+ it "should support editable per model" do
38
+ new_grid :editable => true
39
+ @grid.columns.each do |col|
40
+ unless col.key
41
+ col.to_json.should include('"editable": true')
42
+ end
43
+ end
44
+ end
45
+
46
+ it "should support sortable per model" do
47
+ new_grid :sortable => false
48
+ @grid.columns.each do |col|
49
+ col.to_json.should include('"sortable": false')
50
+ end
51
+ end
52
+
53
+ #it "should support default column widths"
54
+
55
+ it 'should get column_names' do
56
+ new_grid
57
+ @grid.column_names.should == ['Id', 'Name', 'Age', 'Created At']
58
+ end
59
+
60
+ it "should generate column_model" do
61
+ new_grid
62
+ @grid.columns[0].properties.should == {:name => "id", :label => "Id", :index => "id", :align => "right", :sorttype => "integer", :hidden => true}
63
+ @grid.columns[1].properties.should == {:name => "name", :label => "Name", :index => "name", :sorttype => "text" }
64
+ @grid.columns[2].properties.should == {:name => "age", :label => "Age", :index => "age", :align => "right", :sorttype => "integer"}
65
+ @grid.columns[3].properties.should == {:name => "created_at", :label => "Created At", :index => "created_at", :sorttype => "date", :formatter=>"date", :formatoptions=>{:newformat=>"FullDateTime", :srcformat=>"UniversalSortableDateTime"} }
66
+ end
67
+
68
+ it "should set current visiblity"
69
+ it "should set current width"
70
+ it "should set current column order"
71
+
72
+ end
@@ -0,0 +1,192 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid finder" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, options )
8
+ end
9
+
10
+ def params( p={} )
11
+ # this is like what we get in a request for grid with all default options
12
+ {
13
+ "controller"=>"chickens",
14
+ "action"=>"index",
15
+ "grid"=>"grid",
16
+ "nd"=>"1261595921149",
17
+ "page"=>"1",
18
+ "rows"=>"-1",
19
+ "sidx"=>"",
20
+ "sord"=>"asc",
21
+ "_search"=>"false"
22
+ }.merge( p )
23
+ end
24
+
25
+ describe "params" do
26
+ it "should process sort" do
27
+ new_grid :sortable => true
28
+ @grid.update_from_params params(
29
+ "sidx"=>"age",
30
+ "sord"=>"desc"
31
+ )
32
+ @grid.sort_by.should == 'age'
33
+ @grid.sort_order.should == 'desc'
34
+ end
35
+
36
+ it "should process page" do
37
+ new_grid :pager => true
38
+ @grid.update_from_params params(
39
+ "page"=>"3",
40
+ "rows"=>"25"
41
+ )
42
+ @grid.current_page.should == 3
43
+ @grid.rows_per_page.should == 25
44
+ end
45
+
46
+ it "should process simple search" do
47
+ new_grid :search_button => true
48
+ @grid.update_from_params params(
49
+ "_search"=>"true",
50
+ "searchField"=>"name",
51
+ "searchOper"=>"cn",
52
+ "searchString"=>"a"
53
+ )
54
+ @grid.search_rules.should == [{ "field" => "name", "op" => "cn", "data" => "a"}]
55
+ end
56
+
57
+ it "should process multiple search" do
58
+ #debugger
59
+ new_grid :search_advanced => true
60
+ @grid.update_from_params params(
61
+ "_search"=>"true",
62
+ "filters"=> %Q^ {
63
+ "groupOp":"OR",
64
+ "rules":[
65
+ {"field":"name","op":"cn","data":"a"},
66
+ {"field":"age","op":"eq","data":"12"}
67
+ ]}^
68
+ )
69
+ @grid.search_rules.should == [
70
+ { "field" => "name", "op" => "cn", "data" => "a"},
71
+ { "field" => "age", "op" => "eq", "data" => "12"}
72
+ ]
73
+ end
74
+
75
+ it "should process toolbar search" do
76
+ new_grid :search_toolbar => true
77
+ @grid.update_from_params params(
78
+ "_search"=>"true",
79
+ "name"=>"b",
80
+ "age" => "1"
81
+ )
82
+ @grid.search_rules.should == [
83
+ { "field" => "name", "op" => "cn", "data" => "b"},
84
+ { "field" => "age", "op" => "cn", "data" => "1"}
85
+ ]
86
+ end
87
+
88
+ end
89
+
90
+ describe "find" do
91
+ before :each do
92
+ Chicken.stub!(:find)
93
+ end
94
+
95
+ it "should find" do
96
+ new_grid
97
+ Chicken.should_receive(:find).with( :all, {} )
98
+ @grid.find params
99
+ end
100
+
101
+ it "should find with paging" do
102
+ new_grid :pager => true
103
+ Chicken.should_receive(:find).with( :all, { :limit => 25, :offset => 50 })
104
+ @grid.find params( "page"=>"3", "rows"=>"25" )
105
+ end
106
+
107
+ it "should find with sort" do
108
+ new_grid :sortable => true
109
+ Chicken.should_receive(:find).with( :all, { :order => 'age desc' })
110
+ @grid.find params( "sidx"=>"age", "sord"=>"desc" )
111
+ end
112
+
113
+ it "should find with search" do
114
+ # just do toolbar search, others tested above anyway
115
+ new_grid :search_toolbar => true
116
+ Chicken.should_receive(:find).with( :all, { :conditions => ["name LIKE ?", "%b%"] })
117
+ @grid.find params( "_search"=>true, "name"=>"b" )
118
+ end
119
+ end
120
+
121
+ describe "encode" do
122
+ before :each do
123
+ @records = [
124
+ Chicken.create( :name => 'Achick', :age => 10 ),
125
+ Chicken.create( :name => 'Bchick', :age => 20 )
126
+ ]
127
+ end
128
+
129
+ it "should encode xml" do
130
+ new_grid :pager => true, :current_page => 1, :data_type => :xml
131
+ xml = @grid.encode_records @records
132
+ xml.should == %Q^<?xml version="1.0" encoding="UTF-8"?>
133
+ <chickens>
134
+ <page>1</page>
135
+ <total_pages>1</total_pages>
136
+ <total_records>2</total_records>
137
+ <chicken>
138
+ <age>10</age>
139
+ <created_at>#{@records[0].created_at.iso8601}</created_at>
140
+ <id>1</id>
141
+ <name>Achick</name>
142
+ </chicken>
143
+ <chicken>
144
+ <age>20</age>
145
+ <created_at>#{@records[1].created_at.iso8601}</created_at>
146
+ <id>2</id>
147
+ <name>Bchick</name>
148
+ </chicken>
149
+ </chickens>
150
+ ^
151
+ end
152
+
153
+ it "should encode json" do
154
+ new_grid :pager => true, :current_page => 1, :data_type => :json
155
+ json = @grid.encode_records @records
156
+ # json.should == %Q^{"total_records": 2, "page": 1, \
157
+ # "chickens": [\
158
+ # {"chicken": {"name": "Achick", "created_at": "#{@records[0].created_at.iso8601}", "id": 1, "age": 10}}, \
159
+ # {"chicken": {"name": "Bchick", "created_at": "#{@records[1].created_at.iso8601}", "id": 2, "age": 20}}\
160
+ # ], \
161
+ # "total_pages": 1}^
162
+ json.should include('"total_records": 2')
163
+ json.should include('"page": 1')
164
+ json.should include('"total_pages": 1')
165
+ json.should include(
166
+ %Q^"chickens": [\
167
+ {"name": "Achick", "created_at": "#{@records[0].created_at.iso8601}", "id": 1, "age": 10}, \
168
+ {"name": "Bchick", "created_at": "#{@records[1].created_at.iso8601}", "id": 2, "age": 20}\
169
+ ]^)
170
+ end
171
+
172
+ end
173
+
174
+
175
+ describe "member_params" do
176
+ it "should collect attributes" do
177
+ new_grid
178
+ p = params(
179
+ "name" => 'Aaa',
180
+ "age" => '11'
181
+ )
182
+ @grid.member_params(p).should == { "name" => 'Aaa', "age" => '11'}
183
+ end
184
+ end
185
+
186
+ #describe "create"
187
+
188
+ #describe "update"
189
+
190
+ #describe "delete"
191
+
192
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ include Gridify
4
+
5
+ describe 'Grid' do
6
+
7
+ it "should create with default name :grid" do
8
+ grid = Grid.new( Chicken )
9
+ grid.name.should == :grid
10
+ end
11
+
12
+ it "should create with given name" do
13
+ grid = Grid.new( Chicken, :mygrid )
14
+ grid.name.should == :mygrid
15
+ end
16
+
17
+ it "should block eval" do
18
+ grid = Grid.new Chicken do |g|
19
+ g.width = 450
20
+ end
21
+ grid.width.should == 450
22
+ end
23
+
24
+ describe "column method" do
25
+ it "should modify existing columns"
26
+
27
+ it "should create columns" do
28
+ grid = Grid.new Chicken do |g|
29
+ g.column 'foo', :label => "FOOBAR"
30
+ end
31
+ col = grid.columns_hash['foo']
32
+ col.should_not be_nil
33
+ col.name.should == 'foo'
34
+ col.label.should == 'FOOBAR'
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,423 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ include Gridify
3
+
4
+ describe "Grid view" do
5
+
6
+ def new_grid( options={} )
7
+ @grid = Grid.new( Chicken, { :build_model => false }.merge(options) )
8
+ end
9
+
10
+ #------------------------------
11
+ describe 'default Grid view' do
12
+ before :each do
13
+ new_grid
14
+ end
15
+
16
+ describe "to_json" do
17
+ it "should generate default json" do
18
+ json = @grid.to_json
19
+ @grid.to_json.should include('"gridview": true')
20
+ @grid.to_json.should include('"autowidth": true')
21
+ @grid.to_json.should include('"forceFit": true')
22
+ @grid.to_json.should include('"hoverrows": false')
23
+ @grid.to_json.should include('"url": "/chickens"')
24
+ @grid.to_json.should include('"restful": true')
25
+ end
26
+
27
+ it "should extract embedded javascript:" do
28
+ json = @grid.to_json
29
+ @grid.to_json.should include('"resizeStop": gridify_fluid_recalc_width')
30
+ @grid.to_json.should include('"beforeSelectRow": function(){ false; }')
31
+ end
32
+ end
33
+
34
+ describe "to_javascript" do
35
+ it "should generate javascript" do
36
+ @grid.to_javascript.should include('<script type="text/javascript">')
37
+ @grid.to_javascript.should include('jQuery(document).ready(function(){')
38
+ @grid.to_javascript.should include('jQuery("#chickens_grid").jqGrid')
39
+ end
40
+ it "should generate javascript without script tag" do
41
+ @grid.to_javascript(:script => false).should_not include('<script type="text/javascript">')
42
+ end
43
+ it "should generate javascript without document ready" do
44
+ @grid.to_javascript(:ready => false).should_not include('jQuery(document).ready(function(){')
45
+ end
46
+ it "should generate table_to_grid" do
47
+ @grid = Grid.new( Chicken, :table_to_grid => true )
48
+ @grid.to_javascript.should include('tableToGrid("#chickens_grid",')
49
+ end
50
+ end
51
+
52
+ describe "to_s" do
53
+ it "should be same as to_javascript" do
54
+ @grid.should_receive(:to_javascript)
55
+ @grid.to_s
56
+ end
57
+ end
58
+
59
+ describe "dom_id" do
60
+ it "should default to resource_name" do
61
+ @grid.dom_id.should == "chickens_grid"
62
+ end
63
+ end
64
+ end
65
+
66
+ #------------------------------
67
+ describe "native jqgrid_options" do
68
+ it "should override any other set options" do
69
+ new_grid :jqgrid_options => { :gridview => false }
70
+ @grid.to_json.should include('"gridview": false')
71
+ end
72
+
73
+ it "should set options not handled by Gridify" do
74
+ new_grid :jqgrid_options => { :direction => 'rtl' }
75
+ @grid.to_json.should include('"direction": "rtl"')
76
+ end
77
+ end
78
+
79
+ #------------------------------
80
+ describe "width and height options" do
81
+
82
+ it "should be :width_fit => :fluid by default" do
83
+ new_grid
84
+ @grid.width_fit.should == :fluid
85
+ end
86
+
87
+ it "should set :width_fit => :fluid" do
88
+ new_grid :width_fit => :fluid
89
+ @grid.to_json.should include('"autowidth": true')
90
+ @grid.to_json.should include('"forceFit": true')
91
+ # recalc width after resizing columns
92
+ @grid.to_json.should include('"resizeStop": gridify_fluid_recalc_width')
93
+ # tag the grid as fluid for the gridify_fluid_recalc_width function
94
+ @grid.to_javascript.should include('.addClass("fluid")' )
95
+ # include the recalc function
96
+ @grid.to_javascript.should include('function gridify_fluid_recalc_width(){')
97
+ end
98
+
99
+ it "should set :width in pixels" do
100
+ new_grid :width => 400, :width_fit => :scroll
101
+ @grid.to_json.should include('"width": 400')
102
+ end
103
+
104
+ it "should set :width_fit => :scroll" do
105
+ new_grid :width_fit => :scroll
106
+ @grid.to_json.should include('"shrinkToFit": false')
107
+ end
108
+
109
+ it "should set :width_fit => :fitted" do
110
+ new_grid :width_fit => :fitted
111
+ @grid.to_json.should include('"forceFit": true')
112
+ end
113
+
114
+ it "should set height in pixels or :auto" do
115
+ new_grid :height => 400
116
+ @grid.to_json.should include('"height": 400')
117
+
118
+ new_grid :height => :auto
119
+ @grid.to_json.should include('"height": "auto"')
120
+ end
121
+
122
+ it "should set :resizable => true width and height" do
123
+ new_grid :width_fit => :fitted, :resizable => true
124
+ # min width and height
125
+ @grid.resizable.should include( "minWidth" => 150, "minHeight" => 80 )
126
+ # set via method
127
+ @grid.to_javascript.should include(".jqGrid('gridResize', {")
128
+ end
129
+
130
+ it "should set resizable height only when is fluid" do
131
+ new_grid :width_fit => :fluid, :resizable => true
132
+ @grid.resizable.should include( "handles" => 's' )
133
+ end
134
+
135
+ it "should set resizable => new minimums" do
136
+ new_grid :resizable => {"minWidth" => 200, "minHeight" => 250}
137
+ # min width and height
138
+ @grid.resizable.should include( "minWidth" => 200, "minHeight" => 250 )
139
+ end
140
+
141
+ end
142
+
143
+ #------------------------------
144
+ describe "header options" do
145
+ it "should set default title to model class pluralized" do
146
+ new_grid :title => true
147
+ @grid.to_json.should include('"caption": "Chickens"')
148
+ end
149
+
150
+ it "should set title given" do
151
+ new_grid :title => "My Little Chickens"
152
+ @grid.to_json.should include('"caption": "My Little Chickens"')
153
+ end
154
+
155
+ it "should set title blank when false and theres a header" do
156
+ new_grid :collapsible => true, :title => false
157
+ @grid.to_json.should include('"caption": "&nbsp;"')
158
+ end
159
+
160
+ it "should set not collapsible by default" do
161
+ new_grid :title => true
162
+ @grid.to_json.should include('"hidegrid": false')
163
+ end
164
+
165
+ it "should set collapsible" do
166
+ new_grid :collapsible => true
167
+ @grid.to_json.should_not include('"hidegrid": false') #default is true
168
+ end
169
+
170
+ it "should set collapsed state" do
171
+ new_grid :collapsed => true
172
+ @grid.to_json.should include('"hiddengrid": true')
173
+ end
174
+ end
175
+
176
+ #------------------------------
177
+ describe "pager options" do
178
+
179
+ it "should set pager with id {dom_id}_pager" do
180
+ new_grid :pager => true
181
+ @grid.to_json.should include('"pager": "#chickens_grid_pager"')
182
+ end
183
+
184
+ it "should set pager with id given" do
185
+ new_grid :pager => 'other_pgr'
186
+ @grid.to_json.should include('"pager": "#other_pgr"')
187
+ end
188
+
189
+ it "should set paging_choices default" do
190
+ new_grid :pager => true
191
+ @grid.to_json.should include('"rowList": [10, 25, 50, 100]')
192
+ end
193
+
194
+ it "should set paging_choices given" do
195
+ new_grid :pager => true, :paging_choices => [25, 50, 150]
196
+ @grid.to_json.should include('"rowList": [25, 50, 150]')
197
+ end
198
+
199
+ it "should set to hide paging_controls when false" do
200
+ new_grid :pager => true, :paging_controls => false
201
+ @grid.to_json.should include('"rowList": []')
202
+ @grid.to_json.should include('"pgbuttons": false')
203
+ @grid.to_json.should include('"pginput": false')
204
+ end
205
+
206
+ it "should override paging_controls when given" do
207
+ new_grid :pager => true, :paging_controls => { :pgbuttons => false }
208
+ @grid.to_json.should include('"pgbuttons": false')
209
+ @grid.to_json.should_not include('"pginput":') #to assert not like paging_controls => false
210
+ end
211
+
212
+ it "should display records count text" do
213
+ new_grid :pager => true
214
+ @grid.to_json.should include('"viewrecords": true')
215
+ end
216
+
217
+ it "should not display page number when paging_controls false" do
218
+ new_grid :pager => true, :paging_controls => false
219
+ @grid.to_json.should include('"recordtext": "{2} records"')
220
+ end
221
+ end
222
+
223
+ #------------------------------
224
+ describe "columns arranger" do
225
+ it "should set :arranger => :sortable to allow sortable with mouse" do
226
+ new_grid :arranger => :sortable
227
+ @grid.to_json.should include('"sortable": true')
228
+ end
229
+
230
+ it "should set :arranger => :hide_show a pager button for setColumns" do
231
+ new_grid :arranger => :hide_show
232
+ @grid.to_javascript.should include("navButtonAdd")
233
+ @grid.to_javascript.should include("setColumns")
234
+ # with this, we'll assume the actual js is there
235
+ end
236
+
237
+ it "should set :arranger => [:sortable, :hide_show]" do
238
+ new_grid :arranger => [:sortable, :hide_show]
239
+ @grid.to_json.should include('"sortable": true')
240
+ @grid.to_javascript.should include("navButtonAdd")
241
+ @grid.to_javascript.should include("setColumns")
242
+ end
243
+
244
+ it "should set :arranger => :chooser" do
245
+ new_grid :arranger => :chooser
246
+ @grid.to_javascript.should include("navButtonAdd")
247
+ @grid.to_javascript.should include("remapColumns")
248
+ # with this, we'll assume the actual js is there
249
+ end
250
+
251
+ it "should set jqGrid native options when hash values" do
252
+ new_grid :arranger => {:hide_show => {:title => "Use checkbox for column visiblity"}}
253
+ @grid.to_javascript.should include('"title": "Use checkbox for column visiblity"') #not a wonderful test but something
254
+ end
255
+ end
256
+
257
+ #------------------------------
258
+ describe "rows" do
259
+ it "should set alt_rows => true with default class" do
260
+ new_grid :alt_rows => true
261
+ @grid.to_json.should include('"altrows": true')
262
+ end
263
+
264
+ it "should set alt_rows => css class" do
265
+ new_grid :alt_rows => 'odd'
266
+ @grid.to_json.should include('"altrows": true')
267
+ @grid.to_json.should include('"altclass": "odd"')
268
+ end
269
+
270
+ it "should set row_numbers => true with default width" do
271
+ new_grid :row_numbers => true
272
+ @grid.to_json.should include('"rowNumbers": true')
273
+ end
274
+
275
+ it "should set row_numbers => nn to set width" do
276
+ new_grid :row_numbers => 24
277
+ @grid.to_json.should include('"rowNumbers": true')
278
+ @grid.to_json.should include('"rownumWidth": 24')
279
+ end
280
+
281
+ it "should set select_rows => false by default" do
282
+ new_grid
283
+ @grid.select_rows.should be_nil
284
+ end
285
+
286
+ it "should set select_rows => true when pager buttons for show, edit, or delete enabled"
287
+
288
+ it "should set select_rows => javascript"
289
+
290
+
291
+ end
292
+ #------------------------------
293
+ describe "nav buttons" do
294
+ it "edit_button => true with default action parameters" do
295
+ new_grid :pager => true, :edit_button => true
296
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
297
+ @grid.to_javascript.should include('"edit": true')
298
+ #:reloadAfterSubmit => false, :closeAfterEdit => true
299
+ end
300
+
301
+ it "add_button => true with default action parameters" do
302
+ new_grid :pager => true, :add_button => true
303
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
304
+ @grid.to_javascript.should include('"add": true')
305
+ #:reloadAfterSubmit => false, :closeAfterEdit => true
306
+ end
307
+
308
+ it "delete_button => true with default action parameters" do
309
+ new_grid :pager => true, :delete_button => true
310
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
311
+ @grid.to_javascript.should include('"del": true')
312
+ #:reloadAfterSubmit => false
313
+ end
314
+
315
+ it "search_button => true with default action parameters" do
316
+ new_grid :pager => true, :search_button => true
317
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
318
+ @grid.to_javascript.should include('"search": true')
319
+ end
320
+
321
+ it "view_button => true with default action parameters" do
322
+ new_grid :pager => true, :view_button => true
323
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
324
+ @grid.to_javascript.should include('"view": true')
325
+ end
326
+ # it "view_button => " do
327
+ # new_grid :pager => true, :show_button => {}
328
+ # @grid.to_json.should include('.navGrid("#chicken_grid_pager"')
329
+ # @grid.to_json.should include('view:true')
330
+ # end
331
+
332
+ it "refresh_button" do
333
+ new_grid :pager => true, :refresh_button => true
334
+ @grid.to_javascript.should include(".navGrid('#chickens_grid_pager'")
335
+ @grid.to_javascript.should include('"refresh": true')
336
+ end
337
+ end
338
+
339
+ #------------------------------
340
+ describe "search" do
341
+ it "should set search_toolbar" do
342
+ new_grid :search_toolbar => true
343
+ @grid.to_javascript.should include("filterToolbar")
344
+ # test lacks details
345
+ end
346
+ end
347
+
348
+ #------------------------------
349
+ describe "data" do
350
+ it "should set url to REST route based on resource" do
351
+ new_grid
352
+ @grid.to_json.should include('"url": "/chickens"')
353
+ end
354
+
355
+ it "should enable restful requests" do
356
+ new_grid
357
+ @grid.to_json.should include('"restful": true')
358
+ end
359
+
360
+ it "should set data_type" do
361
+ new_grid :data_type => :json
362
+ @grid.to_json.should include('"datatype": "json"')
363
+ end
364
+
365
+ it "should set data_format" do
366
+ new_grid :data_format => {:root => 'ducks', :page => 'ducks>page', :total => 'ducks>total_pages', :records => 'ducks>total_records', :row => 'duck', :repeatitems => :false, :id => :id}
367
+
368
+ #@grid.to_json.should include('"xmlReader": {"records": "ducks>total_records", "row": "duck", "repeatitems": "false", "root": "ducks", "page": "ducks>page", "id": "id", "total": "ducks>total_pages"}')
369
+ @grid.to_json.should include('xmlReader')
370
+ end
371
+
372
+ it "should omit data_format when false" do
373
+ new_grid :data_format => false
374
+ @grid.to_json.should_not include('xmlReader')
375
+ end
376
+
377
+ it "should set sort_by for next request" do
378
+ new_grid :sort_by => :body
379
+ @grid.to_json.should include('"sortname": "body"')
380
+ end
381
+
382
+ it "should set sort_order direction for next request" do
383
+ new_grid :sort_by => :body, :sort_order => :desc
384
+ @grid.to_json.should include('"sortorder": "desc"')
385
+ end
386
+
387
+ describe "rows_per_page" do
388
+ it "should set rows_per_page for next request" do
389
+ new_grid :pager => true, :rows_per_page => 18
390
+ @grid.to_json.should include('"rowNum": 18')
391
+ end
392
+ it "should set rows_per_page to false for no paging" do
393
+ new_grid :pager => true, :rows_per_page => false
394
+ @grid.to_json.should include('"rowNum": -1')
395
+ end
396
+ it "should set rows_per_page to false when no pager" do
397
+ new_grid
398
+ @grid.to_json.should include('"rowNum": -1')
399
+ end
400
+ it "should set rows_per_page to false when no pager controls" do
401
+ new_grid :pager => true, :paging_controls => false
402
+ @grid.to_json.should include('"rowNum": -1')
403
+ end
404
+ end
405
+
406
+ it "should set load_once" do
407
+ new_grid :load_once => true
408
+ @grid.to_json.should include('"loadonce": true')
409
+ end
410
+
411
+ it "should include grid name in requests" do
412
+ new_grid
413
+ @grid.to_json.should include('"postData": {"grid": "grid"}')
414
+ mygrid = Grid.new( Chicken, :mygrid )
415
+ mygrid.to_json.should include('"postData": {"grid": "mygrid"}')
416
+ end
417
+
418
+ it "should set col_names"
419
+ it "should set col_model"
420
+ end
421
+ #------------------------------
422
+
423
+ end