activeadmin 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +177 -0
- data/Gemfile +21 -32
- data/Guardfile +8 -0
- data/README.rdoc +75 -14
- data/Rakefile +7 -100
- data/activeadmin.gemspec +21 -353
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
- data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
- data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
- data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
- data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
- data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
- data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
- data/docs/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +90 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +31 -4
- data/features/edit_page.feature +30 -1
- data/features/index/filters.feature +35 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +2 -0
- data/features/index/index_as_block.feature +1 -1
- data/features/index/index_as_grid.feature +1 -1
- data/features/index/index_as_table.feature +2 -0
- data/features/index/index_blank_slate.feature +56 -0
- data/features/index/pagination.feature +0 -6
- data/features/registering_assets.feature +2 -2
- data/features/sidebar_sections.feature +7 -8
- data/features/specifying_actions.feature +72 -1
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/additional_web_steps.rb +26 -16
- data/features/step_definitions/attribute_steps.rb +5 -7
- data/features/step_definitions/configuration_steps.rb +9 -9
- data/features/step_definitions/factory_steps.rb +4 -3
- data/features/step_definitions/format_steps.rb +29 -1
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +2 -2
- data/features/step_definitions/sidebar_steps.rb +1 -5
- data/features/step_definitions/user_steps.rb +8 -2
- data/features/step_definitions/web_steps.rb +82 -90
- data/features/sti_resource.feature +12 -0
- data/features/support/env.rb +12 -10
- data/features/support/paths.rb +2 -0
- data/features/support/selectors.rb +45 -0
- data/lib/active_admin.rb +33 -263
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +10 -10
- data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
- data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
- data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
- data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
- data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
- data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
- data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
- data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
- data/lib/active_admin/asset_registration.rb +1 -1
- data/lib/active_admin/callbacks.rb +5 -3
- data/lib/active_admin/comments.rb +3 -3
- data/lib/active_admin/comments/comment.rb +6 -0
- data/lib/active_admin/comments/configuration.rb +8 -6
- data/lib/active_admin/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +1 -1
- data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
- data/lib/active_admin/dependency_checker.rb +28 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +14 -3
- data/lib/active_admin/dsl.rb +26 -4
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/form_builder.rb +18 -9
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/locales/cs.yml +34 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +40 -0
- data/lib/active_admin/locales/fr.yml +40 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pl.yml +34 -0
- data/lib/active_admin/locales/pt-BR.yml +41 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu_item.rb +6 -0
- data/lib/active_admin/namespace.rb +14 -5
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +1 -1
- data/lib/active_admin/resource.rb +45 -88
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +46 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +32 -37
- data/lib/active_admin/resource_controller/action_builder.rb +1 -1
- data/lib/active_admin/resource_controller/actions.rb +66 -40
- data/lib/active_admin/resource_controller/callbacks.rb +1 -1
- data/lib/active_admin/resource_controller/collection.rb +9 -14
- data/lib/active_admin/resource_controller/filters.rb +1 -1
- data/lib/active_admin/resource_controller/form.rb +1 -1
- data/lib/active_admin/resource_controller/menu.rb +1 -1
- data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/sidebars.rb +1 -21
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +45 -0
- data/lib/active_admin/scope.rb +16 -2
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +5 -3
- data/lib/active_admin/view_helpers.rb +1 -2
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/attributes_table.rb +2 -2
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +1 -3
- data/lib/active_admin/views/components/paginated_collection.rb +26 -8
- data/lib/active_admin/views/components/scopes.rb +13 -8
- data/lib/active_admin/views/components/sidebar_section.rb +1 -3
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +25 -6
- data/lib/active_admin/views/header_renderer.rb +20 -4
- data/lib/active_admin/views/index_as_block.rb +12 -7
- data/lib/active_admin/views/index_as_blog.rb +61 -21
- data/lib/active_admin/views/index_as_grid.rb +22 -1
- data/lib/active_admin/views/index_as_table.rb +97 -6
- data/lib/active_admin/views/pages/base.rb +20 -9
- data/lib/active_admin/views/pages/dashboard.rb +7 -4
- data/lib/active_admin/views/pages/edit.rb +3 -2
- data/lib/active_admin/views/pages/index.rb +30 -5
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +3 -2
- data/lib/active_admin/views/pages/show.rb +1 -1
- data/lib/active_admin/views/tabbed_navigation.rb +94 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/install/install_generator.rb +2 -4
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
- data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
- data/script/local +44 -0
- data/script/use_rails +46 -0
- data/spec/integration/belongs_to_spec.rb +1 -1
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +21 -11
- data/spec/support/detect_rails_version.rb +10 -0
- data/spec/support/integration_example_group.rb +1 -1
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +1 -1
- data/spec/support/rails_template_with_data.rb +2 -1
- data/spec/support/templates/cucumber.rb +0 -4
- data/spec/unit/active_admin_spec.rb +8 -44
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
- data/spec/unit/arbre/html/element_spec.rb +2 -3
- data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
- data/spec/unit/arbre/html/tag_spec.rb +2 -2
- data/spec/unit/arbre/html_spec.rb +2 -3
- data/spec/unit/auto_link_spec.rb +2 -1
- data/spec/unit/belongs_to_spec.rb +2 -1
- data/spec/unit/comments_spec.rb +43 -39
- data/spec/unit/controller_filters_spec.rb +11 -3
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/devise_spec.rb +66 -0
- data/spec/unit/display_name_spec.rb +2 -2
- data/spec/unit/filter_form_builder_spec.rb +6 -3
- data/spec/unit/form_builder_spec.rb +20 -2
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +6 -0
- data/spec/unit/namespace_spec.rb +68 -19
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +18 -27
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +64 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +1 -1
- data/spec/unit/resource_controller_spec.rb +29 -24
- data/spec/unit/resource_spec.rb +78 -94
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +11 -1
- data/spec/unit/view_factory_spec.rb +4 -1
- data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
- data/spec/unit/views/components/blank_slate_spec.rb +15 -0
- data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
- data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
- data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +55 -0
- data/tasks/yard.rake +6 -0
- metadata +310 -189
- data/CHANGELOG.rdoc +0 -76
- data/lib/active_admin/action_items.rb +0 -37
- data/lib/active_admin/sidebar.rb +0 -39
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
- data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
- data/lib/active_admin/view_helpers/table_helper.rb +0 -12
- data/lib/active_admin/views/tabs_renderer.rb +0 -52
- data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
- data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
- data/spec/controllers/index_as_csv_spec.rb +0 -35
- data/spec/unit/action_items_spec.rb +0 -27
- data/spec/unit/tabs_renderer_spec.rb +0 -56
@@ -1,7 +1,7 @@
|
|
1
1
|
Then /^I should see an action item button "([^"]*)"$/ do |content|
|
2
|
-
|
2
|
+
page.should have_css(".action_items a", :text => content)
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^I should not see an action item button "([^"]*)"$/ do |content|
|
6
|
-
|
6
|
+
page.should_not have_css(".action_items", :text => content)
|
7
7
|
end
|
@@ -1,35 +1,40 @@
|
|
1
1
|
Then /^I should see a table header with "([^"]*)"$/ do |content|
|
2
|
-
|
2
|
+
page.should have_xpath('//th', :text => content)
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^I should not see a table header with "([^"]*)"$/ do |content|
|
6
|
-
|
6
|
+
page.should_not have_xpath('//th', :text => content)
|
7
7
|
end
|
8
8
|
|
9
9
|
Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
|
10
|
-
|
10
|
+
page.should have_css('th.sortable', :text => content)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should not see a sortable table header$/ do
|
14
|
+
Then "I should not see \"th.sortable\""
|
11
15
|
end
|
12
16
|
|
13
17
|
Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
|
14
|
-
|
15
|
-
|
16
|
-
end
|
18
|
+
table = page.find(selector)
|
19
|
+
table.all(:css, 'tr').size.should == count.to_i
|
17
20
|
end
|
18
21
|
|
19
22
|
Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
table = page.find(selector)
|
24
|
+
row = table.find('tr:first')
|
25
|
+
row.all(:css, "td").size.should == count.to_i
|
23
26
|
end
|
24
27
|
|
25
|
-
Then /^there should be (\d+) "([^"]*)" tags
|
26
|
-
|
27
|
-
page.all(:css, tag).size.should == count.to_i
|
28
|
-
end
|
28
|
+
Then /^there should be (\d+) "([^"]*)" tags$/ do |count, tag|
|
29
|
+
page.all(:css, tag).size.should == count.to_i
|
29
30
|
end
|
30
31
|
|
31
32
|
Then /^I should see a link to "([^"]*)"$/ do |link|
|
32
|
-
|
33
|
+
if page.respond_to? :should
|
34
|
+
page.should have_xpath('//a', :text => link)
|
35
|
+
else
|
36
|
+
assert page.has_xpath?('//a', :text => link)
|
37
|
+
end
|
33
38
|
end
|
34
39
|
|
35
40
|
Then /^I should see a link to \/([^\/]*)\/$/ do |regexp|
|
@@ -59,9 +64,14 @@ Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selecto
|
|
59
64
|
end
|
60
65
|
|
61
66
|
Then /^I should see the page title "([^"]*)"$/ do |title|
|
62
|
-
|
67
|
+
page.should have_css('h2#page_title', :text => title)
|
63
68
|
end
|
64
69
|
|
65
70
|
Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
|
66
|
-
|
71
|
+
page.should have_css('fieldset legend', :text => title)
|
72
|
+
end
|
73
|
+
|
74
|
+
Then /^the "([^"]*)" field should contain the option "([^"]*)"$/ do |field, option|
|
75
|
+
field = find_field(field)
|
76
|
+
field.should have_css("option", :text => option)
|
67
77
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
|
2
|
-
|
3
|
-
|
2
|
+
page.should have_css('.attributes_table th', :text => title)
|
3
|
+
page.should have_css('.attributes_table td', :text => value)
|
4
4
|
end
|
5
5
|
|
6
6
|
Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
|
7
|
-
|
8
|
-
|
9
|
-
page.body.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
|
10
|
-
end
|
7
|
+
th = page.find('.attributes_table th', :text => title)
|
8
|
+
page.find(:xpath, th.path.gsub(/th$/, 'td')).text.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
|
11
9
|
end
|
12
10
|
|
13
11
|
Then /^I should not see the attribute "([^"]*)"$/ do |title|
|
14
|
-
|
12
|
+
page.should_not have_css('.attributes_table th', :text => title)
|
15
13
|
end
|
@@ -1,22 +1,22 @@
|
|
1
|
-
Given /^a configuration of:$/ do |
|
2
|
-
|
3
|
-
File.open(ACTIVE_ADMIN_TEST_CONFIG, 'w+'){|f| f << config }
|
1
|
+
Given /^a configuration of:$/ do |configuration_content|
|
2
|
+
eval configuration_content
|
4
3
|
Rails.application.reload_routes!
|
4
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
5
5
|
end
|
6
6
|
|
7
|
-
Given /^an index configuration of:$/ do |
|
8
|
-
|
9
|
-
File.open(ACTIVE_ADMIN_TEST_CONFIG, 'w+'){|f| f << config }
|
7
|
+
Given /^an index configuration of:$/ do |configuration_content|
|
8
|
+
eval configuration_content
|
10
9
|
Rails.application.reload_routes!
|
10
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
11
11
|
|
12
12
|
And 'I am logged in'
|
13
13
|
When "I am on the index page for posts"
|
14
14
|
end
|
15
15
|
|
16
|
-
Given /^a show configuration of:$/ do |
|
17
|
-
|
18
|
-
File.open(ACTIVE_ADMIN_TEST_CONFIG, 'w+'){|f| f << config }
|
16
|
+
Given /^a show configuration of:$/ do |configuration_content|
|
17
|
+
eval configuration_content
|
19
18
|
Rails.application.reload_routes!
|
19
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
20
20
|
|
21
21
|
And 'I am logged in'
|
22
22
|
When "I am on the index page for posts"
|
@@ -12,7 +12,7 @@ Given /^a post with the title "([^"]*)" written by "([^"]*)" exists$/ do |title,
|
|
12
12
|
Post.create! :title => title, :author => author
|
13
13
|
end
|
14
14
|
|
15
|
-
Given /^(\d+) posts
|
15
|
+
Given /^(\d+) posts? exists?/ do |count|
|
16
16
|
(0...count.to_i).each do |i|
|
17
17
|
Post.create! :title => "Hello World #{i}"
|
18
18
|
end
|
@@ -22,7 +22,8 @@ Given /^a category named "([^"]*)" exists$/ do |name|
|
|
22
22
|
Category.create! :name => name
|
23
23
|
end
|
24
24
|
|
25
|
-
Given /^a user named "([^"]*)" exists$/ do |name|
|
25
|
+
Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
|
26
26
|
first, last = name.split(" ")
|
27
|
-
|
27
|
+
type = type.camelize.constantize
|
28
|
+
type.create! :first_name => first, :last_name => last, :username => name
|
28
29
|
end
|
@@ -3,5 +3,33 @@ Then "I should see nicely formatted datetimes" do
|
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^I should see a link to download "([^"]*)"$/ do |format_type|
|
6
|
-
|
6
|
+
page.should have_css("#index_footer a", :text => format_type)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Check first rows of the displayed CSV.
|
10
|
+
Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
|
11
|
+
page.response_headers['Content-Type'].should == 'text/csv; charset=utf-8'
|
12
|
+
csv_filename = "#{resource_name}-#{Time.now.strftime("%Y-%m-%d")}.csv"
|
13
|
+
page.response_headers['Content-Disposition'].should == %{attachment; filename="#{csv_filename}"}
|
14
|
+
body = page.driver.response.body
|
15
|
+
|
16
|
+
begin
|
17
|
+
csv = CSV.parse(body)
|
18
|
+
table.raw.each_with_index do |expected_row, row_index|
|
19
|
+
expected_row.each_with_index do |expected_cell, col_index|
|
20
|
+
cell = csv.try(:[], row_index).try(:[], col_index)
|
21
|
+
if expected_cell.blank?
|
22
|
+
cell.should be_nil
|
23
|
+
else
|
24
|
+
(cell || '').should match(/#{expected_cell}/)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
rescue
|
29
|
+
puts "Expecting:"
|
30
|
+
p table.raw
|
31
|
+
puts "to match:"
|
32
|
+
p csv
|
33
|
+
raise $!
|
34
|
+
end
|
7
35
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Then /^I should see a menu item for "([^"]*)"$/ do |name|
|
2
|
-
|
2
|
+
page.should have_css('#tabs li a', :text => name)
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^I should not see a menu item for "([^"]*)"$/ do |name|
|
6
|
-
|
6
|
+
page.should_not have_css('#tabs li a', :text => name)
|
7
7
|
end
|
@@ -1,11 +1,7 @@
|
|
1
1
|
Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
|
2
|
-
|
2
|
+
page.should have_css(".sidebar_section h3", :text => title)
|
3
3
|
end
|
4
4
|
|
5
5
|
Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
|
6
6
|
page.all(:css, "##{title.gsub(" ", '').underscore}_sidebar_section").count.should == 0
|
7
7
|
end
|
8
|
-
|
9
|
-
Then /^I should see \/([^\/]*)\/ within the sidebar "([^"]*)"$/ do |regexp, title|
|
10
|
-
Then %{I should see /#{regexp}/ within "##{title.gsub(" ", '').underscore}_sidebar_section"}
|
11
|
-
end
|
@@ -1,10 +1,16 @@
|
|
1
1
|
Given /^I am logged out$/ do
|
2
|
-
|
2
|
+
if page.all(:css, "a", :text => "Logout").size > 0
|
3
|
+
click_link "Logout"
|
4
|
+
end
|
3
5
|
end
|
4
6
|
|
5
7
|
Given /^I am logged in$/ do
|
6
8
|
Given 'an admin user "admin@example.com" exists'
|
7
|
-
|
9
|
+
|
10
|
+
if page.all(:css, "a", :text => "Logout").size > 0
|
11
|
+
click_link "Logout"
|
12
|
+
end
|
13
|
+
|
8
14
|
visit new_admin_user_session_path
|
9
15
|
fill_in "Email", :with => "admin@example.com"
|
10
16
|
fill_in "Password", :with => "password"
|
@@ -1,21 +1,46 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
1
|
+
# TL;DR: YOU SHOULD DELETE THIS FILE
|
2
|
+
#
|
3
|
+
# This file was generated by Cucumber-Rails and is only here to get you a head start
|
4
|
+
# These step definitions are thin wrappers around the Capybara/Webrat API that lets you
|
5
|
+
# visit pages, interact with widgets and make assertions about page content.
|
6
|
+
#
|
7
|
+
# If you use these step definitions as basis for your features you will quickly end up
|
8
|
+
# with features that are:
|
9
|
+
#
|
10
|
+
# * Hard to maintain
|
11
|
+
# * Verbose to read
|
12
|
+
#
|
13
|
+
# A much better approach is to write your own higher level step definitions, following
|
14
|
+
# the advice in the following blog posts:
|
15
|
+
#
|
16
|
+
# * http://benmabey.com/2008/05/19/imperative-vs-declarative-scenarios-in-user-stories.html
|
17
|
+
# * http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/
|
18
|
+
# * http://elabs.se/blog/15-you-re-cuking-it-wrong
|
19
|
+
#
|
6
20
|
|
7
21
|
|
8
22
|
require 'uri'
|
9
23
|
require 'cgi'
|
10
24
|
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
25
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
|
11
26
|
|
12
27
|
module WithinHelpers
|
13
28
|
def with_scope(locator)
|
14
|
-
locator ? within(locator) { yield } : yield
|
29
|
+
locator ? within(*selector_for(locator)) { yield } : yield
|
15
30
|
end
|
16
31
|
end
|
17
32
|
World(WithinHelpers)
|
18
33
|
|
34
|
+
# Single-line step scoper
|
35
|
+
When /^(.*) within (.*[^:])$/ do |step, parent|
|
36
|
+
with_scope(parent) { When step }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Multi-line step scoper
|
40
|
+
When /^(.*) within (.*[^:]):$/ do |step, parent, table_or_string|
|
41
|
+
with_scope(parent) { When "#{step}:", table_or_string }
|
42
|
+
end
|
43
|
+
|
19
44
|
Given /^(?:|I )am on (.+)$/ do |page_name|
|
20
45
|
visit path_to(page_name)
|
21
46
|
end
|
@@ -24,28 +49,20 @@ When /^(?:|I )go to (.+)$/ do |page_name|
|
|
24
49
|
visit path_to(page_name)
|
25
50
|
end
|
26
51
|
|
27
|
-
When /^(?:|I )press "([^"]*)"
|
28
|
-
|
29
|
-
click_button(button)
|
30
|
-
end
|
52
|
+
When /^(?:|I )press "([^"]*)"$/ do |button|
|
53
|
+
click_button(button)
|
31
54
|
end
|
32
55
|
|
33
|
-
When /^(?:|I )follow "([^"]*)"
|
34
|
-
|
35
|
-
click_link(link)
|
36
|
-
end
|
56
|
+
When /^(?:|I )follow "([^"]*)"$/ do |link|
|
57
|
+
click_link(link)
|
37
58
|
end
|
38
59
|
|
39
|
-
When /^(?:|I )fill in "([^"]*)" with "([^"]*)"
|
40
|
-
|
41
|
-
fill_in(field, :with => value)
|
42
|
-
end
|
60
|
+
When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
|
61
|
+
fill_in(field, :with => value)
|
43
62
|
end
|
44
63
|
|
45
|
-
When /^(?:|I )fill in "([^"]*)" for "([^"]*)"
|
46
|
-
|
47
|
-
fill_in(field, :with => value)
|
48
|
-
end
|
64
|
+
When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field|
|
65
|
+
fill_in(field, :with => value)
|
49
66
|
end
|
50
67
|
|
51
68
|
# Use this to fill in an entire form with data from a table. Example:
|
@@ -59,95 +76,70 @@ end
|
|
59
76
|
# TODO: Add support for checkbox, select og option
|
60
77
|
# based on naming conventions.
|
61
78
|
#
|
62
|
-
When /^(?:|I )fill in the following
|
63
|
-
|
64
|
-
|
65
|
-
When %{I fill in "#{name}" with "#{value}"}
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
When /^(?:|I )select "([^"]*)" from "([^"]*)"(?: within "([^"]*)")?$/ do |value, field, selector|
|
71
|
-
with_scope(selector) do
|
72
|
-
select(value, :from => field)
|
79
|
+
When /^(?:|I )fill in the following:$/ do |fields|
|
80
|
+
fields.rows_hash.each do |name, value|
|
81
|
+
When %{I fill in "#{name}" with "#{value}"}
|
73
82
|
end
|
74
83
|
end
|
75
84
|
|
76
|
-
When /^(?:|I )
|
77
|
-
|
78
|
-
check(field)
|
79
|
-
end
|
85
|
+
When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
|
86
|
+
select(value, :from => field)
|
80
87
|
end
|
81
88
|
|
82
|
-
When /^(?:|I )
|
83
|
-
|
84
|
-
uncheck(field)
|
85
|
-
end
|
89
|
+
When /^(?:|I )check "([^"]*)"$/ do |field|
|
90
|
+
check(field)
|
86
91
|
end
|
87
92
|
|
88
|
-
When /^(?:|I )
|
89
|
-
|
90
|
-
choose(field)
|
91
|
-
end
|
93
|
+
When /^(?:|I )uncheck "([^"]*)"$/ do |field|
|
94
|
+
uncheck(field)
|
92
95
|
end
|
93
96
|
|
94
|
-
When /^(?:|I )
|
95
|
-
|
96
|
-
attach_file(field, path)
|
97
|
-
end
|
97
|
+
When /^(?:|I )choose "([^"]*)"$/ do |field|
|
98
|
+
choose(field)
|
98
99
|
end
|
99
100
|
|
100
|
-
|
101
|
-
|
102
|
-
expected = JSON.pretty_generate(JSON.parse(expected_json))
|
103
|
-
actual = JSON.pretty_generate(JSON.parse(response.body))
|
104
|
-
expected.should == actual
|
101
|
+
When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
|
102
|
+
attach_file(field, File.expand_path(path))
|
105
103
|
end
|
106
104
|
|
107
|
-
Then /^(?:|I )should see "([^"]*)"
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
assert page.has_content?(text)
|
113
|
-
end
|
105
|
+
Then /^(?:|I )should see "([^"]*)"$/ do |text|
|
106
|
+
if page.respond_to? :should
|
107
|
+
page.should have_content(text)
|
108
|
+
else
|
109
|
+
assert page.has_content?(text)
|
114
110
|
end
|
115
111
|
end
|
116
112
|
|
117
|
-
Then /^(?:|I )should see \/([^\/]*)
|
113
|
+
Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp|
|
118
114
|
regexp = Regexp.new(regexp)
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
end
|
115
|
+
|
116
|
+
if page.respond_to? :should
|
117
|
+
page.should have_xpath('//*', :text => regexp)
|
118
|
+
else
|
119
|
+
assert page.has_xpath?('//*', :text => regexp)
|
125
120
|
end
|
126
121
|
end
|
127
122
|
|
128
|
-
Then /^(?:|I )should not see "([^"]*)"
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
assert page.has_no_content?(text)
|
134
|
-
end
|
123
|
+
Then /^(?:|I )should not see "([^"]*)"$/ do |text|
|
124
|
+
if page.respond_to? :should
|
125
|
+
page.should have_no_content(text)
|
126
|
+
else
|
127
|
+
assert page.has_no_content?(text)
|
135
128
|
end
|
136
129
|
end
|
137
130
|
|
138
|
-
Then /^(?:|I )should not see \/([^\/]*)
|
131
|
+
Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp|
|
139
132
|
regexp = Regexp.new(regexp)
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
133
|
+
|
134
|
+
if page.respond_to? :should
|
135
|
+
page.should have_no_xpath('//*', :text => regexp)
|
136
|
+
else
|
137
|
+
assert page.has_no_xpath?('//*', :text => regexp)
|
146
138
|
end
|
147
139
|
end
|
148
140
|
|
149
|
-
Then /^the "([^"]*)" field(?: within
|
150
|
-
with_scope(
|
141
|
+
Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value|
|
142
|
+
with_scope(parent) do
|
151
143
|
field = find_field(field)
|
152
144
|
field_value = (field.tag_name == 'textarea') ? field.text : field.value
|
153
145
|
if field_value.respond_to? :should
|
@@ -158,8 +150,8 @@ Then /^the "([^"]*)" field(?: within "([^"]*)")? should contain "([^"]*)"$/ do |
|
|
158
150
|
end
|
159
151
|
end
|
160
152
|
|
161
|
-
Then /^the "([^"]*)" field(?: within
|
162
|
-
with_scope(
|
153
|
+
Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value|
|
154
|
+
with_scope(parent) do
|
163
155
|
field = find_field(field)
|
164
156
|
field_value = (field.tag_name == 'textarea') ? field.text : field.value
|
165
157
|
if field_value.respond_to? :should_not
|
@@ -170,8 +162,8 @@ Then /^the "([^"]*)" field(?: within "([^"]*)")? should not contain "([^"]*)"$/
|
|
170
162
|
end
|
171
163
|
end
|
172
164
|
|
173
|
-
Then /^the "([^"]*)" checkbox(?: within
|
174
|
-
with_scope(
|
165
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent|
|
166
|
+
with_scope(parent) do
|
175
167
|
field_checked = find_field(label)['checked']
|
176
168
|
if field_checked.respond_to? :should
|
177
169
|
field_checked.should be_true
|
@@ -181,8 +173,8 @@ Then /^the "([^"]*)" checkbox(?: within "([^"]*)")? should be checked$/ do |labe
|
|
181
173
|
end
|
182
174
|
end
|
183
175
|
|
184
|
-
Then /^the "([^"]*)" checkbox(?: within
|
185
|
-
with_scope(
|
176
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent|
|
177
|
+
with_scope(parent) do
|
186
178
|
field_checked = find_field(label)['checked']
|
187
179
|
if field_checked.respond_to? :should
|
188
180
|
field_checked.should be_false
|