saulolso-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 +32 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +26 -0
- data/LICENSE +25 -0
- data/README.rdoc +450 -0
- data/Rakefile +100 -0
- data/activeadmin.gemspec +28 -0
- data/cucumber.yml +2 -0
- data/features/comments/commenting.feature +99 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +77 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +45 -0
- data/features/index/formats.feature +10 -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 +79 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +23 -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 +60 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +67 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +15 -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 +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +34 -0
- data/features/step_definitions/index_scope_steps.rb +20 -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 +11 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +20 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/sti_resource.feature +49 -0
- data/features/support/env.rb +92 -0
- data/features/support/paths.rb +48 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +37 -0
- data/lib/active_admin/application.rb +204 -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 +8 -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/arbre.rb +23 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +87 -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/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments.rb +88 -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/dashboard_controller.rb +47 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +215 -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/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/locales/da.yml +26 -0
- data/lib/active_admin/locales/en.yml +34 -0
- data/lib/active_admin/locales/es.yml +34 -0
- data/lib/active_admin/locales/pt.yml +34 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +198 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource.rb +229 -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 +38 -0
- data/lib/active_admin/resource_controller.rb +119 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +43 -0
- data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
- data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
- data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
- data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/lib/active_admin/stylesheets/active_admin.scss +429 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +21 -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 +185 -0
- data/lib/active_admin/view_helpers/form_helper.rb +12 -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/table_helper.rb +12 -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/view_helpers.rb +23 -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/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 +30 -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 +37 -0
- data/lib/active_admin/views/index_as_block.rb +24 -0
- data/lib/active_admin/views/index_as_blog.rb +89 -0
- data/lib/active_admin/views/index_as_grid.rb +49 -0
- data/lib/active_admin/views/index_as_table.rb +75 -0
- data/lib/active_admin/views/pages/base.rb +144 -0
- data/lib/active_admin/views/pages/dashboard.rb +59 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +66 -0
- data/lib/active_admin/views/pages/new.rb +27 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
- data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
- data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
- data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +71 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
- data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/orderable.png +0 -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/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/spec_helper.rb +156 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +32 -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/action_items_spec.rb +27 -0
- data/spec/unit/application_spec.rb +67 -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/components/attributes_table_spec.rb +100 -0
- data/spec/unit/components/columns_spec.rb +75 -0
- data/spec/unit/components/panel_spec.rb +31 -0
- data/spec/unit/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/components/status_tag_spec.rb +81 -0
- data/spec/unit/components/table_for_spec.rb +130 -0
- data/spec/unit/controller_filters_spec.rb +27 -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 +179 -0
- data/spec/unit/form_builder_spec.rb +238 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +203 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +147 -0
- data/spec/unit/resource_spec.rb +290 -0
- data/spec/unit/routing_spec.rb +88 -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 +16 -0
- metadata +482 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require "bundler"
|
|
2
|
+
Bundler.setup
|
|
3
|
+
Bundler::GemHelper.install_tasks
|
|
4
|
+
|
|
5
|
+
require 'rake'
|
|
6
|
+
|
|
7
|
+
def cmd(command)
|
|
8
|
+
puts command
|
|
9
|
+
system command
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
desc "Install all supported versions of rails"
|
|
13
|
+
task :install_all_rails do
|
|
14
|
+
(0..7).to_a.each do |v|
|
|
15
|
+
system "rm Gemfile.lock"
|
|
16
|
+
puts "Installing for RAILS=3.0.#{v}"
|
|
17
|
+
cmd "RAILS=3.0.#{v} bundle install"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "Creates a test rails app for the specs to run against"
|
|
22
|
+
task :setup do
|
|
23
|
+
require 'rails/version'
|
|
24
|
+
system("mkdir spec/rails") unless File.exists?("spec/rails")
|
|
25
|
+
system "bundle exec rails new spec/rails/rails-#{Rails::VERSION::STRING} -m spec/support/rails_template.rb"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
namespace :local do
|
|
29
|
+
desc "Creates a local rails app to play with in development"
|
|
30
|
+
task :setup do
|
|
31
|
+
unless File.exists? "test-rails-app"
|
|
32
|
+
system "bundle exec rails new test-rails-app -m spec/support/rails_template_with_data.rb"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
desc "Start a local rails app to play"
|
|
37
|
+
task :server => :setup do
|
|
38
|
+
exec "cd test-rails-app && GEMFILE=../Gemfile bundle exec rails s"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc "Load the local rails console"
|
|
42
|
+
task :console => :setup do
|
|
43
|
+
exec "cd test-rails-app && GEMFILE=../Gemfile bundle exec rails c"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
require "rspec/core/rake_task"
|
|
48
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
49
|
+
|
|
50
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
51
|
+
spec.rcov = true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Run the specs & cukes
|
|
55
|
+
task :default do
|
|
56
|
+
# Force spec files to be loaded and ran in alphabetical order.
|
|
57
|
+
specs_unit = Dir['spec/unit/**/*_spec.rb'].sort.join(' ')
|
|
58
|
+
specs_integration = Dir['spec/integration/**/*_spec.rb'].sort.join(' ')
|
|
59
|
+
exit [
|
|
60
|
+
cmd("export RAILS=3.0.5 && export RAILS_ENV=test && bundle exec rspec #{specs_unit}"),
|
|
61
|
+
cmd("export RAILS=3.0.5 && export RAILS_ENV=test && bundle exec rspec #{specs_integration}"),
|
|
62
|
+
cmd("export RAILS=3.0.5 && export RAILS_ENV=cucumber && bundle exec cucumber features"),
|
|
63
|
+
].uniq == [true]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
namespace :spec do
|
|
67
|
+
desc "Run specs for all versions of rails"
|
|
68
|
+
task :all do
|
|
69
|
+
(0..6).to_a.each do |v|
|
|
70
|
+
puts "Running for Rails 3.0.#{v}"
|
|
71
|
+
cmd "rm Gemfile.lock" if File.exists?("Gemfile.lock")
|
|
72
|
+
cmd "/usr/bin/env RAILS=3.0.#{v} bundle install"
|
|
73
|
+
cmd "/usr/bin/env RAILS=3.0.#{v} rake spec"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
require 'cucumber/rake/task'
|
|
79
|
+
|
|
80
|
+
namespace :cucumber do
|
|
81
|
+
Cucumber::Rake::Task.new(:all) do |t|
|
|
82
|
+
t.profile = 'default'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
Cucumber::Rake::Task.new(:wip) do |t|
|
|
86
|
+
t.profile = 'wip'
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
task :cucumber => "cucumber:all"
|
|
91
|
+
|
|
92
|
+
require 'rake/rdoctask'
|
|
93
|
+
Rake::RDocTask.new do |rdoc|
|
|
94
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
|
95
|
+
|
|
96
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
97
|
+
rdoc.title = "active_admin #{version}"
|
|
98
|
+
rdoc.rdoc_files.include('README*')
|
|
99
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
100
|
+
end
|
data/activeadmin.gemspec
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "active_admin/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = %q{saulolso-activeadmin}
|
|
7
|
+
s.version = ActiveAdmin::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.homepage = %q{http://activeadmin.info}
|
|
10
|
+
s.authors = ["Greg Bell"]
|
|
11
|
+
s.email = ["gregdbell@gmail.com"]
|
|
12
|
+
s.description = %q{The administration framework for Ruby on Rails.}
|
|
13
|
+
s.summary = %q{The administration framework for Ruby on Rails.}
|
|
14
|
+
|
|
15
|
+
s.files = `git ls-files`.split("\n").sort
|
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
|
+
s.require_paths = ["lib"]
|
|
19
|
+
|
|
20
|
+
s.add_dependency("rails", ">= 3.0.0")
|
|
21
|
+
s.add_dependency("meta_search", ">= 0.9.2")
|
|
22
|
+
s.add_dependency("devise", ">= 1.1.2")
|
|
23
|
+
s.add_dependency("formtastic", ">= 1.1.0")
|
|
24
|
+
s.add_dependency("inherited_resources", ">= 0")
|
|
25
|
+
s.add_dependency("kaminari", ">= 0.12.4")
|
|
26
|
+
s.add_dependency("sass", ">= 3.1.0")
|
|
27
|
+
s.add_dependency("fastercsv", ">= 0")
|
|
28
|
+
end
|
data/cucumber.yml
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
Feature: Commenting
|
|
2
|
+
|
|
3
|
+
As a user
|
|
4
|
+
In order to document changes and have a discussion
|
|
5
|
+
I want to store and view comments on a resource
|
|
6
|
+
|
|
7
|
+
Background:
|
|
8
|
+
Given a post with the title "Hello World" written by "Jane Doe" exists
|
|
9
|
+
|
|
10
|
+
Scenario: View a resource with no comments
|
|
11
|
+
Given a show configuration of:
|
|
12
|
+
"""
|
|
13
|
+
ActiveAdmin.register Post
|
|
14
|
+
"""
|
|
15
|
+
Then I should see "Comments (0)"
|
|
16
|
+
And I should see "No comments yet."
|
|
17
|
+
|
|
18
|
+
Scenario: Create a new comment
|
|
19
|
+
Given a show configuration of:
|
|
20
|
+
"""
|
|
21
|
+
ActiveAdmin.register Post
|
|
22
|
+
"""
|
|
23
|
+
When I add a comment "Hello from Comment"
|
|
24
|
+
Then I should see a flash with "Comment was successfully created"
|
|
25
|
+
And I should be in the resource section for posts
|
|
26
|
+
And I should see "Comments (1)"
|
|
27
|
+
And I should see "Hello from Comment"
|
|
28
|
+
And I should see a comment by "admin@example.com"
|
|
29
|
+
|
|
30
|
+
Scenario: View resource with comments turned off
|
|
31
|
+
Given a show configuration of:
|
|
32
|
+
"""
|
|
33
|
+
ActiveAdmin.register Post do
|
|
34
|
+
config.comments = false
|
|
35
|
+
end
|
|
36
|
+
"""
|
|
37
|
+
Then I should not see "Comments"
|
|
38
|
+
|
|
39
|
+
Scenario: View a resource in a namespace that doesn't have comments
|
|
40
|
+
Given a configuration of:
|
|
41
|
+
"""
|
|
42
|
+
ActiveAdmin.register Post, :namespace => :new_namespace
|
|
43
|
+
"""
|
|
44
|
+
Given I am logged in
|
|
45
|
+
When I am on the index page for posts in the new_namespace namespace
|
|
46
|
+
And I follow "View"
|
|
47
|
+
Then I should not see "Comments"
|
|
48
|
+
|
|
49
|
+
Scenario: Creating a comment in one namespace does not create it in another
|
|
50
|
+
Given a show configuration of:
|
|
51
|
+
"""
|
|
52
|
+
ActiveAdmin.application.allow_comments_in << :public
|
|
53
|
+
ActiveAdmin.register Post
|
|
54
|
+
ActiveAdmin.register Post, :namespace => :public
|
|
55
|
+
"""
|
|
56
|
+
When I add a comment "Hello world in admin namespace"
|
|
57
|
+
Then I should see "Hello world in admin namespace"
|
|
58
|
+
When I am on the index page for posts in the public namespace
|
|
59
|
+
And I follow "View"
|
|
60
|
+
Then I should not see "Hello world in admin namespace"
|
|
61
|
+
And I should see "Comments (0)"
|
|
62
|
+
|
|
63
|
+
When I add a comment "Hello world in public namespace"
|
|
64
|
+
Then I should see "Hello world in public namespace"
|
|
65
|
+
When I am on the index page for posts in the admin namespace
|
|
66
|
+
And I follow "View"
|
|
67
|
+
Then I should not see "Hello world in public namespace"
|
|
68
|
+
And I should see "Comments (1)"
|
|
69
|
+
|
|
70
|
+
Scenario: Creating a comment on an aliased resource
|
|
71
|
+
Given a configuration of:
|
|
72
|
+
"""
|
|
73
|
+
ActiveAdmin.register Post, :as => "Article"
|
|
74
|
+
"""
|
|
75
|
+
Given I am logged in
|
|
76
|
+
When I am on the index page for articles
|
|
77
|
+
And I follow "View"
|
|
78
|
+
When I add a comment "Hello from Comment"
|
|
79
|
+
Then I should see a flash with "Comment was successfully created"
|
|
80
|
+
And I should be in the resource section for articles
|
|
81
|
+
|
|
82
|
+
Scenario: Create an empty comment
|
|
83
|
+
Given a show configuration of:
|
|
84
|
+
"""
|
|
85
|
+
ActiveAdmin.register Post
|
|
86
|
+
"""
|
|
87
|
+
When I add a comment ""
|
|
88
|
+
Then I should see a flash with "Comment wasn't saved, text was empty."
|
|
89
|
+
And I should see "Comments (0)"
|
|
90
|
+
|
|
91
|
+
Scenario: Viewing all commments for a namespace
|
|
92
|
+
Given a show configuration of:
|
|
93
|
+
"""
|
|
94
|
+
ActiveAdmin.register Post
|
|
95
|
+
"""
|
|
96
|
+
When I add a comment "Hello from Comment"
|
|
97
|
+
When I am on the index page for comments
|
|
98
|
+
Then I should see a table header with "Body"
|
|
99
|
+
And I should see "Hello from Comment"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Feature: Viewing Index of Comments
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given a post with the title "Hello World" written by "Jane Doe" exists
|
|
5
|
+
Given a show configuration of:
|
|
6
|
+
"""
|
|
7
|
+
ActiveAdmin.register Post
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
Scenario: Viewing all commments for a namespace
|
|
11
|
+
When I add a comment "Hello from Comment"
|
|
12
|
+
When I am on the index page for comments
|
|
13
|
+
Then I should see a table header with "Body"
|
|
14
|
+
And I should see a table header with "Resource"
|
|
15
|
+
And I should see a table header with "Author"
|
|
16
|
+
And I should see "Hello from Comment"
|
|
17
|
+
And I should see a link to "Hello World"
|
|
18
|
+
And I should see "admin@example.com"
|
|
19
|
+
And I should not see an action item button "New Comment"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Feature: Dashboard
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am logged in
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Scenario: With no configuration
|
|
8
|
+
Given a configuration of:
|
|
9
|
+
"""
|
|
10
|
+
"""
|
|
11
|
+
When I go to the dashboard
|
|
12
|
+
Then I should see the default welcome message
|
|
13
|
+
|
|
14
|
+
Scenario: Displaying a dashboard widget
|
|
15
|
+
Given a configuration of:
|
|
16
|
+
"""
|
|
17
|
+
ActiveAdmin::Dashboards.build do
|
|
18
|
+
section 'Hello World' do
|
|
19
|
+
para "Hello world from the content"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
"""
|
|
23
|
+
When I go to the dashboard
|
|
24
|
+
Then I should not see the default welcome message
|
|
25
|
+
And I should see a dashboard widget "Hello World"
|
|
26
|
+
And I should see "Hello world from the content"
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Feature: Edit Page
|
|
2
|
+
|
|
3
|
+
Customizing the form to edit resources
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given a category named "Music" exists
|
|
7
|
+
And a user named "John Doe" exists
|
|
8
|
+
And a post with the title "Hello World" written by "John Doe" exists
|
|
9
|
+
And I am logged in
|
|
10
|
+
Given a configuration of:
|
|
11
|
+
"""
|
|
12
|
+
ActiveAdmin.register Post
|
|
13
|
+
"""
|
|
14
|
+
When I am on the index page for posts
|
|
15
|
+
|
|
16
|
+
Scenario: Default form with no config
|
|
17
|
+
Given I follow "Edit"
|
|
18
|
+
Then the "Title" field should contain "Hello World"
|
|
19
|
+
And the "Body" field should contain ""
|
|
20
|
+
And the "Category" field should contain ""
|
|
21
|
+
And the "Author" field should contain "John Doe"
|
|
22
|
+
When I fill in "Title" with "Hello World from update"
|
|
23
|
+
When I press "Update Post"
|
|
24
|
+
Then I should see "Post was successfully updated."
|
|
25
|
+
And I should see the attribute "Title" with "Hello World from update"
|
|
26
|
+
And I should see the attribute "Author" with "John Doe"
|
|
27
|
+
|
|
28
|
+
Scenario: Generating a custom form
|
|
29
|
+
Given a configuration of:
|
|
30
|
+
"""
|
|
31
|
+
ActiveAdmin.register Post do
|
|
32
|
+
form do |f|
|
|
33
|
+
f.inputs "Your Post" do
|
|
34
|
+
f.input :title
|
|
35
|
+
f.input :body
|
|
36
|
+
end
|
|
37
|
+
f.inputs "Publishing" do
|
|
38
|
+
f.input :published_at
|
|
39
|
+
end
|
|
40
|
+
f.buttons
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
"""
|
|
44
|
+
Given I follow "Edit"
|
|
45
|
+
Then I should see a fieldset titled "Your Post"
|
|
46
|
+
And I should see a fieldset titled "Publishing"
|
|
47
|
+
And the "Title" field should contain "Hello World"
|
|
48
|
+
And the "Body" field should contain ""
|
|
49
|
+
When I fill in "Title" with "Hello World from update"
|
|
50
|
+
When I press "Update Post"
|
|
51
|
+
Then I should see "Post was successfully updated."
|
|
52
|
+
And I should see the attribute "Title" with "Hello World from update"
|
|
53
|
+
And I should see the attribute "Author" with "John Doe"
|
|
54
|
+
|
|
55
|
+
Scenario: Generating a form from a partial
|
|
56
|
+
Given "app/views/admin/posts/_form.html.erb" contains:
|
|
57
|
+
"""
|
|
58
|
+
<% url = @post.new_record? ? admin_posts_path : admin_post_path(@post) %>
|
|
59
|
+
<%= active_admin_form_for @post, :url => url do |f|
|
|
60
|
+
f.inputs :title, :body
|
|
61
|
+
f.buttons
|
|
62
|
+
end %>
|
|
63
|
+
"""
|
|
64
|
+
Given a configuration of:
|
|
65
|
+
"""
|
|
66
|
+
ActiveAdmin.register Post do
|
|
67
|
+
form :partial => "form"
|
|
68
|
+
end
|
|
69
|
+
"""
|
|
70
|
+
Given I follow "Edit"
|
|
71
|
+
Then the "Title" field should contain "Hello World"
|
|
72
|
+
And the "Body" field should contain ""
|
|
73
|
+
When I fill in "Title" with "Hello World from update"
|
|
74
|
+
When I press "Update Post"
|
|
75
|
+
Then I should see "Post was successfully updated."
|
|
76
|
+
And I should see the attribute "Title" with "Hello World from update"
|
|
77
|
+
And I should see the attribute "Author" with "John Doe"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Feature: First Boot
|
|
2
|
+
|
|
3
|
+
As a developer
|
|
4
|
+
In order to ensure I have a great first experience
|
|
5
|
+
I want Active Admin to just work on install
|
|
6
|
+
|
|
7
|
+
Scenario: Visiting /admin and logging in with no configurations
|
|
8
|
+
Given a configuration of:
|
|
9
|
+
"""
|
|
10
|
+
"""
|
|
11
|
+
And an admin user "admin@example.com" exists
|
|
12
|
+
When I go to the dashboard
|
|
13
|
+
When I fill in "Email" with "admin@example.com"
|
|
14
|
+
And I fill in "Password" with "password"
|
|
15
|
+
And I press "Login"
|
|
16
|
+
Then I should be on the the dashboard
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Feature: Global Navigation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
Background:
|
|
5
|
+
Given a configuration of:
|
|
6
|
+
"""
|
|
7
|
+
ActiveAdmin.register Post
|
|
8
|
+
"""
|
|
9
|
+
Given I am logged in
|
|
10
|
+
And 10 posts exist
|
|
11
|
+
|
|
12
|
+
Scenario: Viewing the current section in the global navigation
|
|
13
|
+
Given I am on the index page for posts
|
|
14
|
+
Then the "Posts" tab should be selected
|
|
15
|
+
|
|
16
|
+
Scenario: Viewing the current section in the global navigation when on new page
|
|
17
|
+
Given I am on the index page for posts
|
|
18
|
+
And I follow "New Post"
|
|
19
|
+
Then the "Posts" tab should be selected
|
|
20
|
+
|
|
21
|
+
Scenario: Viewing the current section in the global navigation when on show page
|
|
22
|
+
Given I am on the index page for posts
|
|
23
|
+
And I follow "View"
|
|
24
|
+
Then the "Posts" tab should be selected
|
|
25
|
+
|
|
26
|
+
Scenario: Viewing the current section in the global navigation when on edit page
|
|
27
|
+
Given I am on the index page for posts
|
|
28
|
+
And I follow "View"
|
|
29
|
+
And I follow "Edit Post"
|
|
30
|
+
Then the "Posts" tab should be selected
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Feature: Format as CSV
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am logged in
|
|
5
|
+
|
|
6
|
+
Scenario: Default
|
|
7
|
+
Given a configuration of:
|
|
8
|
+
"""
|
|
9
|
+
ActiveAdmin.register Post
|
|
10
|
+
"""
|
|
11
|
+
And a post with the title "Hello World" exists
|
|
12
|
+
When I am on the index page for posts
|
|
13
|
+
And I follow "CSV"
|
|
14
|
+
And I should download a CSV file for "posts" containing:
|
|
15
|
+
| Id | Title | Body | Published At | Created At | Updated At |
|
|
16
|
+
| \d+ | Hello World | | | (.*) | (.*) |
|
|
17
|
+
|
|
18
|
+
Scenario: Default with alias
|
|
19
|
+
Given a configuration of:
|
|
20
|
+
"""
|
|
21
|
+
ActiveAdmin.register Post, :as => "MyArticle"
|
|
22
|
+
"""
|
|
23
|
+
When I am on the index page for my_articles
|
|
24
|
+
And I follow "CSV"
|
|
25
|
+
And I should download a CSV file for "my-articles" containing:
|
|
26
|
+
| Id | Title | Body | Published At | Created At | Updated At |
|
|
27
|
+
|
|
28
|
+
Scenario: With CSV format customization
|
|
29
|
+
Given a configuration of:
|
|
30
|
+
"""
|
|
31
|
+
ActiveAdmin.register Post do
|
|
32
|
+
csv do
|
|
33
|
+
column :title
|
|
34
|
+
column("Last update") { |post| post.updated_at }
|
|
35
|
+
column("Copyright") { "Greg Bell" }
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
"""
|
|
39
|
+
And a post with the title "Hello, World" exists
|
|
40
|
+
When I am on the index page for posts
|
|
41
|
+
And I follow "CSV"
|
|
42
|
+
And I should download a CSV file for "posts" containing:
|
|
43
|
+
| Title | Last update | Copyright |
|
|
44
|
+
| Hello, World | (.*) | Greg Bell |
|
|
45
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Feature: Index Formats
|
|
2
|
+
|
|
3
|
+
Scenario: View index with default formats
|
|
4
|
+
Given an index configuration of:
|
|
5
|
+
"""
|
|
6
|
+
ActiveAdmin.register Post
|
|
7
|
+
"""
|
|
8
|
+
Then I should see a link to download "CSV"
|
|
9
|
+
And I should see a link to download "XML"
|
|
10
|
+
And I should see a link to download "JSON"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
Feature: Index as Block
|
|
2
|
+
|
|
3
|
+
Viewing the resource as a block which is renderered by the user
|
|
4
|
+
|
|
5
|
+
Scenario: Viewing the index as a block
|
|
6
|
+
Given a post with the title "Hello World from Block" exists
|
|
7
|
+
And an index configuration of:
|
|
8
|
+
"""
|
|
9
|
+
ActiveAdmin.register Post do
|
|
10
|
+
index :as => :block do |post|
|
|
11
|
+
span(link_to(post.title, admin_post_path(post)))
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
"""
|
|
15
|
+
Then I should see "Hello World from Block" within "a"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Feature: Index as Blog
|
|
2
|
+
|
|
3
|
+
Viewing resources as a blog on the index page
|
|
4
|
+
|
|
5
|
+
Scenario: Viewing the blog with a resource
|
|
6
|
+
Given a post with the title "Hello World" exists
|
|
7
|
+
And an index configuration of:
|
|
8
|
+
"""
|
|
9
|
+
ActiveAdmin.register Post do
|
|
10
|
+
index :as => :blog
|
|
11
|
+
end
|
|
12
|
+
"""
|
|
13
|
+
And I am logged in
|
|
14
|
+
When I am on the index page for posts
|
|
15
|
+
Then I should see "Hello World" within "h3"
|
|
16
|
+
And I should see a link to "Hello World"
|
|
17
|
+
|
|
18
|
+
Scenario: Viewing the blog with a resource as a simple configuration
|
|
19
|
+
Given a post with the title "Hello World" and body "My great post body" exists
|
|
20
|
+
And an index configuration of:
|
|
21
|
+
"""
|
|
22
|
+
ActiveAdmin.register Post do
|
|
23
|
+
index :as => :blog do
|
|
24
|
+
title :title
|
|
25
|
+
body :body
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
"""
|
|
29
|
+
Then I should see "Hello World" within "h3"
|
|
30
|
+
And I should see a link to "Hello World"
|
|
31
|
+
And I should see "My great post body" within ".post"
|
|
32
|
+
|
|
33
|
+
Scenario: Viewing the blog with a resource as a block configuration
|
|
34
|
+
Given a post with the title "Hello World" and body "My great post body" exists
|
|
35
|
+
And an index configuration of:
|
|
36
|
+
"""
|
|
37
|
+
ActiveAdmin.register Post do
|
|
38
|
+
index :as => :blog do
|
|
39
|
+
title do |post|
|
|
40
|
+
post.title + " From Block"
|
|
41
|
+
end
|
|
42
|
+
body do |post|
|
|
43
|
+
post.body + " From Block"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
"""
|
|
48
|
+
Then I should see "Hello World From Block" within "h3"
|
|
49
|
+
And I should see a link to "Hello World From Block"
|
|
50
|
+
And I should see "My great post body From Block" within ".post"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Feature: Index as Grid
|
|
2
|
+
|
|
3
|
+
Viewing resources as a grid on the index page
|
|
4
|
+
|
|
5
|
+
Scenario: Viewing index as a grid with a simple block configuration
|
|
6
|
+
Given 9 posts exist
|
|
7
|
+
And an index configuration of:
|
|
8
|
+
"""
|
|
9
|
+
ActiveAdmin.register Post do
|
|
10
|
+
index :as => :grid do |post|
|
|
11
|
+
h2 auto_link(post)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
"""
|
|
15
|
+
Then the table ".index_grid" should have 3 rows
|
|
16
|
+
And the table ".index_grid" should have 3 columns
|
|
17
|
+
And there should be 9 "a" tags within "table.index_grid"
|
|
18
|
+
|
|
19
|
+
Scenario: Viewing index as a grid and set the number of columns
|
|
20
|
+
Given 9 posts exist
|
|
21
|
+
And an index configuration of:
|
|
22
|
+
"""
|
|
23
|
+
ActiveAdmin.register Post do
|
|
24
|
+
index :as => :grid, :columns => 1 do |post|
|
|
25
|
+
h2 auto_link(post)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
"""
|
|
29
|
+
Then the table ".index_grid" should have 9 rows
|
|
30
|
+
And the table ".index_grid" should have 1 columns
|
|
31
|
+
And there should be 9 "a" tags within "table.index_grid"
|
|
32
|
+
|
|
33
|
+
Scenario: Viewing index as a grid with an odd number of items
|
|
34
|
+
Given 9 posts exist
|
|
35
|
+
And an index configuration of:
|
|
36
|
+
"""
|
|
37
|
+
ActiveAdmin.register Post do
|
|
38
|
+
index :as => :grid, :columns => 2 do |post|
|
|
39
|
+
h2 auto_link(post)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
"""
|
|
43
|
+
Then the table ".index_grid" should have 5 rows
|
|
44
|
+
And the table ".index_grid" should have 2 columns
|
|
45
|
+
And there should be 9 "a" tags within "table.index_grid"
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
Feature: Index as Table
|
|
2
|
+
|
|
3
|
+
Viewing resources as a table on the index page
|
|
4
|
+
|
|
5
|
+
Scenario: Viewing the default table with no resources
|
|
6
|
+
Given an index configuration of:
|
|
7
|
+
"""
|
|
8
|
+
ActiveAdmin.register Post
|
|
9
|
+
"""
|
|
10
|
+
Then I should see a sortable table header with "ID"
|
|
11
|
+
And I should see a sortable table header with "Title"
|
|
12
|
+
|
|
13
|
+
Scenario: Viewing the default table with a resource
|
|
14
|
+
Given a post with the title "Hello World" exists
|
|
15
|
+
And an index configuration of:
|
|
16
|
+
"""
|
|
17
|
+
ActiveAdmin.register Post
|
|
18
|
+
"""
|
|
19
|
+
Then I should see "Hello World"
|
|
20
|
+
Then I should see nicely formatted datetimes
|
|
21
|
+
And I should see a link to "View"
|
|
22
|
+
And I should see a link to "Edit"
|
|
23
|
+
And I should see a link to "Delete"
|
|
24
|
+
|
|
25
|
+
Scenario: Customizing the columns with symbols
|
|
26
|
+
Given a post with the title "Hello World" and body "From the body" exists
|
|
27
|
+
And an index configuration of:
|
|
28
|
+
"""
|
|
29
|
+
ActiveAdmin.register Post do
|
|
30
|
+
index do
|
|
31
|
+
column :title
|
|
32
|
+
column :body
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
"""
|
|
36
|
+
Then I should see a sortable table header with "Title"
|
|
37
|
+
And I should see a sortable table header with "Body"
|
|
38
|
+
And I should see "Hello World"
|
|
39
|
+
And I should see "From the body"
|
|
40
|
+
|
|
41
|
+
Scenario: Customizing the columns with a block
|
|
42
|
+
Given a post with the title "Hello World" and body "From the body" exists
|
|
43
|
+
And an index configuration of:
|
|
44
|
+
"""
|
|
45
|
+
ActiveAdmin.register Post do
|
|
46
|
+
index do
|
|
47
|
+
column("My Title") do |post|
|
|
48
|
+
post.title
|
|
49
|
+
end
|
|
50
|
+
column("My Body") do |post|
|
|
51
|
+
post.body
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
"""
|
|
56
|
+
Then I should see a table header with "My Title"
|
|
57
|
+
And I should see a table header with "My Body"
|
|
58
|
+
And I should see "Hello World"
|
|
59
|
+
And I should see "From the body"
|
|
60
|
+
|
|
61
|
+
Scenario: Showing and Hiding columns
|
|
62
|
+
Given a post with the title "Hello World" and body "From the body" exists
|
|
63
|
+
And an index configuration of:
|
|
64
|
+
"""
|
|
65
|
+
ActiveAdmin.register Post do
|
|
66
|
+
index do
|
|
67
|
+
if current_active_admin_user
|
|
68
|
+
column :title
|
|
69
|
+
end
|
|
70
|
+
if current_active_admin_user.nil?
|
|
71
|
+
column :body
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
"""
|
|
76
|
+
Then I should see a sortable table header with "Title"
|
|
77
|
+
And I should not see a table header with "Body"
|
|
78
|
+
And I should see "Hello World"
|
|
79
|
+
And I should not see "From the body"
|