the_jobbook_admin_data 1.3.0a
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/.gitignore +19 -0
- data/CHANGELOG.rdoc +284 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +121 -0
- data/Guardfile +14 -0
- data/MIT-LICENSE +20 -0
- data/README.md +37 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/admin_data.gemspec +23 -0
- data/app/assets/images/add.png +0 -0
- data/app/assets/images/admin_data/.gitkeep +0 -0
- data/app/assets/images/no.png +0 -0
- data/app/assets/images/site.png +0 -0
- data/app/assets/images/sort_by_asc.jpg +0 -0
- data/app/assets/images/sort_by_desc.jpg +0 -0
- data/app/assets/images/sort_by_nothing.jpg +0 -0
- data/app/assets/javascripts/admin_data.js +18 -0
- data/app/assets/javascripts/admin_data/application.js +15 -0
- data/app/assets/javascripts/advance_search/act_on_result.js +45 -0
- data/app/assets/javascripts/advance_search/advance_search.js +83 -0
- data/app/assets/javascripts/advance_search/advance_search_structure.js +79 -0
- data/app/assets/javascripts/advance_search/ajaxify_advance_search.js +28 -0
- data/app/assets/javascripts/advance_search/build_first_row.js +8 -0
- data/app/assets/javascripts/advance_search/event_bindings.js +76 -0
- data/app/assets/javascripts/advance_search/global_ajax_setting.js +10 -0
- data/app/assets/javascripts/advance_search/sortby.js +14 -0
- data/app/assets/javascripts/advance_search/trigger_submit_on_domready.js +6 -0
- data/app/assets/javascripts/analytics/report.js +7 -0
- data/app/assets/javascripts/misc/drop_down_change.js +8 -0
- data/app/assets/javascripts/misc/js_util.js +58 -0
- data/app/assets/javascripts/misc/quick_search_input_focus.js +6 -0
- data/app/assets/javascripts/vendor/jquery-1.4.2.js +6240 -0
- data/app/assets/javascripts/vendor/jquery-ui-1.7.2.custom.min.js +298 -0
- data/app/assets/javascripts/vendor/jquery.ba-isjquery.js +21 -0
- data/app/assets/javascripts/vendor/jquery_form.js +814 -0
- data/app/assets/javascripts/vendor/log.js +9 -0
- data/app/assets/javascripts/vendor/rails.js +132 -0
- data/app/assets/stylesheets/admin_data.css +1141 -0
- data/app/assets/stylesheets/admin_data/application.css +13 -0
- data/app/assets/stylesheets/vendor/jquery-ui-1.7.2.custom.css +406 -0
- data/app/controllers/admin_data/application_controller.rb +107 -0
- data/app/controllers/admin_data/crud_controller.rb +100 -0
- data/app/controllers/admin_data/feed_controller.rb +48 -0
- data/app/controllers/admin_data/home_controller.rb +8 -0
- data/app/controllers/admin_data/migration_controller.rb +18 -0
- data/app/controllers/admin_data/public_controller.rb +28 -0
- data/app/controllers/admin_data/search_controller.rb +143 -0
- data/app/controllers/admin_data/table_structure_controller.rb +25 -0
- data/app/helpers/admin_data/application_helper.rb +320 -0
- data/app/views/admin_data/crud/association/_association_info.html.erb +11 -0
- data/app/views/admin_data/crud/association/_belongs_to_info.html.erb +7 -0
- data/app/views/admin_data/crud/association/_habtm_info.html.erb +7 -0
- data/app/views/admin_data/crud/association/_has_many_info.html.erb +7 -0
- data/app/views/admin_data/crud/association/_has_one_info.html.erb +6 -0
- data/app/views/admin_data/crud/edit.html.erb +36 -0
- data/app/views/admin_data/crud/misc/_form.html.erb +38 -0
- data/app/views/admin_data/crud/misc/_modify_record.html.erb +18 -0
- data/app/views/admin_data/crud/new.html.erb +25 -0
- data/app/views/admin_data/crud/show.html.erb +42 -0
- data/app/views/admin_data/feed/index.rss.builder +25 -0
- data/app/views/admin_data/home/index.html.erb +21 -0
- data/app/views/admin_data/migration/index.html.erb +18 -0
- data/app/views/admin_data/migration/jstest.html.erb +51 -0
- data/app/views/admin_data/search/advance_search.html.erb +1 -0
- data/app/views/admin_data/search/quick_search.html.erb +1 -0
- data/app/views/admin_data/search/search/_advance_search_form.html.erb +52 -0
- data/app/views/admin_data/search/search/_errors.html.erb +5 -0
- data/app/views/admin_data/search/search/_listing.html.erb +43 -0
- data/app/views/admin_data/search/search/_search_form.html.erb +27 -0
- data/app/views/admin_data/search/search/_title.html.erb +34 -0
- data/app/views/admin_data/shared/_breadcrum.html.erb +16 -0
- data/app/views/admin_data/shared/_drop_down_klasses.html.erb +4 -0
- data/app/views/admin_data/shared/_flash_message.html.erb +13 -0
- data/app/views/admin_data/shared/_header.html.erb +20 -0
- data/app/views/admin_data/shared/_powered_by.html.erb +6 -0
- data/app/views/admin_data/shared/_secondary_navigation.html.erb +26 -0
- data/app/views/admin_data/table_structure/index.html.erb +54 -0
- data/app/views/layouts/admin_data.html.erb +34 -0
- data/app/views/layouts/admin_data/application.html.erb +14 -0
- data/app/views/layouts/search.html.erb +71 -0
- data/config/routes.rb +32 -0
- data/lib/admin_data.rb +27 -0
- data/lib/admin_data/active_record_util.rb +102 -0
- data/lib/admin_data/analytics.rb +176 -0
- data/lib/admin_data/authenticator.rb +15 -0
- data/lib/admin_data/config.rb +38 -0
- data/lib/admin_data/configuration.rb +127 -0
- data/lib/admin_data/date_util.rb +58 -0
- data/lib/admin_data/engine.rb +17 -0
- data/lib/admin_data/model_finder.rb +15 -0
- data/lib/admin_data/rails_version_check.rb +8 -0
- data/lib/admin_data/search.rb +188 -0
- data/lib/admin_data/setup_config.rb +24 -0
- data/lib/admin_data/util.rb +102 -0
- data/lib/admin_data/version.rb +3 -0
- data/lib/tasks/admin_data_tasks.rake +4 -0
- data/script/rails +8 -0
- data/test/admin_data_test.rb +7 -0
- data/test/dummy/README.md +19 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +5 -0
- data/test/dummy/app/models/user.rb +3 -0
- data/test/dummy/app/models/user/student.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +15 -0
- data/test/dummy/config/boot.rb +13 -0
- data/test/dummy/config/cucumber.yml +9 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/database.yml.mysql +22 -0
- data/test/dummy/config/database.yml.pg +15 -0
- data/test/dummy/config/database.yml.sqlite3 +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +22 -0
- data/test/dummy/config/environments/production.rb +49 -0
- data/test/dummy/config/environments/test.rb +35 -0
- data/test/dummy/config/initializers/admin_data.rb +15 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/empty_spaces_to_nil.rb +10 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +9 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20091030202259_create_tables.rb +72 -0
- data/test/dummy/db/production.sqlite3 +1 -0
- data/test/dummy/db/schema.rb +23 -0
- data/test/dummy/db/seeds.rb +40 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/features/advance_search/boolean.feature +74 -0
- data/test/dummy/features/advance_search/datetime.feature +101 -0
- data/test/dummy/features/advance_search/delete_all.feature +20 -0
- data/test/dummy/features/advance_search/destroy_all.feature +20 -0
- data/test/dummy/features/advance_search/integer.feature +69 -0
- data/test/dummy/features/advance_search/multiple_rows.feature +87 -0
- data/test/dummy/features/advance_search/string.feature +130 -0
- data/test/dummy/features/crud.feature +50 -0
- data/test/dummy/features/crud_show.feature +56 -0
- data/test/dummy/features/feed.feature +13 -0
- data/test/dummy/features/home.feature +42 -0
- data/test/dummy/features/migration.feature +7 -0
- data/test/dummy/features/quick_search.feature +113 -0
- data/test/dummy/features/step_definitions/advance_search_steps.rb +13 -0
- data/test/dummy/features/step_definitions/app_steps.rb +36 -0
- data/test/dummy/features/step_definitions/async.rb +18 -0
- data/test/dummy/features/step_definitions/configuration_steps.rb +61 -0
- data/test/dummy/features/step_definitions/crud_show_steps.rb +37 -0
- data/test/dummy/features/step_definitions/feed_steps.rb +24 -0
- data/test/dummy/features/step_definitions/quick_search_steps.rb +68 -0
- data/test/dummy/features/step_definitions/util.rb +90 -0
- data/test/dummy/features/step_definitions/web_steps.rb +219 -0
- data/test/dummy/features/support/env.rb +66 -0
- data/test/dummy/features/support/hooks.rb +9 -0
- data/test/dummy/features/support/paths.rb +33 -0
- data/test/dummy/features/table_structure.feature +18 -0
- data/test/dummy/lib/tasks/.gitkeep +0 -0
- data/test/dummy/lib/tasks/cucumber.rake +53 -0
- data/test/dummy/lib/tasks/dbs.rake +30 -0
- data/test/dummy/lib/tasks/sample_cars.rake +18 -0
- data/test/dummy/public/.gitkeep +0 -0
- data/test/dummy/script/cucumber +10 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/factories.rb +30 -0
- data/test/dummy/test/test_helper.rb +7 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/admin_data/model_finder_test.rb +16 -0
- data/test/unit/car_test.rb +96 -0
- data/test/unit/user_phone_test.rb +19 -0
- metadata +253 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Feature: CRUD
|
|
2
|
+
|
|
3
|
+
Scenario: edit
|
|
4
|
+
Given a user exists
|
|
5
|
+
Given I visit user show page
|
|
6
|
+
Given I follow "Edit"
|
|
7
|
+
When I fill in the following:
|
|
8
|
+
| user_first_name ||
|
|
9
|
+
| user_age ||
|
|
10
|
+
When I press "Update"
|
|
11
|
+
Then I should see "First name can't be blank"
|
|
12
|
+
Then I should see "Age can't be blank"
|
|
13
|
+
Then I should see "Age is not a number"
|
|
14
|
+
Then I should find value "(auto)" for "created_at"
|
|
15
|
+
Then I should find value "(auto)" for "updated_at"
|
|
16
|
+
When I fill in the following:
|
|
17
|
+
| user_first_name | Robert2 |
|
|
18
|
+
| user_age | 99 |
|
|
19
|
+
When I press "Update"
|
|
20
|
+
Then I should see "Robert2"
|
|
21
|
+
Then I should see "99"
|
|
22
|
+
Then I should see "Record was updated"
|
|
23
|
+
|
|
24
|
+
Scenario: edit PhoneNumber (no association drop-down)
|
|
25
|
+
Given configuration to hide the association drop down for PhoneNumber
|
|
26
|
+
Given a phone number exists
|
|
27
|
+
Given I visit phone_number show page
|
|
28
|
+
Given I follow "Edit"
|
|
29
|
+
Then page should have "input" field with selector "#phone_number_user_id"
|
|
30
|
+
|
|
31
|
+
Scenario: edit PhoneNumber (with association drop-down)
|
|
32
|
+
Given configuration to show the association drop down for PhoneNumber
|
|
33
|
+
Given a phone number exists
|
|
34
|
+
Given I visit phone_number show page
|
|
35
|
+
Given I follow "Edit"
|
|
36
|
+
Then page should have "select" field with selector "#phone_number_user_id"
|
|
37
|
+
|
|
38
|
+
Scenario: add a new record
|
|
39
|
+
Given a user exists
|
|
40
|
+
Given I visit quick_search page
|
|
41
|
+
Given I follow "+Add New Record"
|
|
42
|
+
Given I press "Create"
|
|
43
|
+
Then I should see "First name can't be blank"
|
|
44
|
+
Then I should see "Age can't be blank"
|
|
45
|
+
Then I should see "Age is not a number"
|
|
46
|
+
When I fill in the following:
|
|
47
|
+
| user_first_name | Johny |
|
|
48
|
+
| user_age | 21 |
|
|
49
|
+
When I press "Create"
|
|
50
|
+
Then I should see "Record was created"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Feature: CRUD show
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
When configured to display only 2 records per page
|
|
5
|
+
When configured to display City column :name as "City Name"
|
|
6
|
+
|
|
7
|
+
Scenario: show
|
|
8
|
+
Given a user exists
|
|
9
|
+
Given I visit user show page
|
|
10
|
+
Then I should notice id of the last person
|
|
11
|
+
Then I should see "Edit"
|
|
12
|
+
Then I should see "Delete"
|
|
13
|
+
Then I should see "Destroy"
|
|
14
|
+
Then I should see crud show tabular attributes
|
|
15
|
+
|
|
16
|
+
Scenario: show for Newspaper which has primary key as paper_id
|
|
17
|
+
Given a newspaper exists
|
|
18
|
+
Given I visit newspaper show page
|
|
19
|
+
Then I should see "Edit"
|
|
20
|
+
|
|
21
|
+
Scenario: show with has_one association info
|
|
22
|
+
Given the following user exists:
|
|
23
|
+
| first name | last name |
|
|
24
|
+
| Mary | Jane |
|
|
25
|
+
Given the following website exists:
|
|
26
|
+
| url | user |
|
|
27
|
+
| www.google.com | first name:Mary |
|
|
28
|
+
Given I visit user show page
|
|
29
|
+
Then I should see "website"
|
|
30
|
+
When I follow "website"
|
|
31
|
+
Then I should notice id of website of the last person
|
|
32
|
+
When I follow "user"
|
|
33
|
+
Then I should notice id of the last person
|
|
34
|
+
|
|
35
|
+
Scenario: show with has_many association info
|
|
36
|
+
Given the following user exists:
|
|
37
|
+
| first name | last name |
|
|
38
|
+
| Mary | Jane |
|
|
39
|
+
Given the following phone number exists:
|
|
40
|
+
| number | user |
|
|
41
|
+
| 123-456-7890 | first name:Mary |
|
|
42
|
+
| 123-456-7899 | first name:Mary |
|
|
43
|
+
Given I visit user show page
|
|
44
|
+
Then I should see "phone_numbers(2)"
|
|
45
|
+
When I follow "phone_numbers(2)"
|
|
46
|
+
Then I should see "has 2 phone_numbers"
|
|
47
|
+
|
|
48
|
+
Scenario: show with habtm association info
|
|
49
|
+
Given the following user exists:
|
|
50
|
+
| first name | last name |
|
|
51
|
+
| Mary | Jane |
|
|
52
|
+
Given user owns two clubs "sun-shine" and "rise-n-shine"
|
|
53
|
+
Given I visit user show page
|
|
54
|
+
Then I should see "clubs(2)"
|
|
55
|
+
When I follow "clubs(2)"
|
|
56
|
+
Then I should see "has 2 clubs"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Feature: RSS feed availabilty for all the models
|
|
2
|
+
|
|
3
|
+
Scenario: RSS feed availability with invalid authentication
|
|
4
|
+
Given a user exists
|
|
5
|
+
When mocked feed authentication returns false
|
|
6
|
+
Given I visit user feed page
|
|
7
|
+
Then I should see "not authorized"
|
|
8
|
+
|
|
9
|
+
Scenario: RSS feed availability with valid authentication
|
|
10
|
+
Given a user exists
|
|
11
|
+
When mocked feed authentication returns true
|
|
12
|
+
Given I visit user feed page
|
|
13
|
+
Then I should see "Feeds from admin_data User"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Feature: homepage
|
|
2
|
+
|
|
3
|
+
@javascript
|
|
4
|
+
Scenario: admin_data homepage
|
|
5
|
+
Given the following user exists:
|
|
6
|
+
| first_name | last_name |
|
|
7
|
+
| Mary | Jane |
|
|
8
|
+
| John | Smith |
|
|
9
|
+
| Neil | Singh |
|
|
10
|
+
| Trisha | Singh |
|
|
11
|
+
Given I visit admin_data page
|
|
12
|
+
Then I should see "Select from the drop down menu above"
|
|
13
|
+
When I follow "admin_data" within "#subnav"
|
|
14
|
+
Then I should see "Select from the drop down menu above"
|
|
15
|
+
Then show me the page
|
|
16
|
+
Then I should see dropdown with css_selector ".drop_down_value_klass" with following options:
|
|
17
|
+
| text | value | position | value_match_type |
|
|
18
|
+
| city | /admin_data/quick_search/city | 3 | regex |
|
|
19
|
+
| club | /admin_data/quick_search/club | 4 | regex |
|
|
20
|
+
| newspaper | /admin_data/quick_search/newspaper | 5 | regex |
|
|
21
|
+
| phone_number | /admin_data/quick_search/phone_number | 6 | regex |
|
|
22
|
+
| user | /admin_data/quick_search/user | 7 | regex |
|
|
23
|
+
| website | /admin_data/quick_search/website | 8 | regex |
|
|
24
|
+
|
|
25
|
+
Then I should see dropdown with css_selector "#drop_down_klasses" with following options:
|
|
26
|
+
| text | value | position | value_match_type |
|
|
27
|
+
| city | /admin_data/quick_search/city | 3 | regex |
|
|
28
|
+
| club | /admin_data/quick_search/club | 4 | regex |
|
|
29
|
+
| newspaper | /admin_data/quick_search/newspaper | 5 | regex |
|
|
30
|
+
| phone_number | /admin_data/quick_search/phone_number | 6 | regex |
|
|
31
|
+
| user | /admin_data/quick_search/user | 7 | regex |
|
|
32
|
+
| website | /admin_data/quick_search/website | 8 | regex |
|
|
33
|
+
When I select "user" from "drop_down_klasses"
|
|
34
|
+
Then first id of table should be of "Trisha"
|
|
35
|
+
|
|
36
|
+
Scenario: footer links
|
|
37
|
+
Given I visit admin_data page
|
|
38
|
+
Then page should have following links:
|
|
39
|
+
| url | text | within |
|
|
40
|
+
| http://github.com/neerajdotname/admin_data | admin_data | #footer |
|
|
41
|
+
| http://github.com/neerajdotname/admin_data/issues | Report Bug | #footer |
|
|
42
|
+
| http://github.com/neerajdotname/admin_data/wiki | Documentation | #footer |
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Feature: quick search
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
When configured to display only 2 records per page
|
|
5
|
+
When configured to rename City columns:
|
|
6
|
+
| column | alias |
|
|
7
|
+
| :id | ID |
|
|
8
|
+
| :name | City Name |
|
|
9
|
+
| :data | City Info |
|
|
10
|
+
|
|
11
|
+
Scenario: quick search with no search term
|
|
12
|
+
Given the following user exists:
|
|
13
|
+
| first_name | last_name |
|
|
14
|
+
| Mary | Jane |
|
|
15
|
+
| John | Smith |
|
|
16
|
+
| Neil | Singh |
|
|
17
|
+
| Trisha | Singh |
|
|
18
|
+
Given I visit quick_search page
|
|
19
|
+
Then first id of table should be of "Trisha"
|
|
20
|
+
Then I should see "Next →"
|
|
21
|
+
Then I follow "Next →"
|
|
22
|
+
Then verify that user "first_name" is "John"
|
|
23
|
+
Then verify that user "last_name" is "Smith"
|
|
24
|
+
|
|
25
|
+
@javascript
|
|
26
|
+
Scenario: quick search with no search term for Newspaper which has paper_id as primary key
|
|
27
|
+
Given a newspaper exists
|
|
28
|
+
Given I visit admin_data page
|
|
29
|
+
When I select "newspaper" from "drop_down_klasses"
|
|
30
|
+
Then I should see "Listing Newspaper"
|
|
31
|
+
|
|
32
|
+
@javascript
|
|
33
|
+
Scenario: quick search with no search term for City which has to_model declared
|
|
34
|
+
Given a city exists
|
|
35
|
+
Given I visit admin_data page
|
|
36
|
+
When I select "city" from "drop_down_klasses"
|
|
37
|
+
Then I should see "Listing City"
|
|
38
|
+
When I follow "seattle"
|
|
39
|
+
Then I should see "seattle"
|
|
40
|
+
Then I should see population_5000
|
|
41
|
+
|
|
42
|
+
Scenario: quick search with search term
|
|
43
|
+
Given the following user exists:
|
|
44
|
+
| first_name | last_name |
|
|
45
|
+
| Mary | Jane |
|
|
46
|
+
| John | Smith |
|
|
47
|
+
Given I visit quick_search page
|
|
48
|
+
When I fill in "quick_search_input" with "John"
|
|
49
|
+
When I press "Search"
|
|
50
|
+
Then I should see "Search result: 1 record found"
|
|
51
|
+
Then verify that user "first_name" is "John"
|
|
52
|
+
Then verify that user "last_name" is "Smith"
|
|
53
|
+
|
|
54
|
+
Scenario: quick search with search term with association info
|
|
55
|
+
Given the following user exists:
|
|
56
|
+
| first name | last name |
|
|
57
|
+
| Mary | Jane |
|
|
58
|
+
Given the following phone number exists:
|
|
59
|
+
| number | user |
|
|
60
|
+
| 123-456-7890 | first name:Mary |
|
|
61
|
+
| 123-456-7777 | first name:Mary |
|
|
62
|
+
When I visit quick search page with association info page
|
|
63
|
+
Then I should see "has 2 phone_numbers"
|
|
64
|
+
Then I should see "2" rows in table "view_table"
|
|
65
|
+
|
|
66
|
+
Scenario: quick search with wrong klass name
|
|
67
|
+
When I visit quick search with wrong klass name page
|
|
68
|
+
Then I should see "wrong params[:klass] was supplied"
|
|
69
|
+
|
|
70
|
+
Scenario: quick search with wrong base klass name
|
|
71
|
+
Given the following user exists:
|
|
72
|
+
| first name | last name |
|
|
73
|
+
| Mary | Jane |
|
|
74
|
+
When I visit quick search with wrong base klass name page
|
|
75
|
+
Then I should see "user_wrong is an invalid value"
|
|
76
|
+
|
|
77
|
+
Scenario: quick search with wrong children klass name
|
|
78
|
+
Given the following user exists:
|
|
79
|
+
| first name | last name |
|
|
80
|
+
| Mary | Jane |
|
|
81
|
+
When I visit quick search with wrong children klass name page
|
|
82
|
+
Then I should see "phone_numbers_wrong is not a valid has_many association"
|
|
83
|
+
|
|
84
|
+
@javascript
|
|
85
|
+
Scenario: quick search for website with custom columns order
|
|
86
|
+
Given a website exists
|
|
87
|
+
Given I visit admin_data page
|
|
88
|
+
When I select "website" from "drop_down_klasses"
|
|
89
|
+
Then I should see tabular attributes for website with custom columns order
|
|
90
|
+
|
|
91
|
+
@javascript
|
|
92
|
+
Scenario: quick search for city with custom columns header
|
|
93
|
+
Given a city exists
|
|
94
|
+
Given I visit admin_data page
|
|
95
|
+
When I select "city" from "drop_down_klasses"
|
|
96
|
+
Then I should see tabular attributes for city with custom column headers
|
|
97
|
+
|
|
98
|
+
@javascript
|
|
99
|
+
Scenario: quick search for User with has_many info
|
|
100
|
+
Given the following user exists:
|
|
101
|
+
| first name | last name |
|
|
102
|
+
| Mary | Jane |
|
|
103
|
+
Given the following phone number exists:
|
|
104
|
+
| number | user |
|
|
105
|
+
| 123-456-7890 | first name:Mary |
|
|
106
|
+
| 123-456-7899 | first name:Mary |
|
|
107
|
+
Given user config has defined additional_column phone_numbers
|
|
108
|
+
Given I visit admin_data page
|
|
109
|
+
When I select "user" from "drop_down_klasses"
|
|
110
|
+
Then table should have additional column phone_numbers with valid data
|
|
111
|
+
Then reset columns_order and column_settings for User
|
|
112
|
+
|
|
113
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Then /^async page should have text as current date for "(.*)"$/ do |css_selector|
|
|
2
|
+
wait_until { page.evaluate_script("jQuery.active === 0") }
|
|
3
|
+
|
|
4
|
+
page.find(css_selector).value.should == Time.now.strftime('%d-%B-%Y')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^first user's value for active is nil$/ do
|
|
8
|
+
User.update_all('active = NULL', "id = #{User.first.id}")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Given /^last user's value for active is nil$/ do
|
|
12
|
+
User.update_all('active = NULL', "id = #{User.last.id}")
|
|
13
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
When /^I visit (.*) page$/ do |target_page|
|
|
2
|
+
case target_page
|
|
3
|
+
when 'admin_data'
|
|
4
|
+
visit '/admin_data'
|
|
5
|
+
|
|
6
|
+
when 'quick_search'
|
|
7
|
+
visit '/admin_data/quick_search/user'
|
|
8
|
+
|
|
9
|
+
when 'advance_search'
|
|
10
|
+
visit '/admin_data/advance_search/user'
|
|
11
|
+
|
|
12
|
+
when 'user show'
|
|
13
|
+
visit "/admin_data/klass/user/#{User.last.id}"
|
|
14
|
+
|
|
15
|
+
when 'phone_number show'
|
|
16
|
+
visit "/admin_data/klass/phone_number/#{PhoneNumber.last.id}"
|
|
17
|
+
|
|
18
|
+
when 'newspaper show'
|
|
19
|
+
visit "/admin_data/klass/newspaper/#{Newspaper.last.paper_id}"
|
|
20
|
+
|
|
21
|
+
when 'user feed'
|
|
22
|
+
visit "/admin_data/feed/user"
|
|
23
|
+
|
|
24
|
+
when 'quick search page with association info'
|
|
25
|
+
visit "/admin_data/quick_search/phone_number?base=user&children=phone_numbers&model_id=#{User.last.id}"
|
|
26
|
+
|
|
27
|
+
when 'quick search with wrong klass name'
|
|
28
|
+
visit "/admin_data/quick_search/phone_number_wrong"
|
|
29
|
+
|
|
30
|
+
when 'quick search with wrong base klass name'
|
|
31
|
+
visit "/admin_data/quick_search/phone_number?base=user_wrong&children=phone_numbers&model_id=#{User.last.id}"
|
|
32
|
+
|
|
33
|
+
when 'quick search with wrong children klass name'
|
|
34
|
+
visit "/admin_data/quick_search/phone_number?base=user&children=phone_numbers_wrong&model_id=#{User.last.id}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Then /^async verify that number of "(.*)" records is "(.*)"$/ do |klass, count|
|
|
2
|
+
wait_until { page.evaluate_script("jQuery.active === 0") }
|
|
3
|
+
klass.constantize.count.should == count.to_i
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Then /^async click "(.*)"$/ do |text|
|
|
7
|
+
wait_until { page.evaluate_script("jQuery.active === 0") }
|
|
8
|
+
|
|
9
|
+
page.evaluate_script('window.confirm = function() { return true; }')
|
|
10
|
+
page.click_link_or_button(text)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^asyc I should see "(.*)"$/ do |text|
|
|
14
|
+
wait_until { page.evaluate_script("jQuery.active === 0") }
|
|
15
|
+
|
|
16
|
+
page.should have_content(text)
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
When /^configured to display only (\d*) records per page$/ do |max_recs|
|
|
2
|
+
AdminData.config do |config|
|
|
3
|
+
config.number_of_records_per_page = max_recs.to_i
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def col_for( string )
|
|
8
|
+
string.gsub(/^\:/,'').downcase.to_sym
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add_to( config, param_sym, key1, key2, val)
|
|
12
|
+
hash = config.send( param_sym )
|
|
13
|
+
assign_sym = (param_sym.to_s + '=').to_sym
|
|
14
|
+
config.send( assign_sym, hash ||= {} )
|
|
15
|
+
hash[ key1 ] ||= {}
|
|
16
|
+
hash[ key1 ].store( key2, val )
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Assumes a table in the form:
|
|
20
|
+
# column, alias
|
|
21
|
+
# :city_name, City Name
|
|
22
|
+
When /^configured to rename (\w*) columns:$/ do |model, table|
|
|
23
|
+
@last_model = model
|
|
24
|
+
AdminData.config do |config|
|
|
25
|
+
table.hashes.each do |r|
|
|
26
|
+
add_to config, :column_headers, model, col_for(r['column']), r['alias']
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
When /^configured to display (\w*) column ([\:\w]*) as "([^"]*)"$/ do
|
|
32
|
+
|
|
33
|
+
|model, col_name, new_name|
|
|
34
|
+
|
|
35
|
+
@last_model = model
|
|
36
|
+
AdminData.config do |config|
|
|
37
|
+
add_to config, :column_headers, model, col_for(col_name), new_name
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Specify models to hide: Model1, Model2, Model3
|
|
42
|
+
Given /^configuration to (hide|show) the association drop down for ([\w\, ]*)$/ do |action,mods|
|
|
43
|
+
AdminData.config do |config|
|
|
44
|
+
|
|
45
|
+
hash = config.drop_down_for_associations
|
|
46
|
+
hash = {} if (hash == true || hash.nil?)
|
|
47
|
+
|
|
48
|
+
if action == "hide"
|
|
49
|
+
new_val = false
|
|
50
|
+
else
|
|
51
|
+
new_val = true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
models = mods.split(', ')
|
|
55
|
+
models.each do |model|
|
|
56
|
+
hash.store( model.strip, new_val )
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
config.drop_down_for_associations = hash
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Then /^I should see crud show tabular attributes$/ do
|
|
2
|
+
data = tableish('table.table tr', 'td,th').flatten
|
|
3
|
+
data[0].should == "id"
|
|
4
|
+
data[2].should == "first_name"
|
|
5
|
+
data[3].should == "Mary"
|
|
6
|
+
data[4].should == "last_name"
|
|
7
|
+
data[5].should == "Jane"
|
|
8
|
+
data[6].should == "age"
|
|
9
|
+
data[7].should == "21"
|
|
10
|
+
data[8].should == "data"
|
|
11
|
+
data[9].should == "nil"
|
|
12
|
+
data[10].should == "active"
|
|
13
|
+
data[11].should == "false"
|
|
14
|
+
data[12].should == "description"
|
|
15
|
+
data[13].should == ""
|
|
16
|
+
data[14].should == "born_at"
|
|
17
|
+
data[15].should =~ /30-August-2010/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Then /^I should find value "(.*)" for "(.*)"$/ do |text, column|
|
|
21
|
+
index = (column == 'created_at') ? 9 : 10
|
|
22
|
+
page.should have_xpath( "//form//div[@class='data'][#{index}]", :text => Regexp.new(text) )
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Then /^I should notice id of the last person$/ do
|
|
26
|
+
page.should have_content("ID #{User.last.id}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Then /^I should notice id of website of the last person$/ do
|
|
30
|
+
page.should have_content("ID #{User.last.website.id}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Given /^user owns two clubs "sun-shine" and "rise-n-shine"$/ do
|
|
34
|
+
u = User.last
|
|
35
|
+
u.clubs.create(:name => 'sun-shine')
|
|
36
|
+
u.clubs.create(:name => 'rise-n-shine')
|
|
37
|
+
end
|