admin_assistant 1.0.1 → 1.0.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/Rakefile +1 -0
- data/VERSION +1 -1
- data/admin_assistant.gemspec +1 -285
- metadata +3 -287
- data/test_rails_app/README +0 -256
- data/test_rails_app/Rakefile +0 -13
- data/test_rails_app/app/controllers/admin/appointments2_controller.rb +0 -15
- data/test_rails_app/app/controllers/admin/appointments_controller.rb +0 -11
- data/test_rails_app/app/controllers/admin/blog_posts2_controller.rb +0 -138
- data/test_rails_app/app/controllers/admin/blog_posts3_controller.rb +0 -76
- data/test_rails_app/app/controllers/admin/blog_posts4_controller.rb +0 -21
- data/test_rails_app/app/controllers/admin/blog_posts5_controller.rb +0 -27
- data/test_rails_app/app/controllers/admin/blog_posts6_controller.rb +0 -10
- data/test_rails_app/app/controllers/admin/blog_posts_controller.rb +0 -8
- data/test_rails_app/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +0 -15
- data/test_rails_app/app/controllers/admin/blog_posts_read_only_controller.rb +0 -19
- data/test_rails_app/app/controllers/admin/bookmarks_controller.rb +0 -11
- data/test_rails_app/app/controllers/admin/comments2_controller.rb +0 -14
- data/test_rails_app/app/controllers/admin/comments_controller.rb +0 -12
- data/test_rails_app/app/controllers/admin/file_column_images2_controller.rb +0 -10
- data/test_rails_app/app/controllers/admin/file_column_images_controller.rb +0 -6
- data/test_rails_app/app/controllers/admin/images2_controller.rb +0 -11
- data/test_rails_app/app/controllers/admin/images_controller.rb +0 -6
- data/test_rails_app/app/controllers/admin/misconfigured1_controller.rb +0 -7
- data/test_rails_app/app/controllers/admin/not_migrated_yets_controller.rb +0 -9
- data/test_rails_app/app/controllers/admin/product_categories2_controller.rb +0 -7
- data/test_rails_app/app/controllers/admin/product_categories_controller.rb +0 -5
- data/test_rails_app/app/controllers/admin/products2_controller.rb +0 -15
- data/test_rails_app/app/controllers/admin/products_controller.rb +0 -31
- data/test_rails_app/app/controllers/admin/television_airings_controller.rb +0 -5
- data/test_rails_app/app/controllers/admin/television_time_slots_controller.rb +0 -5
- data/test_rails_app/app/controllers/admin/users2_controller.rb +0 -10
- data/test_rails_app/app/controllers/admin/users_controller.rb +0 -63
- data/test_rails_app/app/controllers/application.rb +0 -16
- data/test_rails_app/app/controllers/application_controller.rb +0 -16
- data/test_rails_app/app/controllers/blog_posts_controller.rb +0 -5
- data/test_rails_app/app/helpers/admin/appointments2_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/appointments_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/blog_posts2_helper.rb +0 -27
- data/test_rails_app/app/helpers/admin/blog_posts3_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/blog_posts4_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/blog_posts6_helper.rb +0 -16
- data/test_rails_app/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +0 -29
- data/test_rails_app/app/helpers/admin/blog_posts_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/blog_posts_read_only_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/bookmarks_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/comments2_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/comments_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/file_column_images2_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/file_column_images_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/images2_helper.rb +0 -8
- data/test_rails_app/app/helpers/admin/images_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/misconfigured1_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/not_migrated_yets_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/product_categories2_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/product_categories_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/products2_helper.rb +0 -3
- data/test_rails_app/app/helpers/admin/products_helper.rb +0 -6
- data/test_rails_app/app/helpers/admin/television_airings_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/television_time_slots_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/users2_helper.rb +0 -2
- data/test_rails_app/app/helpers/admin/users_helper.rb +0 -25
- data/test_rails_app/app/helpers/application_helper.rb +0 -3
- data/test_rails_app/app/helpers/blog_posts_helper.rb +0 -2
- data/test_rails_app/app/models/appointment.rb +0 -5
- data/test_rails_app/app/models/blog_post.rb +0 -14
- data/test_rails_app/app/models/blog_post_tag.rb +0 -6
- data/test_rails_app/app/models/bookmark.rb +0 -6
- data/test_rails_app/app/models/comment.rb +0 -4
- data/test_rails_app/app/models/file_column_image.rb +0 -3
- data/test_rails_app/app/models/image.rb +0 -3
- data/test_rails_app/app/models/not_migrated_yet.rb +0 -2
- data/test_rails_app/app/models/product.rb +0 -7
- data/test_rails_app/app/models/product_category.rb +0 -9
- data/test_rails_app/app/models/tag.rb +0 -4
- data/test_rails_app/app/models/television_airing.rb +0 -3
- data/test_rails_app/app/models/television_time_slot.rb +0 -11
- data/test_rails_app/app/models/user.rb +0 -14
- data/test_rails_app/app/views/admin/appointments/_subject_input.html.erb +0 -2
- data/test_rails_app/app/views/admin/appointments2/_time_input.html.erb +0 -31
- data/test_rails_app/app/views/admin/blog_posts2/_after_form.html.erb +0 -5
- data/test_rails_app/app/views/admin/blog_posts2/_after_index.html.erb +0 -1
- data/test_rails_app/app/views/admin/blog_posts2/_after_tags_input.html.erb +0 -16
- data/test_rails_app/app/views/admin/blog_posts2/_before_index.html.erb +0 -2
- data/test_rails_app/app/views/admin/blog_posts5/_after_index_header.html.erb +0 -8
- data/test_rails_app/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +0 -1
- data/test_rails_app/app/views/admin/products/_name_input.html.erb +0 -2
- data/test_rails_app/app/views/admin/products/_percent_off_input.html.erb +0 -2
- data/test_rails_app/app/views/admin/products/_price_input.html.erb +0 -10
- data/test_rails_app/app/views/blog_posts/show.html.erb +0 -13
- data/test_rails_app/app/views/layouts/admin.html.erb +0 -31
- data/test_rails_app/config/boot.rb +0 -109
- data/test_rails_app/config/database.yml +0 -28
- data/test_rails_app/config/environment.rb +0 -78
- data/test_rails_app/config/environments/development.rb +0 -17
- data/test_rails_app/config/environments/production.rb +0 -24
- data/test_rails_app/config/environments/test.rb +0 -24
- data/test_rails_app/config/initializers/inflections.rb +0 -10
- data/test_rails_app/config/initializers/mime_types.rb +0 -5
- data/test_rails_app/config/initializers/new_rails_defaults.rb +0 -17
- data/test_rails_app/config/locales/en.yml +0 -5
- data/test_rails_app/config/routes.rb +0 -43
- data/test_rails_app/db/migrate/20090213215514_create_blog_posts.rb +0 -12
- data/test_rails_app/db/migrate/20090217225542_add_body_to_blog_posts.rb +0 -9
- data/test_rails_app/db/migrate/20090221220917_create_tags.rb +0 -13
- data/test_rails_app/db/migrate/20090221220947_create_blog_post_tags.rb +0 -14
- data/test_rails_app/db/migrate/20090222162204_add_textile_to_blog_posts.rb +0 -9
- data/test_rails_app/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +0 -9
- data/test_rails_app/db/migrate/20090301191722_create_images.rb +0 -16
- data/test_rails_app/db/migrate/20090305165345_create_accounts.rb +0 -14
- data/test_rails_app/db/migrate/20090307225027_rename_accounts_to_users.rb +0 -9
- data/test_rails_app/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +0 -9
- data/test_rails_app/db/migrate/20090309185114_change_blog_posts_textile.rb +0 -9
- data/test_rails_app/db/migrate/20090309193635_create_products.rb +0 -14
- data/test_rails_app/db/migrate/20090309203056_create_comments.rb +0 -15
- data/test_rails_app/db/migrate/20090323005947_create_file_column_images.rb +0 -12
- data/test_rails_app/db/migrate/20090326160049_add_birthday_to_users.rb +0 -9
- data/test_rails_app/db/migrate/20090326223606_add_state_to_users.rb +0 -9
- data/test_rails_app/db/migrate/20090503134004_add_file_column_image_to_products.rb +0 -9
- data/test_rails_app/db/migrate/20090617173651_create_bookmarks.rb +0 -15
- data/test_rails_app/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +0 -9
- data/test_rails_app/db/migrate/20090625144313_add_avatar_fields_to_user.rb +0 -11
- data/test_rails_app/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +0 -9
- data/test_rails_app/db/migrate/20090701171857_add_force_textile_to_users.rb +0 -9
- data/test_rails_app/db/migrate/20090704163647_add_deleted_at_to_products.rb +0 -9
- data/test_rails_app/db/migrate/20090704173800_add_sale_fields_to_products.rb +0 -13
- data/test_rails_app/db/migrate/20090714024501_create_product_categories.rb +0 -15
- data/test_rails_app/db/migrate/20090819162835_add_admin_level_to_users.rb +0 -9
- data/test_rails_app/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +0 -11
- data/test_rails_app/db/migrate/20091221011256_add_position_to_product_categories.rb +0 -9
- data/test_rails_app/db/migrate/20091222160814_create_appointments.rb +0 -14
- data/test_rails_app/db/migrate/20091227224547_add_user_id_to_appointments.rb +0 -9
- data/test_rails_app/db/migrate/20100214213359_create_television_time_slots.rb +0 -13
- data/test_rails_app/db/migrate/20100214213451_create_television_airings.rb +0 -15
- data/test_rails_app/doc/README_FOR_APP +0 -5
- data/test_rails_app/lib/tasks/rspec.rake +0 -163
- data/test_rails_app/public/404.html +0 -30
- data/test_rails_app/public/422.html +0 -30
- data/test_rails_app/public/500.html +0 -33
- data/test_rails_app/public/dispatch.cgi +0 -10
- data/test_rails_app/public/dispatch.fcgi +0 -24
- data/test_rails_app/public/dispatch.rb +0 -10
- data/test_rails_app/public/favicon.ico +0 -0
- data/test_rails_app/public/images/rails.png +0 -0
- data/test_rails_app/public/index.html +0 -274
- data/test_rails_app/public/javascripts/application.js +0 -2
- data/test_rails_app/public/javascripts/controls.js +0 -963
- data/test_rails_app/public/javascripts/dragdrop.js +0 -973
- data/test_rails_app/public/javascripts/effects.js +0 -1128
- data/test_rails_app/public/javascripts/prototype.js +0 -4320
- data/test_rails_app/public/robots.txt +0 -5
- data/test_rails_app/public/stylesheets/admin.css +0 -3
- data/test_rails_app/public/stylesheets/scaffold.css +0 -54
- data/test_rails_app/script/about +0 -4
- data/test_rails_app/script/autospec +0 -5
- data/test_rails_app/script/console +0 -3
- data/test_rails_app/script/dbconsole +0 -3
- data/test_rails_app/script/destroy +0 -3
- data/test_rails_app/script/generate +0 -3
- data/test_rails_app/script/performance/benchmarker +0 -3
- data/test_rails_app/script/performance/profiler +0 -3
- data/test_rails_app/script/performance/request +0 -3
- data/test_rails_app/script/plugin +0 -3
- data/test_rails_app/script/populate_tables.rb +0 -49
- data/test_rails_app/script/process/inspector +0 -3
- data/test_rails_app/script/process/reaper +0 -3
- data/test_rails_app/script/process/spawner +0 -3
- data/test_rails_app/script/runner +0 -3
- data/test_rails_app/script/server +0 -3
- data/test_rails_app/script/spec +0 -5
- data/test_rails_app/script/spec_server +0 -125
- data/test_rails_app/spec/controllers/admin/appointments2_controller_spec.rb +0 -88
- data/test_rails_app/spec/controllers/admin/appointments_controller_spec.rb +0 -419
- data/test_rails_app/spec/controllers/admin/blog_posts2_controller_spec.rb +0 -1021
- data/test_rails_app/spec/controllers/admin/blog_posts3_controller_spec.rb +0 -532
- data/test_rails_app/spec/controllers/admin/blog_posts4_controller_spec.rb +0 -231
- data/test_rails_app/spec/controllers/admin/blog_posts5_controller_spec.rb +0 -77
- data/test_rails_app/spec/controllers/admin/blog_posts6_controller_spec.rb +0 -49
- data/test_rails_app/spec/controllers/admin/blog_posts_controller_spec.rb +0 -987
- data/test_rails_app/spec/controllers/admin/blog_posts_custom_new_and_edit_controller_spec.rb +0 -99
- data/test_rails_app/spec/controllers/admin/blog_posts_read_only_controller_spec.rb +0 -94
- data/test_rails_app/spec/controllers/admin/bookmarks_controller_spec.rb +0 -505
- data/test_rails_app/spec/controllers/admin/comments2_controller_spec.rb +0 -70
- data/test_rails_app/spec/controllers/admin/comments_controller_spec.rb +0 -82
- data/test_rails_app/spec/controllers/admin/file_column_images2_controller_spec.rb +0 -25
- data/test_rails_app/spec/controllers/admin/file_column_images_controller_spec.rb +0 -82
- data/test_rails_app/spec/controllers/admin/images2_controller_spec.rb +0 -44
- data/test_rails_app/spec/controllers/admin/images_controller_spec.rb +0 -97
- data/test_rails_app/spec/controllers/admin/misconfigured1_controller_spec.rb +0 -21
- data/test_rails_app/spec/controllers/admin/not_migrated_yets_controller_spec.rb +0 -10
- data/test_rails_app/spec/controllers/admin/product_categories2_controller_spec.rb +0 -215
- data/test_rails_app/spec/controllers/admin/product_categories_controller_spec.rb +0 -19
- data/test_rails_app/spec/controllers/admin/products2_controller_spec.rb +0 -203
- data/test_rails_app/spec/controllers/admin/products_controller_spec.rb +0 -255
- data/test_rails_app/spec/controllers/admin/television_airings_controller_spec.rb +0 -32
- data/test_rails_app/spec/controllers/admin/television_time_slots_controller_spec.rb +0 -10
- data/test_rails_app/spec/controllers/admin/users2_controller_spec.rb +0 -65
- data/test_rails_app/spec/controllers/admin/users_controller_spec.rb +0 -344
- data/test_rails_app/spec/controllers/blog_posts_controller_spec.rb +0 -13
- data/test_rails_app/spec/data/ruby_throated.jpg +0 -0
- data/test_rails_app/spec/data/tweenbot.jpg +0 -0
- data/test_rails_app/spec/fixtures/appointments.yml +0 -9
- data/test_rails_app/spec/fixtures/blog_post_tags.yml +0 -9
- data/test_rails_app/spec/fixtures/blog_posts.yml +0 -7
- data/test_rails_app/spec/fixtures/bookmarks.yml +0 -11
- data/test_rails_app/spec/fixtures/comments.yml +0 -11
- data/test_rails_app/spec/fixtures/file_column_images.yml +0 -7
- data/test_rails_app/spec/fixtures/images.yml +0 -7
- data/test_rails_app/spec/fixtures/not_migrated_yets.yml +0 -7
- data/test_rails_app/spec/fixtures/product_categories.yml +0 -7
- data/test_rails_app/spec/fixtures/products.yml +0 -9
- data/test_rails_app/spec/fixtures/tags.yml +0 -7
- data/test_rails_app/spec/fixtures/television_airings.yml +0 -11
- data/test_rails_app/spec/fixtures/television_time_slots.yml +0 -7
- data/test_rails_app/spec/fixtures/users.yml +0 -9
- data/test_rails_app/spec/helpers/admin/appointments2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/appointments_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts3_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts4_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts_custom_new_and_edit_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/blog_posts_read_only_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/bookmarks_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/comments2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/comments_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/file_column_images2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/file_column_images_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/images2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/images_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/misconfigured1_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/not_migrated_yets_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/product_categories2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/product_categories_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/products2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/products_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/television_airings_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/television_time_slots_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/users2_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/admin/users_helper_spec.rb +0 -11
- data/test_rails_app/spec/helpers/blog_posts_helper_spec.rb +0 -11
- data/test_rails_app/spec/models/appointment_spec.rb +0 -16
- data/test_rails_app/spec/models/blog_post_spec.rb +0 -13
- data/test_rails_app/spec/models/blog_post_tag_spec.rb +0 -14
- data/test_rails_app/spec/models/bookmark_spec.rb +0 -15
- data/test_rails_app/spec/models/comment_spec.rb +0 -15
- data/test_rails_app/spec/models/file_column_image_spec.rb +0 -12
- data/test_rails_app/spec/models/image_spec.rb +0 -12
- data/test_rails_app/spec/models/not_migrated_yet_spec.rb +0 -15
- data/test_rails_app/spec/models/product_category_spec.rb +0 -15
- data/test_rails_app/spec/models/product_spec.rb +0 -14
- data/test_rails_app/spec/models/tag_spec.rb +0 -13
- data/test_rails_app/spec/models/television_airing_spec.rb +0 -15
- data/test_rails_app/spec/models/television_time_slot_spec.rb +0 -13
- data/test_rails_app/spec/models/user_spec.rb +0 -14
- data/test_rails_app/spec/rcov.opts +0 -2
- data/test_rails_app/spec/spec.opts +0 -4
- data/test_rails_app/spec/spec_helper.rb +0 -88
- data/test_rails_app/spec/spec_or_test_helper.rb +0 -49
- data/test_rails_app/test/fixtures/file_column_images.yml +0 -7
- data/test_rails_app/test/integration/admin_blog_posts2_integration_test.rb +0 -16
- data/test_rails_app/test/integration/admin_blog_posts5_integration_test.rb +0 -19
- data/test_rails_app/test/integration/admin_blog_posts_integration_test.rb +0 -25
- data/test_rails_app/test/test_helper.rb +0 -28
- data/test_rails_app/vendor/plugins/file_column/CHANGELOG +0 -69
- data/test_rails_app/vendor/plugins/file_column/README +0 -54
- data/test_rails_app/vendor/plugins/file_column/Rakefile +0 -36
- data/test_rails_app/vendor/plugins/file_column/TODO +0 -6
- data/test_rails_app/vendor/plugins/file_column/init.rb +0 -13
- data/test_rails_app/vendor/plugins/file_column/lib/file_column.rb +0 -723
- data/test_rails_app/vendor/plugins/file_column/lib/file_column_helper.rb +0 -150
- data/test_rails_app/vendor/plugins/file_column/lib/file_compat.rb +0 -28
- data/test_rails_app/vendor/plugins/file_column/lib/magick_file_column.rb +0 -260
- data/test_rails_app/vendor/plugins/file_column/lib/rails_file_column.rb +0 -19
- data/test_rails_app/vendor/plugins/file_column/lib/test_case.rb +0 -124
- data/test_rails_app/vendor/plugins/file_column/lib/validations.rb +0 -112
- data/test_rails_app/vendor/plugins/file_column/test/abstract_unit.rb +0 -63
- data/test_rails_app/vendor/plugins/file_column/test/connection.rb +0 -17
- data/test_rails_app/vendor/plugins/file_column/test/file_column_helper_test.rb +0 -97
- data/test_rails_app/vendor/plugins/file_column/test/file_column_test.rb +0 -650
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/entry.rb +0 -32
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +0 -1
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/mysql.sql +0 -25
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/schema.rb +0 -10
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/magick_test.rb +0 -380
- data/test_rails_app/vendor/plugins/file_column/test/magick_view_only_test.rb +0 -21
|
@@ -1,987 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
-
|
|
3
|
-
describe Admin::BlogPostsController do
|
|
4
|
-
integrate_views
|
|
5
|
-
|
|
6
|
-
before :all do
|
|
7
|
-
User.destroy_all
|
|
8
|
-
@user = User.create! :username => 'soren'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
describe '#autocomplete_user' do
|
|
12
|
-
before :all do
|
|
13
|
-
@bill1 = User.create! :username => 'Bill 1'
|
|
14
|
-
@bill2 = User.create! :username => 'Bill 2'
|
|
15
|
-
1.upto(11) do |i|
|
|
16
|
-
User.create! :username => "Bob #{i}"
|
|
17
|
-
end
|
|
18
|
-
User.create! :username => 'Bob'
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
describe 'with no matches' do
|
|
22
|
-
before :each do
|
|
23
|
-
get :autocomplete_user, :user_autocomplete_input => 'Jane'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it 'should return empty results' do
|
|
27
|
-
response.should have_tag('ul')
|
|
28
|
-
response.should_not have_tag('ul > li')
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it 'should not render the admin layout' do
|
|
32
|
-
response.should_not have_tag('head > title')
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe 'with two matches' do
|
|
37
|
-
before :each do
|
|
38
|
-
get :autocomplete_user, :user_autocomplete_input => 'Bill'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it 'should return those two matches' do
|
|
42
|
-
response.should have_tag('ul') do
|
|
43
|
-
with_tag "li[id=user#{@bill1.id}]", :text => 'Bill 1'
|
|
44
|
-
with_tag "li[id=user#{@bill2.id}]", :text => 'Bill 2'
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
describe 'with 12 matches' do
|
|
50
|
-
before :each do
|
|
51
|
-
get :autocomplete_user, :user_autocomplete_input => 'Bob'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'should return a max of ten users' do
|
|
55
|
-
response.should have_tag('ul > li', :count => 10)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it 'should make sure the shortest matches are included in the results' do
|
|
59
|
-
response.should have_tag('ul > li', :text => 'Bob')
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
describe '#create' do
|
|
65
|
-
describe 'when there are no validation errors' do
|
|
66
|
-
before :each do
|
|
67
|
-
title = random_word
|
|
68
|
-
post(
|
|
69
|
-
:create,
|
|
70
|
-
:blog_post => {
|
|
71
|
-
:title => title, :textile => '1', :user_id => @user.id,
|
|
72
|
-
'published_at(1i)' => '', 'published_at(2i)' => '',
|
|
73
|
-
'published_at(3i)' => '', 'published_at(4i)' => '',
|
|
74
|
-
'published_at(5i)' => ''
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
@blog_post = BlogPost.find_by_title(title)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it 'should create a new BlogPost' do
|
|
81
|
-
@blog_post.should_not be_nil
|
|
82
|
-
@blog_post.textile?.should be_true
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it 'should not set published_at' do
|
|
86
|
-
@blog_post.published_at.should be_nil
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
describe 'when there are validation errors' do
|
|
91
|
-
before :each do
|
|
92
|
-
post(
|
|
93
|
-
:create, :blog_post => {:title => ''}, :origin => '/admin/blog_posts'
|
|
94
|
-
)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it 'should not create a new BlogPost' do
|
|
98
|
-
BlogPost.find_by_title('').should be_nil
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it 'should print all the errors' do
|
|
102
|
-
response.should be_success
|
|
103
|
-
response.body.should match(/Title can't be blank/)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it 'should show a link back to the index page' do
|
|
107
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
describe 'when somebody GETs for some reason' do
|
|
112
|
-
before :each do
|
|
113
|
-
get :create
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it 'should just redirect to #new' do
|
|
117
|
-
response.should redirect_to(:action => 'new')
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
describe '#destroy' do
|
|
123
|
-
it 'should be an unknown action' do
|
|
124
|
-
lambda { post :destroy, :id => 123 }.should raise_error(
|
|
125
|
-
ActionController::UnknownAction
|
|
126
|
-
)
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
describe '#edit' do
|
|
131
|
-
before :all do
|
|
132
|
-
@blog_post = BlogPost.create! :title => random_word, :user => @user
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
before :each do
|
|
136
|
-
@request.env["HTTP_REFERER"] = '/admin/blog_posts'
|
|
137
|
-
get :edit, :id => @blog_post.id
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it 'should show a form' do
|
|
141
|
-
response.body.should match(
|
|
142
|
-
%r|<form action="/admin/blog_posts/update/#{@blog_post.id}".*input.*name="blog_post\[title\]"|m
|
|
143
|
-
)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it 'should prefill the values' do
|
|
147
|
-
response.body.should match(%r|input.*value="#{@blog_post.title}"|)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
it 'should show a link back to the index page' do
|
|
151
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
describe '#edit when there is a referer value on the request' do
|
|
156
|
-
it 'should have the origin hidden input value' do
|
|
157
|
-
blog_post = BlogPost.create! :title => random_word, :user => @user
|
|
158
|
-
referer_page = 'referer_page'
|
|
159
|
-
@request.env['HTTP_REFERER'] = referer_page
|
|
160
|
-
get :edit, :id => blog_post.id
|
|
161
|
-
response.should have_tag("input#origin[value=#{referer_page}]")
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
describe '#edit when there are more than 15 users' do
|
|
166
|
-
before :all do
|
|
167
|
-
@blog_post = BlogPost.create! :title => random_word, :user => @user
|
|
168
|
-
1.upto(16) do |i|
|
|
169
|
-
User.create! :username => "--user #{i}--"
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
before :each do
|
|
174
|
-
get :edit, :id => @blog_post.id
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
it 'should use the restricted autocompleter instead of a drop-down' do
|
|
178
|
-
response.should_not have_tag("select[name=?]", "blog_post[user_id]")
|
|
179
|
-
response.should have_tag(
|
|
180
|
-
"input[id=user_autocomplete_input][value=soren]"
|
|
181
|
-
)
|
|
182
|
-
response.should have_tag(
|
|
183
|
-
"input[type=hidden][name=?][id=blog_post_user_id][value=?]",
|
|
184
|
-
"blog_post[user_id]", @user.id.to_s
|
|
185
|
-
)
|
|
186
|
-
response.should have_tag("div[id=user_autocomplete_palette]")
|
|
187
|
-
response.should have_tag('div[id=clear_user_link]')
|
|
188
|
-
response.body.should match(
|
|
189
|
-
%r|
|
|
190
|
-
new\s*AdminAssistant.RestrictedAutocompleter\(
|
|
191
|
-
\s*"user",
|
|
192
|
-
\s*"blog_post_user_id",
|
|
193
|
-
\s*"/admin/blog_posts/autocomplete_user",
|
|
194
|
-
[^)]*"includeBlank":\s*true
|
|
195
|
-
|mx
|
|
196
|
-
)
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
describe '#edit when there are less than 15 users' do
|
|
201
|
-
before :all do
|
|
202
|
-
@blog_post = BlogPost.create! :title => random_word, :user => @user
|
|
203
|
-
User.count.downto(14) do
|
|
204
|
-
user = User.find(
|
|
205
|
-
:first, :conditions => ['username != ?', @user.username]
|
|
206
|
-
)
|
|
207
|
-
user.destroy
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
before :each do
|
|
212
|
-
get :edit, :id => @blog_post.id
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
it 'should use a drop-down with a blank option' do
|
|
216
|
-
response.should have_tag('select[name=?]', 'blog_post[user_id]') do
|
|
217
|
-
with_tag "option[value='']"
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
describe '#index' do
|
|
223
|
-
describe 'when there are no records' do
|
|
224
|
-
before :all do
|
|
225
|
-
BlogPost.destroy_all
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
before :each do
|
|
229
|
-
get :index
|
|
230
|
-
response.should be_success
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
it 'should say "No blog posts found"' do
|
|
234
|
-
response.body.should match(/No blog posts found/)
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
it "should say the name of the model you're editing" do
|
|
238
|
-
response.body.should match(/Blog posts/)
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
it 'should have a new link' do
|
|
242
|
-
response.should have_tag(
|
|
243
|
-
"a[href=/admin/blog_posts/new]", 'New blog post'
|
|
244
|
-
)
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
it 'should have a search form' do
|
|
248
|
-
response.body.should match(
|
|
249
|
-
%r|<a.*onclick="AdminAssistant.show_search_form\(\);.*>Search</a>|
|
|
250
|
-
)
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
it 'should use the admin layout' do
|
|
254
|
-
response.body.should match(/admin_assistant sample Rails app/)
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
it 'should use the default admin_assistant CSS' do
|
|
258
|
-
response.should have_tag(
|
|
259
|
-
'link[href^=/stylesheets/admin_assistant/default.css]'
|
|
260
|
-
)
|
|
261
|
-
end
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
describe 'when there is one record' do
|
|
265
|
-
before :all do
|
|
266
|
-
BlogPost.destroy_all
|
|
267
|
-
@blog_post = BlogPost.create!(
|
|
268
|
-
:title => "hi there", :user => @user, :textile => false
|
|
269
|
-
)
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
before :each do
|
|
273
|
-
get :index
|
|
274
|
-
response.should be_success
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
it 'should show title by default' do
|
|
278
|
-
response.body.should match(/hi there/)
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
it "should say the name of the model you're editing" do
|
|
282
|
-
response.body.should match(/Blog posts/)
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
it 'should have a new link' do
|
|
286
|
-
response.should have_tag(
|
|
287
|
-
"a[href=/admin/blog_posts/new]", 'New blog post'
|
|
288
|
-
)
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
it 'should have an edit link' do
|
|
292
|
-
response.should have_tag('td.actions') do
|
|
293
|
-
with_tag "a[href=/admin/blog_posts/edit/#{@blog_post.id}]", 'Edit'
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
it 'should have a show link' do
|
|
298
|
-
response.should have_tag(
|
|
299
|
-
"a[href=/admin/blog_posts/show/#{@blog_post.id}]", 'Show'
|
|
300
|
-
)
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
it 'should show sort links' do
|
|
304
|
-
pretty_column_names = {
|
|
305
|
-
'id' => 'ID', 'title' => 'Title', 'body' => 'Body', 'user' => 'User'
|
|
306
|
-
}
|
|
307
|
-
pretty_column_names.each do |field, pretty_column_name|
|
|
308
|
-
assert_a_tag_with_get_args(
|
|
309
|
-
pretty_column_name, '/admin/blog_posts',
|
|
310
|
-
{:sort => field, :sort_order => 'asc'}, response.body
|
|
311
|
-
)
|
|
312
|
-
end
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it 'should show pretty column headers' do
|
|
316
|
-
column_headers = ['ID', 'Title', 'Body', 'User']
|
|
317
|
-
column_headers.each do |column_header|
|
|
318
|
-
response.should have_tag('th') do
|
|
319
|
-
with_tag 'a', column_header
|
|
320
|
-
end
|
|
321
|
-
end
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
it 'should say how many records are found' do
|
|
325
|
-
response.should have_tag(
|
|
326
|
-
'div.aa_footer', :text => '1 blog post found'
|
|
327
|
-
)
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
it "should say username because that's one of our default name fields" do
|
|
331
|
-
response.should have_tag('td', :text => 'soren')
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
it 'should make the textile field an Ajax toggle' do
|
|
335
|
-
toggle_div_id = "blog_post_#{@blog_post.id}_textile"
|
|
336
|
-
post_url =
|
|
337
|
-
"/admin/blog_posts/update/#{@blog_post.id}?" +
|
|
338
|
-
CGI.escape('blog_post[textile]') + "=1&from=#{toggle_div_id}"
|
|
339
|
-
response.should have_tag("div[id=?]", toggle_div_id) do
|
|
340
|
-
ajax_substr = "new Ajax.Updater('#{toggle_div_id}', '#{post_url}'"
|
|
341
|
-
with_tag("a[href=#][onclick*=?]", ajax_substr, :text => 'false')
|
|
342
|
-
end
|
|
343
|
-
end
|
|
344
|
-
|
|
345
|
-
it 'should not show the page selector form' do
|
|
346
|
-
response.should have_tag('.pagination') do
|
|
347
|
-
without_tag('form[method=get][action=/admin/blog_posts]')
|
|
348
|
-
end
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
it 'should have a tbody with the ID blog_posts_index_tbody' do
|
|
352
|
-
response.should have_tag('tbody#blog_posts_index_tbody')
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
it 'should have a tr with the ID based on @blog_post.id' do
|
|
356
|
-
response.should have_tag("tr[id=blog_post_#{@blog_post.id}]")
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
it 'should not show created_at or updated_at by default' do
|
|
360
|
-
response.body.should_not match(/Created at/)
|
|
361
|
-
response.body.should_not match(/Updated at/)
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
|
|
365
|
-
describe 'when there is one record that somehow has a nil User' do
|
|
366
|
-
before :all do
|
|
367
|
-
@blog_post = BlogPost.create! :title => "hi there", :user => @user
|
|
368
|
-
BlogPost.update_all "user_id = null"
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
before :each do
|
|
372
|
-
get :index
|
|
373
|
-
end
|
|
374
|
-
|
|
375
|
-
it 'should be fine with a nil User' do
|
|
376
|
-
response.should be_success
|
|
377
|
-
end
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
describe 'when there are more than 10 pages of results' do
|
|
381
|
-
before :all do
|
|
382
|
-
BlogPost.count.upto(251) do
|
|
383
|
-
@blog_post = BlogPost.create!(
|
|
384
|
-
:title => "hi there", :user => @user, :textile => false
|
|
385
|
-
)
|
|
386
|
-
end
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
before :each do
|
|
390
|
-
get :index
|
|
391
|
-
end
|
|
392
|
-
|
|
393
|
-
it 'should show the page selector form at the bottom' do
|
|
394
|
-
response.should have_tag('.pagination') do
|
|
395
|
-
with_tag('form[method=get][action=/admin/blog_posts]') do
|
|
396
|
-
with_tag 'input[name=page]'
|
|
397
|
-
end
|
|
398
|
-
end
|
|
399
|
-
end
|
|
400
|
-
end
|
|
401
|
-
end
|
|
402
|
-
|
|
403
|
-
describe '#index sorting' do
|
|
404
|
-
describe 'when there are two records' do
|
|
405
|
-
before :all do
|
|
406
|
-
BlogPost.destroy_all
|
|
407
|
-
@blog_post1 = BlogPost.create!(
|
|
408
|
-
:title => "title 1", :body => "body 2", :user => @user
|
|
409
|
-
)
|
|
410
|
-
@blog_post2 = BlogPost.create!(
|
|
411
|
-
:title => "title 2", :body => "body 1", :user => @user
|
|
412
|
-
)
|
|
413
|
-
end
|
|
414
|
-
|
|
415
|
-
describe 'sorted by title asc' do
|
|
416
|
-
before :each do
|
|
417
|
-
get :index, :sort => 'title', :sort_order => 'asc'
|
|
418
|
-
response.should be_success
|
|
419
|
-
end
|
|
420
|
-
|
|
421
|
-
it 'should sort by title asc' do
|
|
422
|
-
response.body.should match(%r|title 1.*title 2|m)
|
|
423
|
-
end
|
|
424
|
-
|
|
425
|
-
it 'should show a desc sort link for title' do
|
|
426
|
-
assert_a_tag_with_get_args(
|
|
427
|
-
'Title', '/admin/blog_posts',
|
|
428
|
-
{:sort => 'title', :sort_order => 'desc'}, response.body
|
|
429
|
-
)
|
|
430
|
-
end
|
|
431
|
-
|
|
432
|
-
it 'should show asc sort links for other fields' do
|
|
433
|
-
pretty_column_names = {'id' => 'ID', 'body' => 'Body'}
|
|
434
|
-
pretty_column_names.each do |field, pretty_column_name|
|
|
435
|
-
assert_a_tag_with_get_args(
|
|
436
|
-
pretty_column_name, '/admin/blog_posts',
|
|
437
|
-
{:sort => field, :sort_order => 'asc'}, response.body
|
|
438
|
-
)
|
|
439
|
-
end
|
|
440
|
-
end
|
|
441
|
-
|
|
442
|
-
it 'should use the right CSS classes in the title header' do
|
|
443
|
-
response.should have_tag('th[class="sort asc"]') do
|
|
444
|
-
with_tag 'a', :text => 'Title'
|
|
445
|
-
end
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
it 'should have no CSS sorting classes in the header for ID' do
|
|
449
|
-
response.should have_tag('th:not([class])') do
|
|
450
|
-
with_tag 'a', :text => 'ID'
|
|
451
|
-
end
|
|
452
|
-
end
|
|
453
|
-
|
|
454
|
-
it 'should mark the title cells with CSS sorting classes' do
|
|
455
|
-
response.should have_tag('td[class="sort"]', :text => 'title 1')
|
|
456
|
-
end
|
|
457
|
-
end
|
|
458
|
-
|
|
459
|
-
describe 'sorted by title desc' do
|
|
460
|
-
before :each do
|
|
461
|
-
get :index, :sort => 'title', :sort_order => 'desc'
|
|
462
|
-
response.should be_success
|
|
463
|
-
end
|
|
464
|
-
|
|
465
|
-
it 'should sort by title desc' do
|
|
466
|
-
response.body.should match(%r|title 2.*title 1|m)
|
|
467
|
-
end
|
|
468
|
-
|
|
469
|
-
it 'should show a no-sort link for title' do
|
|
470
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Title')
|
|
471
|
-
end
|
|
472
|
-
|
|
473
|
-
it 'should show asc sort links for other fields' do
|
|
474
|
-
pretty_column_names = {'id' => 'ID', 'body' => 'Body'}
|
|
475
|
-
pretty_column_names.each do |field, pretty_column_name|
|
|
476
|
-
assert_a_tag_with_get_args(
|
|
477
|
-
pretty_column_name, '/admin/blog_posts',
|
|
478
|
-
{:sort => field, :sort_order => 'asc'}, response.body
|
|
479
|
-
)
|
|
480
|
-
end
|
|
481
|
-
end
|
|
482
|
-
|
|
483
|
-
it 'should use the right CSS classes in the title header' do
|
|
484
|
-
response.should have_tag('th[class="sort desc"]') do
|
|
485
|
-
with_tag 'a', :text => 'Title'
|
|
486
|
-
end
|
|
487
|
-
end
|
|
488
|
-
|
|
489
|
-
it 'should have no CSS sorting classes in the header for ID' do
|
|
490
|
-
response.should have_tag('th:not([class])') do
|
|
491
|
-
with_tag 'a', :text => 'ID'
|
|
492
|
-
end
|
|
493
|
-
end
|
|
494
|
-
|
|
495
|
-
it 'should mark the title cells with CSS sorting classes' do
|
|
496
|
-
response.should have_tag('td[class="sort"]', :text => 'title 1')
|
|
497
|
-
end
|
|
498
|
-
end
|
|
499
|
-
end
|
|
500
|
-
|
|
501
|
-
describe 'by #user, a belongs_to association' do
|
|
502
|
-
before :all do
|
|
503
|
-
BlogPost.destroy_all
|
|
504
|
-
jean_paul = User.create! :username => 'jean-paul'
|
|
505
|
-
BlogPost.create!(
|
|
506
|
-
:title => 'title 1', :body => 'body 1', :user => @user
|
|
507
|
-
)
|
|
508
|
-
BlogPost.create!(
|
|
509
|
-
:title => 'title 2', :body => 'body 2', :user => jean_paul
|
|
510
|
-
)
|
|
511
|
-
end
|
|
512
|
-
|
|
513
|
-
describe 'asc' do
|
|
514
|
-
before :each do
|
|
515
|
-
get :index, :sort => 'user', :sort_order => 'asc'
|
|
516
|
-
response.should be_success
|
|
517
|
-
end
|
|
518
|
-
|
|
519
|
-
it "should show jean-paul's blog post before soren's" do
|
|
520
|
-
response.body.should match(%r|jean-paul.*soren|m)
|
|
521
|
-
end
|
|
522
|
-
|
|
523
|
-
it 'should use the right CSS classes in the user header' do
|
|
524
|
-
response.should have_tag('th[class="sort asc"]') do
|
|
525
|
-
with_tag 'a', :text => 'User'
|
|
526
|
-
end
|
|
527
|
-
end
|
|
528
|
-
|
|
529
|
-
it 'should mark the title cells with CSS sorting classes' do
|
|
530
|
-
response.should have_tag('td[class="sort"]', :text => 'jean-paul')
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
it 'should show a desc sort link for user' do
|
|
534
|
-
assert_a_tag_with_get_args(
|
|
535
|
-
'User', '/admin/blog_posts',
|
|
536
|
-
{:sort => 'user', :sort_order => 'desc'}, response.body
|
|
537
|
-
)
|
|
538
|
-
end
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
describe 'desc' do
|
|
542
|
-
before :each do
|
|
543
|
-
get :index, :sort => 'user', :sort_order => 'desc'
|
|
544
|
-
response.should be_success
|
|
545
|
-
end
|
|
546
|
-
|
|
547
|
-
it "should show soren's blog post before jean-paul's" do
|
|
548
|
-
response.body.should match(%r|soren.*jean-paul|m)
|
|
549
|
-
end
|
|
550
|
-
end
|
|
551
|
-
end
|
|
552
|
-
end
|
|
553
|
-
|
|
554
|
-
describe '#index search' do
|
|
555
|
-
before :all do
|
|
556
|
-
BlogPost.destroy_all
|
|
557
|
-
end
|
|
558
|
-
|
|
559
|
-
before :each do
|
|
560
|
-
get :index, :search => 'foo'
|
|
561
|
-
response.should be_success
|
|
562
|
-
end
|
|
563
|
-
|
|
564
|
-
describe 'when there are no records' do
|
|
565
|
-
it "should say 'No blog posts found'" do
|
|
566
|
-
response.body.should match(/No blog posts found/)
|
|
567
|
-
end
|
|
568
|
-
|
|
569
|
-
it "should display the search with the terms" do
|
|
570
|
-
response.body.should match(
|
|
571
|
-
%r|<form[^>]*id="search_form".*show_search_form\(\)|m
|
|
572
|
-
)
|
|
573
|
-
response.body.should match(%r|input.*value="foo"|)
|
|
574
|
-
end
|
|
575
|
-
|
|
576
|
-
it 'should show a link back to the index page' do
|
|
577
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
|
|
578
|
-
end
|
|
579
|
-
end
|
|
580
|
-
|
|
581
|
-
describe 'when there are no records that match' do
|
|
582
|
-
before :all do
|
|
583
|
-
BlogPost.create!(
|
|
584
|
-
:title => 'no match', :body => 'no match', :user => @user
|
|
585
|
-
)
|
|
586
|
-
end
|
|
587
|
-
|
|
588
|
-
it "should say 'No blog posts found'" do
|
|
589
|
-
response.body.should match(/No blog posts found/)
|
|
590
|
-
end
|
|
591
|
-
end
|
|
592
|
-
|
|
593
|
-
describe 'when there is a blog post with a matching title' do
|
|
594
|
-
before :all do
|
|
595
|
-
BlogPost.create!(
|
|
596
|
-
:title => 'foozy', :body => 'blog post body', :user => @user
|
|
597
|
-
)
|
|
598
|
-
end
|
|
599
|
-
|
|
600
|
-
it "should show that blog post" do
|
|
601
|
-
response.body.should match(/blog post body/)
|
|
602
|
-
end
|
|
603
|
-
end
|
|
604
|
-
|
|
605
|
-
describe 'when there is a blog post with a matching body' do
|
|
606
|
-
before :all do
|
|
607
|
-
BlogPost.create!(
|
|
608
|
-
:title => 'blog post title', :body => 'barfoo', :user => @user
|
|
609
|
-
)
|
|
610
|
-
end
|
|
611
|
-
|
|
612
|
-
it "should show that blog post" do
|
|
613
|
-
response.body.should match(/blog post title/)
|
|
614
|
-
end
|
|
615
|
-
|
|
616
|
-
it 'should say how many records are found' do
|
|
617
|
-
response.body.should match(/1 blog post found/)
|
|
618
|
-
end
|
|
619
|
-
end
|
|
620
|
-
end
|
|
621
|
-
|
|
622
|
-
describe '#index pagination with 51 records' do
|
|
623
|
-
before :all do
|
|
624
|
-
BlogPost.destroy_all
|
|
625
|
-
1.upto(51) do |i|
|
|
626
|
-
BlogPost.create!(
|
|
627
|
-
:title => "title -#{i}-", :body => "body -#{i}-", :user => @user
|
|
628
|
-
)
|
|
629
|
-
end
|
|
630
|
-
end
|
|
631
|
-
|
|
632
|
-
describe 'when looking at the first page' do
|
|
633
|
-
before :each do
|
|
634
|
-
get :index
|
|
635
|
-
response.should be_success
|
|
636
|
-
end
|
|
637
|
-
|
|
638
|
-
it 'should have a link to the next page' do
|
|
639
|
-
response.should have_tag(
|
|
640
|
-
"a[href=/admin/blog_posts?page=2]", 'Next »'
|
|
641
|
-
)
|
|
642
|
-
response.should have_tag("a[href=/admin/blog_posts?page=2]", '2')
|
|
643
|
-
end
|
|
644
|
-
|
|
645
|
-
it 'should not have a link to the previous page' do
|
|
646
|
-
response.should_not have_tag(
|
|
647
|
-
"a[href=/admin/blog_posts?page=0]", '« Previous'
|
|
648
|
-
)
|
|
649
|
-
response.should_not have_tag("a[href=/admin/blog_posts?page=0]", '0')
|
|
650
|
-
end
|
|
651
|
-
|
|
652
|
-
it 'should the full number of posts found' do
|
|
653
|
-
response.body.should match(/51 blog posts found/)
|
|
654
|
-
end
|
|
655
|
-
end
|
|
656
|
-
|
|
657
|
-
describe 'when looking at the second page' do
|
|
658
|
-
before :each do
|
|
659
|
-
get :index, :page => '2'
|
|
660
|
-
response.should be_success
|
|
661
|
-
end
|
|
662
|
-
|
|
663
|
-
it 'should have a link to the next page' do
|
|
664
|
-
response.should have_tag(
|
|
665
|
-
"a[href=/admin/blog_posts?page=3]", 'Next »'
|
|
666
|
-
)
|
|
667
|
-
response.should have_tag("a[href=/admin/blog_posts?page=3]", '3')
|
|
668
|
-
end
|
|
669
|
-
|
|
670
|
-
it 'should have a link to the previous page' do
|
|
671
|
-
response.should have_tag(
|
|
672
|
-
"a[href=/admin/blog_posts?page=1]", '« Previous'
|
|
673
|
-
)
|
|
674
|
-
response.should have_tag("a[href=/admin/blog_posts?page=1]", '1')
|
|
675
|
-
end
|
|
676
|
-
|
|
677
|
-
it 'should the full number of posts found' do
|
|
678
|
-
response.body.should match(/51 blog posts found/)
|
|
679
|
-
end
|
|
680
|
-
end
|
|
681
|
-
|
|
682
|
-
describe 'when looking at the third page' do
|
|
683
|
-
before :each do
|
|
684
|
-
get :index, :page => '3'
|
|
685
|
-
response.should be_success
|
|
686
|
-
end
|
|
687
|
-
|
|
688
|
-
it 'should not have a link to the next page' do
|
|
689
|
-
response.should_not have_tag(
|
|
690
|
-
"a[href=/admin/blog_posts?page=4]", 'Next »'
|
|
691
|
-
)
|
|
692
|
-
response.should_not have_tag("a[href=/admin/blog_posts?page=3]", '3')
|
|
693
|
-
end
|
|
694
|
-
|
|
695
|
-
it 'should have a link to the previous page' do
|
|
696
|
-
response.should have_tag(
|
|
697
|
-
"a[href=/admin/blog_posts?page=2]", '« Previous'
|
|
698
|
-
)
|
|
699
|
-
response.should have_tag("a[href=/admin/blog_posts?page=2]", '2')
|
|
700
|
-
end
|
|
701
|
-
|
|
702
|
-
it 'should the full number of posts found' do
|
|
703
|
-
response.body.should match(/51 blog posts found/)
|
|
704
|
-
end
|
|
705
|
-
end
|
|
706
|
-
end
|
|
707
|
-
|
|
708
|
-
describe '#index with 100_000 records' do
|
|
709
|
-
before :all do
|
|
710
|
-
BlogPost.count.upto(25) do |i|
|
|
711
|
-
BlogPost.create!(
|
|
712
|
-
:title => "title -#{i}-", :body => "body -#{i}-", :user => @user
|
|
713
|
-
)
|
|
714
|
-
end
|
|
715
|
-
records = BlogPost.paginate(:per_page => 25, :page => 1)
|
|
716
|
-
records.total_entries = 100_000
|
|
717
|
-
BlogPost.should_receive(:paginate).and_return(records)
|
|
718
|
-
end
|
|
719
|
-
|
|
720
|
-
before :each do
|
|
721
|
-
get :index
|
|
722
|
-
end
|
|
723
|
-
|
|
724
|
-
it 'should not offer a link to sort by user' do
|
|
725
|
-
assert_no_a_tag_with_get_args(
|
|
726
|
-
'User', '/admin/blog_posts', {:sort => 'user', :sort_order => 'asc'},
|
|
727
|
-
response.body
|
|
728
|
-
)
|
|
729
|
-
end
|
|
730
|
-
end
|
|
731
|
-
|
|
732
|
-
describe '#new' do
|
|
733
|
-
before :each do
|
|
734
|
-
@alfie = User.find_or_create_by_username 'alfie'
|
|
735
|
-
@request.env["HTTP_REFERER"] = '/admin/blog_posts'
|
|
736
|
-
get :new
|
|
737
|
-
end
|
|
738
|
-
|
|
739
|
-
it 'should show a form' do
|
|
740
|
-
response.body.should match(
|
|
741
|
-
%r|<form action="/admin/blog_posts/create".*input.*name="blog_post\[title\]"|m
|
|
742
|
-
)
|
|
743
|
-
end
|
|
744
|
-
|
|
745
|
-
it 'should use a textarea for the body field' do
|
|
746
|
-
response.body.should match(
|
|
747
|
-
%r|<textarea.*name="blog_post\[body\]".*>.*</textarea>|
|
|
748
|
-
)
|
|
749
|
-
end
|
|
750
|
-
|
|
751
|
-
it 'should show a link back to the index page' do
|
|
752
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
|
|
753
|
-
end
|
|
754
|
-
|
|
755
|
-
it 'should show pretty field names' do
|
|
756
|
-
field_names = ['Title', 'Body']
|
|
757
|
-
field_names.each do |field_name|
|
|
758
|
-
response.should have_tag('label', field_name)
|
|
759
|
-
end
|
|
760
|
-
end
|
|
761
|
-
|
|
762
|
-
it 'should set the for attribute of the labels' do
|
|
763
|
-
field_names = ['Title', 'Body']
|
|
764
|
-
field_names.each do |field_name|
|
|
765
|
-
response.should have_tag("label[for=blog_post_#{field_name.downcase}]")
|
|
766
|
-
end
|
|
767
|
-
end
|
|
768
|
-
|
|
769
|
-
it "should use a checkbox for the boolean field 'textile'" do
|
|
770
|
-
response.body.should match(
|
|
771
|
-
%r!
|
|
772
|
-
<input[^>]*
|
|
773
|
-
(name="blog_post\[textile\][^>]*type="checkbox"|
|
|
774
|
-
type="checkbox"[^>]*name="blog_post\[textile\])
|
|
775
|
-
!x
|
|
776
|
-
)
|
|
777
|
-
end
|
|
778
|
-
|
|
779
|
-
it 'should use a drop-down for the user field' do
|
|
780
|
-
response.should have_tag("select[name=?]", "blog_post[user_id]") do
|
|
781
|
-
with_tag "option:nth-child(1)[value='']"
|
|
782
|
-
with_tag "option:nth-child(2)[value=?]", @alfie.id, :text => 'alfie'
|
|
783
|
-
with_tag "option:nth-child(3)[value=?]", @user.id, :text => 'soren'
|
|
784
|
-
end
|
|
785
|
-
end
|
|
786
|
-
|
|
787
|
-
it 'should set the controller path as a CSS class' do
|
|
788
|
-
response.should have_tag("div[class~=admin_blog_posts]")
|
|
789
|
-
end
|
|
790
|
-
|
|
791
|
-
it 'should use dropdowns with nil defaults for published_at' do
|
|
792
|
-
nums_and_dt_fields = {
|
|
793
|
-
1 => :year, 2 => :month, 3 => :day, 4 => :hour, 5 => :min
|
|
794
|
-
}
|
|
795
|
-
nums_and_dt_fields.each do |num, dt_field|
|
|
796
|
-
name = "blog_post[published_at(#{num}i)]"
|
|
797
|
-
value_for_now_option = Time.now.send(dt_field).to_s
|
|
798
|
-
if [:hour, :min].include?(dt_field) && value_for_now_option.size == 1
|
|
799
|
-
value_for_now_option = "0#{value_for_now_option}"
|
|
800
|
-
end
|
|
801
|
-
response.should have_tag('select[name=?]', name) do
|
|
802
|
-
with_tag "option[value='']"
|
|
803
|
-
with_tag "option:not([selected])[value=?]", value_for_now_option
|
|
804
|
-
end
|
|
805
|
-
end
|
|
806
|
-
end
|
|
807
|
-
|
|
808
|
-
it 'should show a clear link for published_at' do
|
|
809
|
-
response.body.should have_tag('a', :text => "Clear")
|
|
810
|
-
end
|
|
811
|
-
end
|
|
812
|
-
|
|
813
|
-
describe '#new with a preset value in the GET arguments' do
|
|
814
|
-
before :each do
|
|
815
|
-
get :new, :blog_post => {:user_id => @user.id.to_s}
|
|
816
|
-
end
|
|
817
|
-
|
|
818
|
-
it 'should set that preselected value' do
|
|
819
|
-
response.should have_tag("select[name=?]", "blog_post[user_id]") do
|
|
820
|
-
with_tag "option[value=?][selected=selected]",
|
|
821
|
-
@user.id, :text => 'soren'
|
|
822
|
-
with_tag "option[value='']"
|
|
823
|
-
end
|
|
824
|
-
end
|
|
825
|
-
end
|
|
826
|
-
|
|
827
|
-
describe '#new when there are more than 15 users' do
|
|
828
|
-
before :all do
|
|
829
|
-
User.destroy_all
|
|
830
|
-
1.upto(16) do |i|
|
|
831
|
-
User.create! :username => "--user #{i}--"
|
|
832
|
-
end
|
|
833
|
-
end
|
|
834
|
-
|
|
835
|
-
before :each do
|
|
836
|
-
get :new
|
|
837
|
-
end
|
|
838
|
-
|
|
839
|
-
it 'should use the restricted autocompleter instead of a drop-down' do
|
|
840
|
-
response.should_not have_tag("select[name=?]", "blog_post[user_id]")
|
|
841
|
-
response.should have_tag("input[id=user_autocomplete_input]")
|
|
842
|
-
response.should have_tag(
|
|
843
|
-
"input[type=hidden][name=?][id=blog_post_user_id]",
|
|
844
|
-
"blog_post[user_id]"
|
|
845
|
-
)
|
|
846
|
-
response.should have_tag("div[id=user_autocomplete_palette]")
|
|
847
|
-
response.should have_tag('div[id=clear_user_link]')
|
|
848
|
-
response.body.should match(
|
|
849
|
-
%r|
|
|
850
|
-
new\s*AdminAssistant.RestrictedAutocompleter\(
|
|
851
|
-
\s*"user",
|
|
852
|
-
\s*"blog_post_user_id",
|
|
853
|
-
\s*"/admin/blog_posts/autocomplete_user",
|
|
854
|
-
[^)]*"includeBlank":\s*true
|
|
855
|
-
|mx
|
|
856
|
-
)
|
|
857
|
-
end
|
|
858
|
-
end
|
|
859
|
-
|
|
860
|
-
describe '#show' do
|
|
861
|
-
before :all do
|
|
862
|
-
BlogPost.destroy_all
|
|
863
|
-
@blog_post = BlogPost.create!(
|
|
864
|
-
:title => "foo > bar & baz", :user => @user, :textile => false
|
|
865
|
-
)
|
|
866
|
-
end
|
|
867
|
-
|
|
868
|
-
before :each do
|
|
869
|
-
get :show, :id => @blog_post.id
|
|
870
|
-
end
|
|
871
|
-
|
|
872
|
-
it 'should show the HTML-escaped title' do
|
|
873
|
-
response.body.should match(/foo > bar & baz/)
|
|
874
|
-
end
|
|
875
|
-
|
|
876
|
-
it 'should have a link to edit' do
|
|
877
|
-
response.should have_tag(
|
|
878
|
-
"a[href=/admin/blog_posts/edit/#{@blog_post.id}]", 'Edit'
|
|
879
|
-
)
|
|
880
|
-
end
|
|
881
|
-
|
|
882
|
-
it 'should show soren' do
|
|
883
|
-
response.body.should match(/soren/)
|
|
884
|
-
end
|
|
885
|
-
end
|
|
886
|
-
|
|
887
|
-
describe '#update' do
|
|
888
|
-
before :all do
|
|
889
|
-
@blog_post = BlogPost.create! :title => random_word, :user => @user
|
|
890
|
-
end
|
|
891
|
-
|
|
892
|
-
describe 'when there are no validation errors' do
|
|
893
|
-
before :each do
|
|
894
|
-
title2 = random_word
|
|
895
|
-
post(
|
|
896
|
-
:update,
|
|
897
|
-
:id => @blog_post.id,
|
|
898
|
-
:blog_post => {
|
|
899
|
-
:title => title2, 'published_at(1i)' => '2009',
|
|
900
|
-
'published_at(2i)' => '1', 'published_at(3i)' => '2',
|
|
901
|
-
'published_at(4i)' => '3', 'published_at(5i)' => '4'
|
|
902
|
-
}
|
|
903
|
-
)
|
|
904
|
-
response.should redirect_to(:action => 'index')
|
|
905
|
-
@blog_post_prime = BlogPost.find_by_title(title2)
|
|
906
|
-
end
|
|
907
|
-
|
|
908
|
-
it 'should update a pre-existing BlogPost' do
|
|
909
|
-
@blog_post_prime.should_not be_nil
|
|
910
|
-
end
|
|
911
|
-
|
|
912
|
-
it 'should set published_at' do
|
|
913
|
-
@blog_post_prime.published_at.should == Time.utc(2009, 1, 2, 3, 4)
|
|
914
|
-
end
|
|
915
|
-
end
|
|
916
|
-
|
|
917
|
-
describe 'when there are validation errors' do
|
|
918
|
-
before :each do
|
|
919
|
-
post(
|
|
920
|
-
:update,
|
|
921
|
-
:id => @blog_post.id, :blog_post => {:title => ''},
|
|
922
|
-
:origin => '/admin/blog_posts'
|
|
923
|
-
)
|
|
924
|
-
end
|
|
925
|
-
|
|
926
|
-
it 'should not create a new BlogPost' do
|
|
927
|
-
BlogPost.find_by_title('').should be_nil
|
|
928
|
-
end
|
|
929
|
-
|
|
930
|
-
it 'should print all the errors' do
|
|
931
|
-
response.should be_success
|
|
932
|
-
response.body.should match(/Title can't be blank/)
|
|
933
|
-
end
|
|
934
|
-
|
|
935
|
-
it 'should show a link back to the index page' do
|
|
936
|
-
response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
|
|
937
|
-
end
|
|
938
|
-
end
|
|
939
|
-
|
|
940
|
-
describe 'on handling the origin param' do
|
|
941
|
-
it 'should redirect to the origin when there is a origin on the form submit' do
|
|
942
|
-
origin = 'http://foo.com'
|
|
943
|
-
post :update, :id => @blog_post.id, :blog_post => {:title => 'foo'}, :origin => origin
|
|
944
|
-
response.should redirect_to(origin)
|
|
945
|
-
end
|
|
946
|
-
end
|
|
947
|
-
|
|
948
|
-
end
|
|
949
|
-
|
|
950
|
-
describe '#update as Ajax toggle' do
|
|
951
|
-
before :all do
|
|
952
|
-
@blog_post = BlogPost.create!(
|
|
953
|
-
:title => random_word, :user => @user, :textile => false
|
|
954
|
-
)
|
|
955
|
-
end
|
|
956
|
-
|
|
957
|
-
before :each do
|
|
958
|
-
post(
|
|
959
|
-
:update,
|
|
960
|
-
:id => @blog_post.id, :from => "blog_post_#{@blog_post.id}_textile",
|
|
961
|
-
:blog_post => {:textile => '1'}
|
|
962
|
-
)
|
|
963
|
-
end
|
|
964
|
-
|
|
965
|
-
it 'should return success' do
|
|
966
|
-
response.should be_success
|
|
967
|
-
end
|
|
968
|
-
|
|
969
|
-
it 'should update the textile field' do
|
|
970
|
-
@blog_post.reload.textile.should be_true
|
|
971
|
-
end
|
|
972
|
-
|
|
973
|
-
it 'should only render a small snippet of HTML with Ajax in it' do
|
|
974
|
-
toggle_div_id = "blog_post_#{@blog_post.id}_textile"
|
|
975
|
-
post_url =
|
|
976
|
-
"/admin/blog_posts/update/#{@blog_post.id}?" +
|
|
977
|
-
CGI.escape('blog_post[textile]') + "=0&from=#{toggle_div_id}"
|
|
978
|
-
response.should_not have_tag('div[id=?]', toggle_div_id)
|
|
979
|
-
ajax_substr = "new Ajax.Updater('#{toggle_div_id}', '#{post_url}'"
|
|
980
|
-
response.should have_tag(
|
|
981
|
-
"a[href=#][onclick*=?]", ajax_substr, :text => 'true'
|
|
982
|
-
)
|
|
983
|
-
response.should_not have_tag('title', :text => 'Admin')
|
|
984
|
-
end
|
|
985
|
-
end
|
|
986
|
-
|
|
987
|
-
end
|