nsm-activeadmin 0.2.2
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/.document +5 -0
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +39 -0
- data/LICENSE +25 -0
- data/README.rdoc +487 -0
- data/Rakefile +27 -0
- data/activeadmin.gemspec +28 -0
- data/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/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/app/assets/javascripts/active_admin/vendor.js +382 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -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/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
- data/app/views/active_admin/devise/shared/_links.erb +20 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
- data/cucumber.yml +2 -0
- data/docs/1-general-configuration.md +52 -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 +74 -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 +112 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +106 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +12 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +81 -0
- data/features/index/index_blank_slate.feature +55 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +26 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +87 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +77 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +29 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +35 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +7 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +26 -0
- data/features/step_definitions/web_steps.rb +211 -0
- data/features/sti_resource.feature +61 -0
- data/features/support/env.rb +90 -0
- data/features/support/paths.rb +50 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +74 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +14 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +137 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +89 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +224 -0
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +109 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/settings.rb +63 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -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 +39 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pt-BR.yml +36 -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.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +206 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +151 -0
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +36 -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 +103 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +144 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- 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 +40 -0
- data/lib/active_admin/scope.rb +17 -0
- 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 +3 -0
- data/lib/active_admin/view_factory.rb +23 -0
- data/lib/active_admin/view_helpers.rb +22 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
- data/lib/active_admin/view_helpers/form_helper.rb +13 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/blank_slate.rb +33 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +70 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +53 -0
- data/lib/active_admin/views/index_as_block.rb +29 -0
- data/lib/active_admin/views/index_as_blog.rb +129 -0
- data/lib/active_admin/views/index_as_grid.rb +70 -0
- data/lib/active_admin/views/index_as_table.rb +148 -0
- data/lib/active_admin/views/pages/base.rb +155 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/edit.rb +28 -0
- data/lib/active_admin/views/pages/index.rb +74 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +28 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/activeadmin.rb +1 -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/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +44 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/script/local +44 -0
- data/script/use_rails +45 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- 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 +157 -0
- data/spec/support/detect_rails_version.rb +11 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +33 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/html/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +210 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/controller_filters_spec.rb +34 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +182 -0
- data/spec/unit/form_builder_spec.rb +239 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +214 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/renderer_spec.rb +108 -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 +56 -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 +34 -0
- data/spec/unit/resource_controller_spec.rb +152 -0
- data/spec/unit/resource_spec.rb +260 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +85 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/views/components/attributes_table_spec.rb +100 -0
- data/spec/unit/views/components/blank_slate_spec.rb +31 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +31 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +81 -0
- data/spec/unit/views/components/table_for_spec.rb +130 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +49 -0
- data/tasks/yard.rake +6 -0
- metadata +510 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Then /^I should see a table header with "([^"]*)"$/ do |content|
|
|
2
|
+
page.should have_xpath('//th', :text => content)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see a table header with "([^"]*)"$/ do |content|
|
|
6
|
+
page.should_not have_xpath('//th', :text => content)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
|
|
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\""
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
|
|
18
|
+
table = page.find(selector)
|
|
19
|
+
table.all(:css, 'tr').size.should == count.to_i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
|
|
23
|
+
table = page.find(selector)
|
|
24
|
+
row = table.find('tr:first')
|
|
25
|
+
row.all(:css, "td").size.should == count.to_i
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Then /^there should be (\d+) "([^"]*)" tags$/ do |count, tag|
|
|
29
|
+
page.all(:css, tag).size.should == count.to_i
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Then /^I should see a link to "([^"]*)"$/ do |link|
|
|
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
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
Then /^I should see a link to \/([^\/]*)\/$/ do |regexp|
|
|
41
|
+
regexp = Regexp.new(regexp)
|
|
42
|
+
if page.respond_to? :should
|
|
43
|
+
page.should have_xpath('//a', :text => regexp)
|
|
44
|
+
else
|
|
45
|
+
assert page.has_xpath?('//a', :text => regexp)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |error, link|
|
|
50
|
+
lambda {
|
|
51
|
+
When "I follow \"#{link}\""
|
|
52
|
+
}.should raise_error(error.constantize)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Then /^I should be in the resource section for (.+)$/ do |resource_name|
|
|
56
|
+
current_url.should include(resource_name.gsub(' ', '').underscore.pluralize)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
|
|
60
|
+
sleep 1
|
|
61
|
+
Then 'show me the page'
|
|
62
|
+
selector ||= "*"
|
|
63
|
+
locate(:xpath, "//#{selector}[text()='#{text}']")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Then /^I should see the page title "([^"]*)"$/ do |title|
|
|
67
|
+
page.should have_css('h2#page_title', :text => title)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
|
|
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)
|
|
77
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Then /^I should see the css file "([^"]*)"$/ do |path|
|
|
2
|
+
page.should have_xpath("//link[contains(@href, /stylesheets/#{path})]")
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see the js file "([^"]*)"$/ do |path|
|
|
6
|
+
page.should have_xpath("//script[contains(@src, /javascripts/#{path})]")
|
|
7
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
|
|
2
|
+
page.should have_css('.attributes_table th', :text => title)
|
|
3
|
+
page.should have_css('.attributes_table td', :text => value)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
|
|
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}/
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
Then /^I should not see the attribute "([^"]*)"$/ do |title|
|
|
12
|
+
page.should_not have_css('.attributes_table th', :text => title)
|
|
13
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Then /^I should see a comment by "([^"]*)"$/ do |name|
|
|
2
|
+
Then %{I should see "#{name}" within ".active_admin_comment_author"}
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I add a comment "([^"]*)"$/ do |comment|
|
|
6
|
+
When %{I fill in "active_admin_comment_body" with "#{comment}"}
|
|
7
|
+
And %{I press "Add Comment"}
|
|
8
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Given /^a configuration of:$/ do |configuration_content|
|
|
2
|
+
eval configuration_content
|
|
3
|
+
Rails.application.reload_routes!
|
|
4
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^an index configuration of:$/ do |configuration_content|
|
|
8
|
+
eval configuration_content
|
|
9
|
+
Rails.application.reload_routes!
|
|
10
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
|
11
|
+
|
|
12
|
+
And 'I am logged in'
|
|
13
|
+
When "I am on the index page for posts"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Given /^a show configuration of:$/ do |configuration_content|
|
|
17
|
+
eval configuration_content
|
|
18
|
+
Rails.application.reload_routes!
|
|
19
|
+
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
|
|
20
|
+
|
|
21
|
+
And 'I am logged in'
|
|
22
|
+
When "I am on the index page for posts"
|
|
23
|
+
And 'I follow "View"'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Given /^"([^"]*)" contains:$/ do |filename, contents|
|
|
27
|
+
require 'fileutils'
|
|
28
|
+
filepath = Rails.root + filename
|
|
29
|
+
FileUtils.mkdir_p File.dirname(filepath)
|
|
30
|
+
File.open(filepath, 'w+'){|f| f << contents }
|
|
31
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Then /^I should see the default welcome message$/ do
|
|
2
|
+
Then %{I should see "Welcome to Active Admin" within "#dashboard_default_message"}
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see the default welcome message$/ do
|
|
6
|
+
Then %{I should not see "Welcome to Active Admin"}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
|
|
10
|
+
Then %{I should see "#{name}" within ".dashboard .panel h3"}
|
|
11
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Given /^a post with the title "([^"]*)" exists$/ do |title|
|
|
2
|
+
Post.create! :title => title
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Given /^a post with the title "([^"]*)" and body "([^"]*)" exists$/ do |title, body|
|
|
6
|
+
Post.create! :title => title, :body => body
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Given /^a post with the title "([^"]*)" written by "([^"]*)" exists$/ do |title, author_name|
|
|
10
|
+
first, last = author_name.split(' ')
|
|
11
|
+
author = User.find_or_create_by_first_name_and_last_name(first, last, :username => author_name.gsub(' ', '').underscore)
|
|
12
|
+
Post.create! :title => title, :author => author
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Given /^(\d+) posts? exists?/ do |count|
|
|
16
|
+
(0...count.to_i).each do |i|
|
|
17
|
+
Post.create! :title => "Hello World #{i}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Given /^a category named "([^"]*)" exists$/ do |name|
|
|
22
|
+
Category.create! :name => name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
|
|
26
|
+
first, last = name.split(" ")
|
|
27
|
+
type = type.camelize.constantize
|
|
28
|
+
type.create! :first_name => first, :last_name => last, :username => name
|
|
29
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Then "I should see nicely formatted datetimes" do
|
|
2
|
+
page.body.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see a link to download "([^"]*)"$/ do |format_type|
|
|
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
|
|
35
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Then /^I should see the scope "([^"]*)"$/ do |name|
|
|
2
|
+
Then %{I should see "#{name}" within ".scopes"}
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see the scope "([^"]*)" selected$/ do |name|
|
|
6
|
+
Then %{I should see "#{name}" within ".scopes span.selected"}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see the scope "([^"]*)" not selected$/ do |name|
|
|
10
|
+
Then %{I should see the scope "#{name}"}
|
|
11
|
+
page.should_not have_css('.scopes span.selected', :text => name)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Then /^I should see the scope "([^"]*)" with the count (\d+)$/ do |name, count|
|
|
15
|
+
Then %{I should see "#{count}" within ".scopes .#{name.downcase} .count"}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Then /^I should see (\d+) ([\w]*) in the table$/ do |count, resource_type|
|
|
19
|
+
page.should have_css("table##{resource_type} tr > td:first", :count => count.to_i)
|
|
20
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Then /^I should not see pagination$/ do
|
|
2
|
+
page.should_not have_css(".pagination")
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see pagination with (\d+) pages$/ do |count|
|
|
6
|
+
Then %{I should see "#{count}" within ".pagination a"}
|
|
7
|
+
Then %{I should not see "#{count.to_i + 1}" within ".pagination a"}
|
|
8
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
|
|
2
|
+
page.should have_css(".sidebar_section h3", :text => title)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
|
|
6
|
+
page.all(:css, "##{title.gsub(" ", '').underscore}_sidebar_section").count.should == 0
|
|
7
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Given /^I am logged out$/ do
|
|
2
|
+
if page.all(:css, "a", :text => "Logout").size > 0
|
|
3
|
+
click_link "Logout"
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^I am logged in$/ do
|
|
8
|
+
Given 'an admin user "admin@example.com" exists'
|
|
9
|
+
|
|
10
|
+
if page.all(:css, "a", :text => "Logout").size > 0
|
|
11
|
+
click_link "Logout"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
visit new_admin_user_session_path
|
|
15
|
+
fill_in "Email", :with => "admin@example.com"
|
|
16
|
+
fill_in "Password", :with => "password"
|
|
17
|
+
click_button "Login"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Given /^an admin user "([^"]*)" exists$/ do |admin_email|
|
|
21
|
+
unless AdminUser.find_by_email(admin_email)
|
|
22
|
+
AdminUser.create! :email => admin_email,
|
|
23
|
+
:password => "password",
|
|
24
|
+
:password_confirmation => "password"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,211 @@
|
|
|
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
|
+
#
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
require 'uri'
|
|
23
|
+
require 'cgi'
|
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
|
25
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
|
|
26
|
+
|
|
27
|
+
module WithinHelpers
|
|
28
|
+
def with_scope(locator)
|
|
29
|
+
locator ? within(*selector_for(locator)) { yield } : yield
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
World(WithinHelpers)
|
|
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
|
+
|
|
44
|
+
Given /^(?:|I )am on (.+)$/ do |page_name|
|
|
45
|
+
visit path_to(page_name)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
When /^(?:|I )go to (.+)$/ do |page_name|
|
|
49
|
+
visit path_to(page_name)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
When /^(?:|I )press "([^"]*)"$/ do |button|
|
|
53
|
+
click_button(button)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
When /^(?:|I )follow "([^"]*)"$/ do |link|
|
|
57
|
+
click_link(link)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
When /^(?:|I )fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
|
|
61
|
+
fill_in(field, :with => value)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
When /^(?:|I )fill in "([^"]*)" for "([^"]*)"$/ do |value, field|
|
|
65
|
+
fill_in(field, :with => value)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Use this to fill in an entire form with data from a table. Example:
|
|
69
|
+
#
|
|
70
|
+
# When I fill in the following:
|
|
71
|
+
# | Account Number | 5002 |
|
|
72
|
+
# | Expiry date | 2009-11-01 |
|
|
73
|
+
# | Note | Nice guy |
|
|
74
|
+
# | Wants Email? | |
|
|
75
|
+
#
|
|
76
|
+
# TODO: Add support for checkbox, select og option
|
|
77
|
+
# based on naming conventions.
|
|
78
|
+
#
|
|
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}"}
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
When /^(?:|I )select "([^"]*)" from "([^"]*)"$/ do |value, field|
|
|
86
|
+
select(value, :from => field)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
When /^(?:|I )check "([^"]*)"$/ do |field|
|
|
90
|
+
check(field)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
When /^(?:|I )uncheck "([^"]*)"$/ do |field|
|
|
94
|
+
uncheck(field)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
When /^(?:|I )choose "([^"]*)"$/ do |field|
|
|
98
|
+
choose(field)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
When /^(?:|I )attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
|
|
102
|
+
attach_file(field, File.expand_path(path))
|
|
103
|
+
end
|
|
104
|
+
|
|
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)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
Then /^(?:|I )should see \/([^\/]*)\/$/ do |regexp|
|
|
114
|
+
regexp = Regexp.new(regexp)
|
|
115
|
+
|
|
116
|
+
if page.respond_to? :should
|
|
117
|
+
page.should have_xpath('//*', :text => regexp)
|
|
118
|
+
else
|
|
119
|
+
assert page.has_xpath?('//*', :text => regexp)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
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)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
Then /^(?:|I )should not see \/([^\/]*)\/$/ do |regexp|
|
|
132
|
+
regexp = Regexp.new(regexp)
|
|
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)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
Then /^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/ do |field, parent, value|
|
|
142
|
+
with_scope(parent) do
|
|
143
|
+
field = find_field(field)
|
|
144
|
+
field_value = (field.tag_name == 'textarea') ? field.text : field.value
|
|
145
|
+
if field_value.respond_to? :should
|
|
146
|
+
field_value.should =~ /#{value}/
|
|
147
|
+
else
|
|
148
|
+
assert_match(/#{value}/, field_value)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
Then /^the "([^"]*)" field(?: within (.*))? should not contain "([^"]*)"$/ do |field, parent, value|
|
|
154
|
+
with_scope(parent) do
|
|
155
|
+
field = find_field(field)
|
|
156
|
+
field_value = (field.tag_name == 'textarea') ? field.text : field.value
|
|
157
|
+
if field_value.respond_to? :should_not
|
|
158
|
+
field_value.should_not =~ /#{value}/
|
|
159
|
+
else
|
|
160
|
+
assert_no_match(/#{value}/, field_value)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should be checked$/ do |label, parent|
|
|
166
|
+
with_scope(parent) do
|
|
167
|
+
field_checked = find_field(label)['checked']
|
|
168
|
+
if field_checked.respond_to? :should
|
|
169
|
+
field_checked.should be_true
|
|
170
|
+
else
|
|
171
|
+
assert field_checked
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
Then /^the "([^"]*)" checkbox(?: within (.*))? should not be checked$/ do |label, parent|
|
|
177
|
+
with_scope(parent) do
|
|
178
|
+
field_checked = find_field(label)['checked']
|
|
179
|
+
if field_checked.respond_to? :should
|
|
180
|
+
field_checked.should be_false
|
|
181
|
+
else
|
|
182
|
+
assert !field_checked
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
Then /^(?:|I )should be on (.+)$/ do |page_name|
|
|
188
|
+
current_path = URI.parse(current_url).path
|
|
189
|
+
if current_path.respond_to? :should
|
|
190
|
+
current_path.should == path_to(page_name)
|
|
191
|
+
else
|
|
192
|
+
assert_equal path_to(page_name), current_path
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
Then /^(?:|I )should have the following query string:$/ do |expected_pairs|
|
|
197
|
+
query = URI.parse(current_url).query
|
|
198
|
+
actual_params = query ? CGI.parse(query) : {}
|
|
199
|
+
expected_params = {}
|
|
200
|
+
expected_pairs.rows_hash.each_pair{|k,v| expected_params[k] = v.split(',')}
|
|
201
|
+
|
|
202
|
+
if actual_params.respond_to? :should
|
|
203
|
+
actual_params.should == expected_params
|
|
204
|
+
else
|
|
205
|
+
assert_equal expected_params, actual_params
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
Then /^show me the page$/ do
|
|
210
|
+
save_and_open_page
|
|
211
|
+
end
|