netzke-basepack 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +17 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -0
- data/TODO.rdoc +1 -4
- data/features/form_panel.feature +2 -1
- data/features/grid_panel.feature +134 -5
- data/features/nested_attributes.feature +4 -1
- data/features/paging_form_panel.feature +41 -0
- data/features/search_in_grid.feature +20 -7
- data/features/step_definitions/form_panel_steps.rb +35 -0
- data/features/step_definitions/generic_steps.rb +20 -1
- data/features/step_definitions/grid_panel_steps.rb +63 -0
- data/features/support/env.rb +4 -0
- data/features/validations_in_grid.feature +13 -0
- data/features/virtual_attributes.feature +5 -9
- data/javascripts/basepack.js +21 -650
- data/javascripts/datetimefield.js +24 -0
- data/lib/generators/netzke/basepack_generator.rb +10 -0
- data/{generators/netzke_basepack/templates/public_assets → lib/generators/netzke/templates/assets}/ts-checkbox.gif +0 -0
- data/{generators/netzke_basepack → lib/generators/netzke}/templates/create_netzke_field_lists.rb +0 -0
- data/lib/netzke-basepack.rb +3 -41
- data/lib/netzke/active_record/attributes.rb +17 -21
- data/lib/netzke/basepack.rb +6 -1
- data/lib/netzke/basepack/data_accessor.rb +166 -0
- data/lib/netzke/basepack/form_panel.rb +69 -20
- data/lib/netzke/basepack/form_panel/fields.rb +15 -17
- data/lib/netzke/basepack/form_panel/javascripts/comma_list_cbg.js +7 -0
- data/lib/netzke/basepack/form_panel/javascripts/display_mode.js +6 -0
- data/lib/netzke/basepack/form_panel/javascripts/{main.js → form_panel.js} +42 -8
- data/lib/netzke/basepack/form_panel/javascripts/n_radio_group.js +24 -7
- data/lib/netzke/basepack/form_panel/javascripts/readonly_mode.js +52 -0
- data/lib/netzke/basepack/form_panel/services.rb +28 -2
- data/lib/netzke/basepack/form_panel/stylesheets/readonly_mode.css +14 -0
- data/lib/netzke/basepack/grid_panel.rb +151 -181
- data/lib/netzke/basepack/grid_panel/columns.rb +122 -84
- data/lib/netzke/basepack/grid_panel/javascripts/advanced_search.js +22 -27
- data/lib/netzke/basepack/grid_panel/javascripts/{main.js → grid_panel.js} +182 -108
- data/lib/netzke/basepack/grid_panel/record_form_window.rb +7 -2
- data/lib/netzke/basepack/grid_panel/services.rb +58 -39
- data/lib/netzke/basepack/paging_form_panel.rb +86 -25
- data/lib/netzke/basepack/query_builder.rb +105 -0
- data/lib/netzke/basepack/query_builder/javascripts/query_builder.js +140 -0
- data/lib/netzke/basepack/search_panel.rb +61 -44
- data/lib/netzke/basepack/search_panel/javascripts/condition_field.js +153 -0
- data/lib/netzke/basepack/search_panel/javascripts/search_panel.js +64 -0
- data/lib/netzke/basepack/search_window.rb +64 -0
- data/lib/netzke/basepack/simple_app.rb +1 -1
- data/lib/netzke/basepack/simple_app/javascripts/{main.js → simple_app.js} +0 -0
- data/lib/netzke/basepack/tab_panel.rb +1 -2
- data/lib/netzke/basepack/tab_panel/javascripts/{main.js → tab_panel.js} +0 -0
- data/lib/netzke/basepack/version.rb +1 -1
- data/locales/en.yml +71 -4
- data/netzke-basepack.gemspec +47 -22
- data/spec/active_record/attributes_spec.rb +6 -6
- data/spec/components/form_panel_spec.rb +2 -13
- data/stylesheets/datetimefield.css +54 -0
- data/test/rails_app/Gemfile +3 -3
- data/test/rails_app/Gemfile.lock +67 -57
- data/test/rails_app/README +1 -256
- data/test/rails_app/app/components/book_form.rb +1 -3
- data/test/rails_app/app/components/book_form_with_custom_fields.rb +20 -0
- data/test/rails_app/app/components/book_form_with_nested_attributes.rb +18 -0
- data/test/rails_app/app/components/book_grid.rb +3 -1
- data/test/rails_app/app/components/book_grid_loader.rb +24 -0
- data/test/rails_app/app/components/book_grid_with_custom_columns.rb +28 -0
- data/test/rails_app/app/components/book_grid_with_default_values.rb +1 -1
- data/test/rails_app/app/components/book_grid_with_virtual_attributes.rb +0 -1
- data/test/rails_app/app/components/book_paging_form_panel.rb +3 -2
- data/test/rails_app/app/components/book_presentation.rb +3 -3
- data/test/rails_app/app/components/book_query_builder.rb +8 -0
- data/test/rails_app/app/components/book_search_panel.rb +5 -0
- data/test/rails_app/app/components/book_search_panel/javascripts/i18n_de.js +6 -0
- data/test/rails_app/app/components/double_book_grid.rb +18 -0
- data/test/rails_app/app/components/form_without_model.rb +1 -1
- data/test/rails_app/app/components/paging_form_with_search.rb +39 -0
- data/test/rails_app/app/components/user_grid.rb +1 -1
- data/test/rails_app/app/models/author.rb +1 -0
- data/test/rails_app/config/application.rb +6 -1
- data/test/rails_app/config/database.yml +7 -5
- data/test/rails_app/config/environments/test.rb +1 -1
- data/test/rails_app/config/locales/de.yml +35 -0
- data/test/rails_app/config/locales/es.yml +84 -8
- data/test/rails_app/db/migrate/20101026190021_create_books.rb +2 -2
- data/test/rails_app/db/migrate/20110213213050_create_netzke_component_states.rb +20 -0
- data/test/rails_app/db/schema.rb +2 -18
- data/test/rails_app/public/netzke/basepack/ts-checkbox.gif +0 -0
- data/test/unit/active_record_basepack_test.rb +1 -1
- metadata +46 -45
- data/generators/netzke_basepack/netzke_basepack_generator.rb +0 -13
- data/lib/netzke/basepack/grid_panel/search_window.rb +0 -56
- data/lib/netzke/data_accessor.rb +0 -113
- data/lib/netzke/ext.rb +0 -7
- data/lib/netzke/fields_configurator.rb +0 -170
- data/lib/netzke/json_array_editor.rb +0 -67
- data/lib/netzke/masquerade_selector.rb +0 -53
- data/test/rails_app/app/components/some_search_panel.rb +0 -34
- data/test/rails_app/db/development_structure.sql +0 -93
- data/test/rails_app/db/migrate/20100905214933_create_netzke_preferences.rb +0 -16
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
= v0.6.4 - 2011-02-26
|
2
|
+
* API changes
|
3
|
+
* The combo field able to talk to the server has changed its xtype from combobox to netzkeremotecombo. When getting values from the server via AJAX, it expects a 2-dimensional array now, where the first value is the real value (which gets submitted), and the second value is the display value.
|
4
|
+
* xdatetime is no more. datetimefield is used instead.
|
5
|
+
|
6
|
+
* enhancements
|
7
|
+
* Components updated to use Ext.Direct (by @pschyska)
|
8
|
+
* New, improved advanced search for GridPanel and PagingFormPanel.
|
9
|
+
* One-to-many association support in Form/GridPanel reworked to use the foreign id instead of a string. This gives us more flexibility about what to display in the association column/field, and also provides for performance improvements (no more need to search for the associated record based on the value provided from the column/field).
|
10
|
+
* GridPanel now memorizes its columns visibility, position and size (when :persistence is set to true)
|
11
|
+
* I18n for GridPanel
|
12
|
+
* A default value can now also be assigned to association column/field (the value must be the associated record's ID)
|
13
|
+
* Slightly optimized selenium tests (no artificial sleeping whenever possible)
|
14
|
+
|
15
|
+
* bug fix
|
16
|
+
* Long-standing visual issues with datetime columns in grid panel are solved.
|
17
|
+
|
1
18
|
= v0.6.3 - 2011-01-14
|
2
19
|
* compatibility with netzke-core 0.6.5
|
3
20
|
|
data/README.rdoc
CHANGED
@@ -33,7 +33,7 @@ For more examples, see http://demo.netzke.com, and look into test/rails_app
|
|
33
33
|
|
34
34
|
== Running tests
|
35
35
|
|
36
|
-
Netzke-basepack is bundled with automated tests. To run them, you need to set up test/rails_app a similar way as you did with your own Rails app that is using Netzke, i.e.: 1) link Ext JS into the "public" folder, 2) link netzke-core into vendor/
|
36
|
+
Netzke-basepack is bundled with automated tests. To run them, you need to set up test/rails_app a similar way as you did with your own Rails app that is using Netzke, i.e.: 1) link Ext JS into the "public" folder, 2) link your copy of netzke-core and netzke-basepack into vendor/gems, 3) run migrations and clone the development database structure into the test database.
|
37
37
|
|
38
38
|
After this you may run (*from the netzke-basepack folder*):
|
39
39
|
|
data/Rakefile
CHANGED
@@ -19,6 +19,9 @@ begin
|
|
19
19
|
|
20
20
|
Thanks for installing netzke-basepack!
|
21
21
|
|
22
|
+
Don't forget to run "rails generate netzke:baspack" to copy necessary
|
23
|
+
assets to your public folder!
|
24
|
+
|
22
25
|
Netzke home page: http://netzke.org
|
23
26
|
Netzke Google Groups: http://groups.google.com/group/netzke
|
24
27
|
Netzke tutorials: http://blog.writelesscode.com
|
data/TODO.rdoc
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
== Priority
|
2
|
-
*
|
2
|
+
* Commit persistence migrations in the test app
|
3
3
|
* DataAccessor#to_array should not rescue exceptions, but rather check the availability of the attributes; `respond_to_with_basepack?` should be extended to also return true for association columns
|
4
4
|
* GridPanel's read_only vs editable (doesn't work now) options
|
5
5
|
* Find a way to print the grid nicely (along with the column and rows that don't fit on the screen)
|
6
6
|
|
7
7
|
== Foolproof
|
8
8
|
* Should not be possible to put the "ID" field on any place but first for grids (otherwise record ID is not correct)
|
9
|
-
|
10
|
-
== Optimizations
|
11
|
-
* Check persistent_config-related queries (aren't they too many?)
|
data/features/form_panel.feature
CHANGED
@@ -19,7 +19,8 @@ Scenario: Editing the record
|
|
19
19
|
When I go to the UserForm test page
|
20
20
|
And I fill in "First name:" with "Salvador"
|
21
21
|
And I fill in "Last name:" with "Dali"
|
22
|
-
And I
|
22
|
+
And I expand combobox "Role name"
|
23
|
+
And I select "painter" from combobox "Role name"
|
23
24
|
And I press "Apply"
|
24
25
|
And I go to the UserForm test page
|
25
26
|
Then I should see "Salvador"
|
data/features/grid_panel.feature
CHANGED
@@ -32,6 +32,7 @@ Scenario: Updating a record via "Edit in form"
|
|
32
32
|
And I fill in "First name:" with "Maxim"
|
33
33
|
And I fill in "Last name:" with "Osminogov"
|
34
34
|
And I press "OK"
|
35
|
+
And I wait for the response from the server
|
35
36
|
Then I should see "Maxim"
|
36
37
|
And I should see "Osminogov"
|
37
38
|
And a user should not exist with first_name: "Carlos"
|
@@ -43,7 +44,8 @@ Scenario: Deleting a record
|
|
43
44
|
When I go to the UserGrid test page
|
44
45
|
And I select all rows in the grid
|
45
46
|
And I press "Delete"
|
46
|
-
|
47
|
+
Then I should see "Are you sure?"
|
48
|
+
When I press "Yes"
|
47
49
|
Then I should see "Deleted 2 record(s)"
|
48
50
|
Then a user should not exist with first_name: "Anton"
|
49
51
|
And a user should not exist with first_name: "Maxim"
|
@@ -87,11 +89,18 @@ Scenario: Grid with strong_default_attrs
|
|
87
89
|
|
88
90
|
@javascript
|
89
91
|
Scenario: Grid with columns with default values
|
90
|
-
Given
|
92
|
+
Given an author exists with last_name: "Nabokov"
|
93
|
+
And I am on the BookGridWithDefaultValues test page
|
94
|
+
When I press "Add"
|
95
|
+
Then I should see "Nabokov"
|
96
|
+
And I press "Apply"
|
97
|
+
And I wait for the response from the server
|
98
|
+
Then a book should exist with title: "Lolita", exemplars: 100, digitized: true, author: that author
|
99
|
+
|
91
100
|
When I press "Add in form"
|
92
101
|
And I press "OK"
|
93
|
-
And I
|
94
|
-
Then
|
102
|
+
And I wait for the response from the server
|
103
|
+
Then 2 books should exist with title: "Lolita", exemplars: 100, digitized: true, author: that author
|
95
104
|
|
96
105
|
@javascript
|
97
106
|
Scenario: Inline editing
|
@@ -99,7 +108,127 @@ Scenario: Inline editing
|
|
99
108
|
When I go to the BookGrid test page
|
100
109
|
And I edit row 1 of the grid with title: "Collector", exemplars: 200
|
101
110
|
And I press "Apply"
|
102
|
-
And I
|
111
|
+
And I wait for the response from the server
|
103
112
|
Then the grid should have 0 modified records
|
104
113
|
And a book should exist with title: "Collector", exemplars: 200
|
105
114
|
But a book should not exist with title: "Magus"
|
115
|
+
|
116
|
+
@javascript
|
117
|
+
Scenario: Column filters
|
118
|
+
Given the following books exist:
|
119
|
+
| title | exemplars | digitized | notes |
|
120
|
+
| Journey to Ixtlan | 10 | true | A must-read |
|
121
|
+
| Lolita | 5 | false | To read |
|
122
|
+
| Getting Things Done | 3 | true | Productivity |
|
123
|
+
When I go to the BookGrid test page
|
124
|
+
And I enable filter on column "exemplars" with value "{gt:6}"
|
125
|
+
And I sleep 1 second
|
126
|
+
Then the grid should show 1 records
|
127
|
+
|
128
|
+
When I clear all filters in the grid
|
129
|
+
And I enable filter on column "notes" with value "'read'"
|
130
|
+
And I sleep 1 second
|
131
|
+
Then the grid should show 2 records
|
132
|
+
|
133
|
+
When I clear all filters in the grid
|
134
|
+
And I enable filter on column "digitized" with value "false"
|
135
|
+
And I sleep 1 second
|
136
|
+
Then the grid should show 1 records
|
137
|
+
|
138
|
+
When I clear all filters in the grid
|
139
|
+
And I enable filter on column "digitized" with value "true"
|
140
|
+
And I sleep 1 second
|
141
|
+
Then the grid should show 2 records
|
142
|
+
|
143
|
+
@javascript
|
144
|
+
Scenario: Inline editing of association
|
145
|
+
Given an author exists with first_name: "Vladimir", last_name: "Nabokov"
|
146
|
+
And a book exists with title: "Lolita", author: that author
|
147
|
+
And an author exists with first_name: "Herman", last_name: "Hesse"
|
148
|
+
When I go to the BookGrid test page
|
149
|
+
And I expand combobox "author__name" in row 1 of the grid
|
150
|
+
And I wait for the response from the server
|
151
|
+
And I select "Hesse, Herman" in combobox "author__name" in row 1 of the grid
|
152
|
+
And I edit row 1 of the grid with title: "Demian"
|
153
|
+
And I stop editing the grid
|
154
|
+
Then I should see "Hesse, Herman" within "#book_grid"
|
155
|
+
|
156
|
+
When I press "Apply"
|
157
|
+
And I wait for the response from the server
|
158
|
+
Then a book should exist with title: "Demian", author: that author
|
159
|
+
But a book should not exist with title: "Lolita"
|
160
|
+
|
161
|
+
@javascript
|
162
|
+
Scenario: Inline adding of records
|
163
|
+
Given an author: "Nabokov" exists with first_name: "Vladimir", last_name: "Nabokov"
|
164
|
+
And an author: "Hesse" exists with first_name: "Herman", last_name: "Hesse"
|
165
|
+
|
166
|
+
When I go to the BookGrid test page
|
167
|
+
And I press "Add"
|
168
|
+
And I expand combobox "author__name" in row 1 of the grid
|
169
|
+
And I wait for the response from the server
|
170
|
+
And I select "Hesse, Herman" in combobox "author__name" in row 1 of the grid
|
171
|
+
And I edit row 1 of the grid with title: "Demian"
|
172
|
+
|
173
|
+
And I press "Add"
|
174
|
+
And I expand combobox "author__name" in row 2 of the grid
|
175
|
+
And I wait for the response from the server
|
176
|
+
And I select "Nabokov, Vladimir" in combobox "author__name" in row 2 of the grid
|
177
|
+
And I edit row 2 of the grid with title: "Lolita"
|
178
|
+
|
179
|
+
And I stop editing the grid
|
180
|
+
And I press "Apply"
|
181
|
+
And I wait for the response from the server
|
182
|
+
Then a book should exist with title: "Lolita", author: author "Nabokov"
|
183
|
+
And a book should exist with title: "Demian", author: author "Hesse"
|
184
|
+
|
185
|
+
@javascript
|
186
|
+
Scenario: Inline adding of records in GridPanel with default values
|
187
|
+
Given an author: "Nabokov" exists with first_name: "Vladimir", last_name: "Nabokov"
|
188
|
+
And an author: "Hesse" exists with first_name: "Herman", last_name: "Hesse"
|
189
|
+
|
190
|
+
When I go to the BookGridWithDefaultValues test page
|
191
|
+
And I press "Add"
|
192
|
+
And I expand combobox "author__last_name" in row 1 of the grid
|
193
|
+
And I wait for the response from the server
|
194
|
+
And I select "Hesse" in combobox "author__last_name" in row 1 of the grid
|
195
|
+
And I edit row 1 of the grid with title: "Demian"
|
196
|
+
|
197
|
+
And I stop editing the grid
|
198
|
+
And I press "Apply"
|
199
|
+
And I wait for the response from the server
|
200
|
+
Then a book should exist with title: "Demian", author: author "Hesse"
|
201
|
+
|
202
|
+
@javascript
|
203
|
+
Scenario: Renderers for association columns should take effect
|
204
|
+
Given an author exists with first_name: "Vladimir", last_name: "Nabokov"
|
205
|
+
And a book exists with title: "Lolita", author: that author
|
206
|
+
When I go to the BookGridWithCustomColumns test page
|
207
|
+
Then I should see "NABOKOV"
|
208
|
+
|
209
|
+
@javascript
|
210
|
+
Scenario: Reloading grid data
|
211
|
+
Given a book exists with title: "Magus"
|
212
|
+
When I go to the BookGrid test page
|
213
|
+
And I reload the grid
|
214
|
+
And I reload the grid
|
215
|
+
Then I should not see "Internal Server Error"
|
216
|
+
|
217
|
+
@javascript
|
218
|
+
Scenario: Advanced search window should be hidable after loading grid panel dynamically second time
|
219
|
+
Given I am on the BookGridLoader test page
|
220
|
+
When I press "Load one"
|
221
|
+
And I wait for the response from the server
|
222
|
+
And I press "Search"
|
223
|
+
And I press "Cancel"
|
224
|
+
|
225
|
+
When I press "Load two"
|
226
|
+
And I wait for the response from the server
|
227
|
+
|
228
|
+
When I press "Load one"
|
229
|
+
And I wait for the response from the server
|
230
|
+
|
231
|
+
And I press "Search" within "#book_grid_loader__book_grid_one"
|
232
|
+
And I wait for the response from the server
|
233
|
+
And I press "Cancel" within "#book_grid_loader__book_grid_one__search_form"
|
234
|
+
Then the "book_grid_loader__book_grid_one__search_form" component should be hidden
|
@@ -8,7 +8,10 @@ Scenario: Grid with nested attributes
|
|
8
8
|
Given an author exists with first_name: "Vlad", last_name: "Nabokoff"
|
9
9
|
And a book exists with title: "Lola", author: that author
|
10
10
|
When I go to the BookGridWithNestedAttributes test page
|
11
|
-
|
11
|
+
Then I should see "Vlad" within "#book_grid_with_nested_attributes"
|
12
|
+
And I should see "Nabokoff" within "#book_grid_with_nested_attributes"
|
13
|
+
|
14
|
+
When I select first row in the grid
|
12
15
|
And I press "Edit in form"
|
13
16
|
And I fill in "Author first name:" with "Vladimir"
|
14
17
|
And I fill in "Author last name:" with "Nabokov"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Paging form panel
|
2
|
+
In order to value
|
3
|
+
As a role
|
4
|
+
I want feature
|
5
|
+
|
6
|
+
@javascript
|
7
|
+
Scenario: Paging through records
|
8
|
+
Given the following books exist:
|
9
|
+
| title |
|
10
|
+
| Journey to Ixtlan |
|
11
|
+
| Lolita |
|
12
|
+
| Getting Things Done |
|
13
|
+
|
14
|
+
When I go to the BookPagingFormPanel test page
|
15
|
+
Then I should see "Journey to Ixtlan"
|
16
|
+
|
17
|
+
When I go forward one page
|
18
|
+
Then the form should show title: "Lolita"
|
19
|
+
|
20
|
+
When I go forward one page
|
21
|
+
Then the form should show title: "Getting Things Done"
|
22
|
+
|
23
|
+
@javascript
|
24
|
+
Scenario: Searching
|
25
|
+
Given the following books exist:
|
26
|
+
| title | exemplars | digitized | notes |
|
27
|
+
| Journey to Ixtlan | 10 | true | A must-read |
|
28
|
+
| Lolita | 5 | false | To read |
|
29
|
+
| Getting Things Done | 3 | true | Productivity |
|
30
|
+
|
31
|
+
When I go to the BookPagingFormPanel test page
|
32
|
+
And I press "Search"
|
33
|
+
And I wait for the response from the server
|
34
|
+
And I expand combobox "undefined_attr"
|
35
|
+
And I select "Exemplars" from combobox "undefined_attr"
|
36
|
+
And I expand combobox "exemplars_operator"
|
37
|
+
And I select "Less than" from combobox "exemplars_operator"
|
38
|
+
And I fill in "exemplars_value" with "5"
|
39
|
+
And I press "Search" within "#book_paging_form_panel__search_form"
|
40
|
+
And I wait for the response from the server
|
41
|
+
Then the form should show title: "Getting Things Done"
|
@@ -22,14 +22,27 @@ Feature: Search
|
|
22
22
|
Then the grid should show 4 records
|
23
23
|
|
24
24
|
When I press "Search"
|
25
|
-
And I
|
25
|
+
And I wait for the response from the server
|
26
|
+
And I expand combobox "undefined_attr"
|
27
|
+
And I select "First name" from combobox "undefined_attr"
|
28
|
+
And I fill in "first_name_value" with "ai"
|
26
29
|
And I press "Search" within "#user_grid__search_form"
|
27
30
|
And I sleep 1 second
|
28
31
|
Then the grid should show 2 records
|
29
32
|
|
30
|
-
When I press "Search"
|
31
|
-
And I
|
32
|
-
And I
|
33
|
-
And I
|
34
|
-
And I
|
35
|
-
|
33
|
+
# When I press "Search"
|
34
|
+
# And I follow "+"
|
35
|
+
# And I expand combobox "undefined_attr"
|
36
|
+
# And I select "First name" from combobox "undefined_attr"
|
37
|
+
# And I fill in "first_name_value" with "in"
|
38
|
+
# And I press "Search" within "#user_grid__search_form"
|
39
|
+
# And I sleep 1 second
|
40
|
+
# Then the grid should show 3 records
|
41
|
+
|
42
|
+
# Search on association column not supported yet
|
43
|
+
# When I press "Search"
|
44
|
+
# And I fill in "Role name like:" with "adm"
|
45
|
+
# And I fill in "First name like:" with ""
|
46
|
+
# And I press "Search" within "#user_grid__search_form"
|
47
|
+
# And I sleep 1 second
|
48
|
+
# Then the grid should show 3 records
|
@@ -0,0 +1,35 @@
|
|
1
|
+
When /^I expand combobox "([^"]*)"$/ do |combo_label|
|
2
|
+
page.driver.browser.execute_script <<-JS
|
3
|
+
var combo = Ext.ComponentMgr.all.filter('fieldLabel', '#{combo_label}').first();
|
4
|
+
combo = combo || Ext.ComponentMgr.all.filter('name', '#{combo_label}').first();
|
5
|
+
combo.onTriggerClick();
|
6
|
+
JS
|
7
|
+
|
8
|
+
When "I wait for the response from the server"
|
9
|
+
end
|
10
|
+
|
11
|
+
When /^I select "([^"]*)" from combobox "([^"]*)"$/ do |value, combo_label|
|
12
|
+
page.driver.browser.execute_script <<-JS
|
13
|
+
var combo = Ext.ComponentMgr.all.filter('fieldLabel', '#{combo_label}').first();
|
14
|
+
combo = combo || Ext.ComponentMgr.all.filter('name', '#{combo_label}').first();
|
15
|
+
var index = combo.getStore().find('field2', '#{value}');
|
16
|
+
combo.select(index);
|
17
|
+
combo.onViewClick(false);
|
18
|
+
JS
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /the form should show #{capture_fields}$/ do |fields|
|
22
|
+
fields = ActiveSupport::JSON.decode("{#{fields}}")
|
23
|
+
page.driver.browser.execute_script(<<-JS).should == true
|
24
|
+
var components = [];
|
25
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
26
|
+
var form = Netzke.page[components[0]].getForm();
|
27
|
+
var result = true;
|
28
|
+
var values = #{fields.to_json};
|
29
|
+
for (var fieldName in values) {
|
30
|
+
result = form.findField(fieldName).getValue() === values[fieldName];
|
31
|
+
return result;
|
32
|
+
}
|
33
|
+
return result;
|
34
|
+
JS
|
35
|
+
end
|
@@ -12,4 +12,23 @@ end
|
|
12
12
|
|
13
13
|
When /I sleep (\d+) seconds?/ do |arg1|
|
14
14
|
sleep arg1.to_i
|
15
|
-
end
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I wait for the response from the server$/ do
|
18
|
+
page.wait_until{ page.driver.browser.execute_script("return !Ext.Ajax.isLoading();") }
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I go forward one page$/ do
|
22
|
+
page.driver.browser.execute_script(<<-JS)
|
23
|
+
var toolbar = Ext.ComponentMgr.all.find(function(c){ return c.getXType() === 'paging'});
|
24
|
+
toolbar.moveNext();
|
25
|
+
JS
|
26
|
+
page.wait_until{ page.driver.browser.execute_script("return !Ext.Ajax.isLoading();") }
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^the "([^"]*)" component should be hidden$/ do |id|
|
30
|
+
page.driver.browser.execute_script(<<-JS).should be_false
|
31
|
+
var cmp = Ext.ComponentMgr.get("#{id}");
|
32
|
+
return cmp.isVisible();
|
33
|
+
JS
|
34
|
+
end
|
@@ -47,3 +47,66 @@ Then /^the grid should have (\d+) modified records$/ do |n|
|
|
47
47
|
return grid.getStore().getModifiedRecords().length;
|
48
48
|
JS
|
49
49
|
end
|
50
|
+
|
51
|
+
When /^I enable filter on column "([^"]*)" with value "([^"]*)"$/ do |column, value|
|
52
|
+
page.driver.browser.execute_script <<-JS
|
53
|
+
var components = [];
|
54
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
55
|
+
var grid = Netzke.page[components[0]];
|
56
|
+
var filter = grid.filters.getFilter(grid.getColumnModel().getDataIndex(grid.getColumnModel().findColumnIndex('#{column}')));
|
57
|
+
filter.setValue(#{value});
|
58
|
+
filter.setActive(true);
|
59
|
+
JS
|
60
|
+
end
|
61
|
+
|
62
|
+
When /^I clear all filters in the grid$/ do
|
63
|
+
page.driver.browser.execute_script <<-JS
|
64
|
+
var components = [];
|
65
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
66
|
+
var grid = Netzke.page[components[0]];
|
67
|
+
grid.filters.clearFilters();
|
68
|
+
JS
|
69
|
+
end
|
70
|
+
|
71
|
+
When /^I expand combobox "([^"]*)" in row (\d+) of the grid$/ do |field, row|
|
72
|
+
page.driver.browser.execute_script <<-JS
|
73
|
+
var components = [];
|
74
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
75
|
+
var grid = Netzke.page[components[0]];
|
76
|
+
var colId = grid.getColumnModel().findColumnIndex("#{field}");
|
77
|
+
var col = grid.getColumnModel().getColumnById(colId);
|
78
|
+
grid.startEditing(#{row.to_i - 1}, colId);
|
79
|
+
col.editor.onTriggerClick();
|
80
|
+
JS
|
81
|
+
end
|
82
|
+
|
83
|
+
When /^I select "([^"]*)" in combobox "([^"]*)" in row (\d+) of the grid$/ do |value, field, row|
|
84
|
+
page.driver.browser.execute_script <<-JS
|
85
|
+
var components = [];
|
86
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
87
|
+
var grid = Netzke.page[components[0]];
|
88
|
+
var colId = grid.getColumnModel().findColumnIndex("#{field}");
|
89
|
+
var col = grid.getColumnModel().getColumnById(colId);
|
90
|
+
var index = col.editor.getStore().find('field2', '#{value}');
|
91
|
+
col.editor.setValue(col.editor.getStore().getAt(index).get('field1'));
|
92
|
+
col.editor.onTriggerClick();
|
93
|
+
JS
|
94
|
+
end
|
95
|
+
|
96
|
+
When /^I stop editing the grid$/ do
|
97
|
+
page.driver.browser.execute_script <<-JS
|
98
|
+
var components = [];
|
99
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
100
|
+
var grid = Netzke.page[components[0]];
|
101
|
+
grid.stopEditing();
|
102
|
+
JS
|
103
|
+
end
|
104
|
+
|
105
|
+
When /^I reload the grid$/ do
|
106
|
+
page.driver.browser.execute_script <<-JS
|
107
|
+
var components = [];
|
108
|
+
for (var cmp in Netzke.page) { components.push(cmp); }
|
109
|
+
var grid = Netzke.page[components[0]];
|
110
|
+
grid.getStore().reload();
|
111
|
+
JS
|
112
|
+
end
|