typo 4.0.3 → 4.1
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/CHANGES-4.1 +83 -0
- data/MAINTAINERS +3 -7
- data/README +1 -1
- data/{components/sidebars/README → README.SIDEBARS} +3 -0
- data/Rakefile +1 -1
- data/TODO-4.1 +16 -0
- data/app/apis/blogger_service.rb +3 -3
- data/app/apis/meta_weblog_service.rb +4 -21
- data/app/apis/movable_type_service.rb +5 -5
- data/app/controllers/accounts_controller.rb +6 -3
- data/app/controllers/admin/blacklist_controller.rb +1 -1
- data/app/controllers/admin/cache_controller.rb +3 -7
- data/app/controllers/admin/content_controller.rb +46 -24
- data/app/controllers/admin/feedback_controller.rb +3 -3
- data/app/controllers/admin/general_controller.rb +3 -3
- data/app/controllers/admin/pages_controller.rb +7 -3
- data/app/controllers/admin/sidebar_controller.rb +19 -26
- data/app/controllers/admin/textfilters_controller.rb +3 -1
- data/app/controllers/admin/themes_controller.rb +1 -1
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/application.rb +25 -27
- data/app/controllers/articles_controller.rb +14 -18
- data/app/controllers/content_controller.rb +7 -7
- data/app/controllers/live_controller.rb +1 -1
- data/app/controllers/redirect_controller.rb +2 -0
- data/app/controllers/textfilter_controller.rb +0 -3
- data/app/controllers/theme_controller.rb +10 -5
- data/app/controllers/xml_controller.rb +7 -9
- data/app/helpers/admin/base_helper.rb +10 -5
- data/app/helpers/admin/content_helper.rb +6 -0
- data/app/helpers/admin/feedback_helper.rb +1 -1
- data/app/helpers/admin/pages_helper.rb +5 -0
- data/app/helpers/application_helper.rb +84 -51
- data/app/helpers/articles_helper.rb +29 -29
- data/app/helpers/mail_helper.rb +3 -2
- data/app/helpers/sidebar_helper.rb +25 -16
- data/app/helpers/xml_helper.rb +0 -16
- data/app/models/article.rb +90 -32
- data/app/models/blog.rb +82 -74
- data/app/models/blog_sweeper.rb +33 -8
- data/app/models/categorization.rb +4 -0
- data/app/models/category.rb +21 -4
- data/app/models/comment.rb +23 -21
- data/app/models/content.rb +106 -64
- data/app/models/content_state/base.rb +12 -3
- data/app/models/content_state/draft.rb +2 -3
- data/app/models/content_state/factory.rb +1 -1
- data/app/models/content_state/ham.rb +0 -1
- data/app/models/content_state/just_marked_as_ham.rb +8 -1
- data/app/models/content_state/just_marked_as_spam.rb +4 -1
- data/app/models/content_state/just_presumed_ham.rb +14 -14
- data/app/models/content_state/just_published.rb +11 -18
- data/app/models/content_state/just_withdrawn.rb +11 -0
- data/app/models/content_state/new.rb +0 -1
- data/app/models/content_state/presumed_ham.rb +9 -3
- data/app/models/content_state/presumed_spam.rb +4 -1
- data/app/models/content_state/publication_pending.rb +4 -4
- data/app/models/content_state/published.rb +7 -8
- data/app/models/content_state/spam.rb +0 -1
- data/app/models/content_state/unclassified.rb +12 -3
- data/app/models/content_state/withdrawn.rb +5 -6
- data/app/models/email_notifier.rb +1 -1
- data/app/models/feedback.rb +31 -11
- data/app/models/notification.rb +4 -0
- data/app/models/notification_mailer.rb +8 -8
- data/app/models/page.rb +19 -5
- data/app/models/ping.rb +27 -40
- data/app/models/sidebar.rb +241 -11
- data/app/models/tag.rb +12 -1
- data/app/models/text_filter.rb +33 -39
- data/app/models/theme.rb +9 -0
- data/app/models/trackback.rb +1 -5
- data/app/models/user.rb +7 -5
- data/app/views/accounts/login.rhtml +19 -15
- data/app/views/accounts/logout.rhtml +4 -4
- data/app/views/accounts/signup.rhtml +9 -9
- data/app/views/admin/base/_recent_comments.rhtml +2 -2
- data/app/views/admin/base/_recent_trackbacks.rhtml +2 -2
- data/app/views/admin/blacklist/_blacklist_patterns.rhtml +4 -4
- data/app/views/admin/blacklist/_form.rhtml +3 -3
- data/app/views/admin/blacklist/_quick_post.rhtml +7 -6
- data/app/views/admin/blacklist/destroy.rhtml +5 -5
- data/app/views/admin/blacklist/edit.rhtml +7 -7
- data/app/views/admin/blacklist/list.rhtml +2 -2
- data/app/views/admin/cache/list.rhtml +2 -2
- data/app/views/admin/categories/_categories.rhtml +3 -3
- data/app/views/admin/categories/_form.rhtml +1 -1
- data/app/views/admin/categories/_quick_post.rhtml +5 -5
- data/app/views/admin/categories/destroy.rhtml +7 -7
- data/app/views/admin/categories/edit.rhtml +6 -6
- data/app/views/admin/categories/list.rhtml +7 -4
- data/app/views/admin/categories/reorder.rhtml +1 -1
- data/app/views/admin/categories/show.rhtml +6 -6
- data/app/views/admin/comments/_form.rhtml +4 -4
- data/app/views/admin/comments/comments.rhtml +1 -1
- data/app/views/admin/comments/destroy.rhtml +6 -6
- data/app/views/admin/comments/edit.rhtml +8 -8
- data/app/views/admin/comments/list.rhtml +11 -11
- data/app/views/admin/comments/new.rhtml +7 -7
- data/app/views/admin/comments/show.rhtml +7 -7
- data/app/views/admin/content/_articles.rhtml +12 -10
- data/app/views/admin/content/_attachment.rhtml +15 -17
- data/app/views/admin/content/_form.rhtml +68 -45
- data/app/views/admin/content/_pages.rhtml +2 -2
- data/app/views/admin/content/_quick_post.rhtml +6 -6
- data/app/views/admin/content/_show_categories.rhtml +2 -2
- data/app/views/admin/content/_show_resources.rhtml +2 -2
- data/app/views/admin/content/destroy.rhtml +8 -8
- data/app/views/admin/content/edit.rhtml +8 -26
- data/app/views/admin/content/list.rhtml +4 -4
- data/app/views/admin/content/new.rhtml +5 -25
- data/app/views/admin/content/preview.rhtml +9 -2
- data/app/views/admin/content/show.rhtml +10 -9
- data/app/views/admin/feedback/_item.rhtml +2 -2
- data/app/views/admin/feedback/list.rhtml +21 -20
- data/app/views/admin/general/index.rhtml +261 -239
- data/app/views/admin/general/update_database.rhtml +15 -15
- data/app/views/admin/pages/_form.rhtml +32 -15
- data/app/views/admin/pages/_pages.rhtml +9 -8
- data/app/views/admin/pages/_quick_post.rhtml +2 -2
- data/app/views/admin/pages/destroy.rhtml +7 -7
- data/app/views/admin/pages/edit.rhtml +7 -26
- data/app/views/admin/pages/list.rhtml +4 -3
- data/app/views/admin/pages/new.rhtml +5 -22
- data/app/views/admin/pages/preview.rhtml +1 -1
- data/app/views/admin/pages/show.rhtml +5 -5
- data/app/views/admin/resources/_itunes_category_edit.rhtml +2 -2
- data/app/views/admin/resources/_metadata_add.rhtml +13 -13
- data/app/views/admin/resources/_metadata_edit.rhtml +14 -14
- data/app/views/admin/resources/_mime_edit.rhtml +5 -5
- data/app/views/admin/resources/_pages.rhtml +2 -2
- data/app/views/admin/resources/_resources.rhtml +8 -8
- data/app/views/admin/resources/destroy.rhtml +7 -7
- data/app/views/admin/resources/list.rhtml +6 -3
- data/app/views/admin/resources/new.rhtml +7 -3
- data/app/views/admin/shared/_edit.rhtml +17 -0
- data/app/views/admin/sidebar/_active.rhtml +5 -5
- data/app/views/admin/sidebar/_availables.rhtml +1 -1
- data/app/views/admin/sidebar/_publish.rhtml +1 -1
- data/app/views/admin/sidebar/_target.rhtml +1 -1
- data/app/views/admin/sidebar/index.rhtml +9 -5
- data/app/views/admin/textfilters/_form.rhtml +13 -5
- data/app/views/admin/textfilters/_macros.rhtml +4 -4
- data/app/views/admin/textfilters/_textfilters.rhtml +6 -6
- data/app/views/admin/textfilters/destroy.rhtml +5 -8
- data/app/views/admin/textfilters/edit.rhtml +2 -5
- data/app/views/admin/textfilters/list.rhtml +4 -2
- data/app/views/admin/textfilters/macro_help.rhtml +1 -1
- data/app/views/admin/textfilters/new.rhtml +9 -7
- data/app/views/admin/textfilters/show.rhtml +5 -5
- data/app/views/admin/textfilters/show_help.rhtml +3 -3
- data/app/views/admin/themes/index.rhtml +8 -2
- data/app/views/admin/trackbacks/_form.rhtml +4 -4
- data/app/views/admin/trackbacks/destroy.rhtml +4 -4
- data/app/views/admin/trackbacks/edit.rhtml +6 -6
- data/app/views/admin/trackbacks/list.rhtml +10 -10
- data/app/views/admin/trackbacks/new.rhtml +6 -6
- data/app/views/admin/trackbacks/show.rhtml +8 -8
- data/app/views/admin/users/_form.rhtml +10 -10
- data/app/views/admin/users/_user.rhtml +6 -6
- data/app/views/admin/users/destroy.rhtml +7 -7
- data/app/views/admin/users/edit.rhtml +9 -5
- data/app/views/admin/users/list.rhtml +2 -2
- data/app/views/admin/users/new.rhtml +9 -7
- data/app/views/admin/users/show.rhtml +10 -10
- data/app/views/articles/_article.rhtml +3 -3
- data/app/views/articles/_comment.rhtml +3 -3
- data/app/views/articles/_comment_box.rhtml +6 -6
- data/app/views/articles/_trackback.rhtml +1 -1
- data/app/views/articles/archives.rhtml +3 -3
- data/app/views/articles/comment_preview.rhtml +2 -2
- data/app/views/articles/groupings.rhtml +1 -1
- data/app/views/articles/index.rhtml +2 -2
- data/app/views/articles/read.rhtml +15 -15
- data/app/views/articles/view_page.rhtml +1 -1
- data/app/views/layouts/administration.rhtml +11 -17
- data/app/views/layouts/minimal.rhtml +13 -0
- data/app/views/live/search.rhtml +1 -1
- data/app/views/notification_mailer/_mail_footer.rhtml +2 -2
- data/app/views/notification_mailer/article.rhtml +1 -1
- data/app/views/notification_mailer/comment.rhtml +4 -4
- data/app/views/settings/done.rhtml +1 -1
- data/app/views/settings/install.rhtml +3 -3
- data/app/views/shared/_search.rhtml +4 -4
- data/app/views/xml/_atom10_item_article.rxml +9 -7
- data/app/views/xml/_atom10_item_comment.rxml +2 -3
- data/app/views/xml/_atom10_item_trackback.rxml +1 -1
- data/app/views/xml/_googlesitemap_item_article.rxml +2 -2
- data/app/views/xml/_googlesitemap_item_category.rxml +1 -1
- data/app/views/xml/_googlesitemap_item_page.rxml +2 -2
- data/app/views/xml/_googlesitemap_item_tag.rxml +2 -2
- data/app/views/xml/_itunes_item_resource.rxml +2 -4
- data/app/views/xml/_rss20_item_article.rxml +4 -10
- data/app/views/xml/_rss20_item_comment.rxml +2 -2
- data/app/views/xml/rsd.rxml +4 -4
- data/bin/typo +0 -1
- data/config/boot.rb +4 -3
- data/config/environment.rb +37 -28
- data/config/environments/test.rb +1 -1
- data/config/routes.rb +6 -5
- data/db/migrate/051_fix_canonical_server_url.rb +17 -0
- data/db/migrate/052_remove_cached_html.rb +11 -0
- data/db/migrate/053_promote_canonical_server_url.rb +22 -0
- data/db/migrate/054_upgrade_sidebar_objects.rb +26 -0
- data/db/migrate/055_link_sidebars_to_blog.rb +17 -0
- data/db/migrate/056_create_notifications.rb +32 -0
- data/db/migrate/057_add_categorization_model.rb +45 -0
- data/db/migrate/058_separate_entries_and_feedback.rb +68 -0
- data/db/migrate/059_cleanup_feedback_table.rb +25 -0
- data/db/migrate/060_cleanup_contents_table.rb +29 -0
- data/db/migrate/061_convert_title_prefix_setting.rb +25 -0
- data/db/schema.mysql.sql +139 -108
- data/db/schema.postgresql.sql +140 -108
- data/db/schema.rb +97 -75
- data/db/schema.sqlite.sql +140 -108
- data/db/schema.sqlserver.sql +144 -109
- data/db/schema_version +1 -1
- data/lang/fr_FR.rb +469 -0
- data/lib/email_notify.rb +4 -4
- data/lib/generators/sidebar/sidebar_generator.rb +15 -6
- data/lib/generators/sidebar/templates/Rakefile +22 -0
- data/lib/generators/sidebar/templates/content.rhtml +10 -0
- data/lib/generators/sidebar/templates/init.rb +4 -0
- data/lib/generators/sidebar/templates/sidebar.rb +16 -0
- data/lib/generators/sidebar/templates/unit_test.rb +8 -0
- data/lib/jabber_notify.rb +8 -7
- data/lib/memory_profiler.rb +60 -0
- data/lib/rails_patch/active_record.rb +0 -27
- data/lib/route_cache.rb +15 -0
- data/lib/sidebars/component_plugin.rb +3 -0
- data/lib/sidebars/consolidated_plugin.rb +26 -0
- data/lib/sidebars/plugin.rb +8 -13
- data/lib/spam_protection.rb +35 -23
- data/lib/tasks/release.rake +7 -7
- data/lib/text_filter_plugin.rb +55 -15
- data/lib/typo_deprecated.rb +19 -0
- data/lib/typo_version.rb +1 -1
- data/public/images/bracket.gif +0 -0
- data/public/images/cancel.png +0 -0
- data/public/images/checked.png +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/edit.png +0 -0
- data/public/images/help.png +0 -0
- data/public/images/show.png +0 -0
- data/public/javascripts/codecollapse.js +8 -0
- data/public/javascripts/controls.js +41 -23
- data/public/javascripts/dragdrop.js +105 -76
- data/public/javascripts/effects.js +293 -163
- data/public/javascripts/prototype.js +900 -391
- data/public/stylesheets/administration.css +390 -318
- data/public/stylesheets/codecollapse.css +3 -0
- data/public/stylesheets/minimal.css +142 -0
- data/public/stylesheets/textmate/dawn.css +209 -0
- data/public/stylesheets/textmate/iplastic.css +142 -0
- data/public/stylesheets/textmate/space_cadet.css +99 -0
- data/public/stylesheets/textmate/textmate.css +48 -0
- data/public/stylesheets/textmate/twilight.css +227 -0
- data/script/process/inspector +3 -0
- data/spec/controllers/accounts_controller_spec.rb +184 -0
- data/spec/controllers/articles_controller_spec.rb +47 -0
- data/spec/fixtures/articles_tags.yml +19 -0
- data/spec/fixtures/blacklist_patterns.yml +10 -0
- data/spec/fixtures/blogs.yml +77 -0
- data/spec/fixtures/categories.yml +35 -0
- data/{test/fixtures/articles_categories.yml → spec/fixtures/categorizations.yml} +0 -0
- data/spec/fixtures/contents.yml +215 -0
- data/spec/fixtures/feedback.yml +159 -0
- data/spec/fixtures/notifications.yml +0 -0
- data/spec/fixtures/page_caches.yml +7 -0
- data/spec/fixtures/redirects.yml +13 -0
- data/spec/fixtures/resources.yml +24 -0
- data/spec/fixtures/sidebars.yml +12 -0
- data/spec/fixtures/tags.yml +13 -0
- data/spec/fixtures/text_filters.yml +42 -0
- data/spec/fixtures/triggers.yml +1 -0
- data/spec/fixtures/users.yml +56 -0
- data/spec/fixtures/whiteboards.yml +13 -0
- data/spec/helpers/admin_base_helper_spec.rb +13 -0
- data/spec/models/amazon_sidebar_spec.rb +40 -0
- data/spec/models/audioscrobbler_spec.rb +134 -0
- data/spec/models/blog_spec.rb +28 -0
- data/spec/models/cache_support_spec.rb +55 -0
- data/spec/models/category_spec.rb +48 -0
- data/spec/models/configuration_spec.rb +108 -0
- data/spec/models/content_state_spec.rb +1010 -0
- data/spec/models/delegate_to_content_state_spec.rb +126 -0
- data/spec/models/delicious_spec.rb +101 -0
- data/spec/models/flickr_spec.rb +128 -0
- data/spec/models/metafragment_spec.rb +65 -0
- data/spec/models/page_cache_spec.rb +35 -0
- data/spec/models/page_spec.rb +88 -0
- data/spec/models/ping_spec.rb +133 -0
- data/spec/models/redirect_spec.rb +17 -0
- data/spec/models/resource_spec.rb +43 -0
- data/spec/models/static_sidebar_spec.rb +17 -0
- data/spec/models/tag_spec.rb +54 -0
- data/spec/models/text_filter_spec.rb +38 -0
- data/spec/models/theme_spec.rb +45 -0
- data/spec/models/trackback_spec.rb +60 -0
- data/spec/models/trigger_spec.rb +41 -0
- data/spec/models/user_spec.rb +105 -0
- data/test/fixtures/blogs.yml +5 -4
- data/test/fixtures/categorizations.yml +31 -0
- data/test/fixtures/contents.yml +2 -160
- data/test/fixtures/feedback.yml +159 -0
- data/test/fixtures/sidebars.yml +11 -4
- data/test/functional/accounts_controller_test.rb +6 -10
- data/test/functional/admin/article_preview_test.rb +21 -6
- data/test/functional/admin/blacklist_controller_test.rb +11 -11
- data/test/functional/admin/categories_controller_test.rb +13 -13
- data/test/functional/admin/comments_controller_test.rb +21 -21
- data/test/functional/admin/content_controller_test.rb +30 -38
- data/test/functional/admin/feedback_controller_test.rb +12 -12
- data/test/functional/admin/general_controller_test.rb +2 -2
- data/test/functional/admin/pages_controller_test.rb +3 -18
- data/test/functional/admin/resources_controller_test.rb +7 -7
- data/test/functional/admin/textfilters_controller_test.rb +2 -2
- data/test/functional/admin/themes_controller_test.rb +1 -1
- data/test/functional/admin/trackbacks_controller_test.rb +21 -21
- data/test/functional/admin/users_controller_test.rb +21 -18
- data/test/functional/articles_controller_test.rb +62 -46
- data/test/functional/backend_controller_test.rb +6 -6
- data/test/functional/redirect_controller_test.rb +3 -3
- data/test/functional/textfilter_controller_test.rb +10 -12
- data/test/functional/theme_controller_test.rb +1 -1
- data/test/functional/xml_controller_test.rb +7 -5
- data/test/mocks/themes/azure/layouts/default.rhtml +2 -2
- data/test/test_helper.rb +75 -0
- data/test/unit/amazon_sidebar_test.rb +36 -0
- data/test/unit/article_test.rb +36 -4
- data/test/unit/blog_test.rb +5 -36
- data/test/unit/cache_support_test.rb +62 -0
- data/test/unit/category_test.rb +6 -1
- data/test/unit/comment_test.rb +34 -9
- data/test/unit/content_state/factory_test.rb +8 -0
- data/test/unit/content_state/feedback_states_test.rb +71 -0
- data/test/unit/magnolia_test.rb +1 -1
- data/test/unit/notification_test.rb +10 -0
- data/test/unit/page_test.rb +20 -0
- data/test/unit/ping_test.rb +1 -1
- data/test/unit/sidebar_test.rb +2 -7
- data/test/unit/static_sidebar_test.rb +19 -0
- data/test/unit/tag_test.rb +6 -1
- data/test/unit/text_filter_test.rb +21 -21
- data/test/unit/theme_test.rb +1 -1
- data/test/unit/trackback_test.rb +16 -1
- data/themes/azure/layouts/default.rhtml +2 -2
- data/themes/scribbish/layouts/default.rhtml +2 -2
- data/themes/scribbish/stylesheets/content.css +6 -8
- data/themes/scribbish/views/articles/_article.rhtml +10 -10
- data/themes/scribbish/views/articles/_comment.rhtml +16 -12
- data/themes/scribbish/views/articles/_comment_form.rhtml +25 -22
- data/themes/scribbish/views/articles/_search.rhtml +14 -13
- data/themes/scribbish/views/articles/comment_preview.rhtml +3 -3
- data/themes/scribbish/views/articles/index.rhtml +1 -1
- data/themes/scribbish/views/articles/read.rhtml +8 -8
- data/vendor/cached_model/History.txt +30 -0
- data/vendor/cached_model/LICENSE.txt +30 -0
- data/vendor/cached_model/Manifest.txt +7 -0
- data/vendor/cached_model/README.txt +96 -0
- data/vendor/cached_model/Rakefile +25 -0
- data/vendor/cached_model/lib/cached_model.rb +287 -0
- data/vendor/cached_model/test/test_cached_model.rb +593 -0
- data/vendor/flickr/flickr.rb +1 -1
- data/vendor/memcache-client/History.txt +25 -0
- data/vendor/memcache-client/LICENSE.txt +30 -0
- data/vendor/memcache-client/Manifest.txt +8 -0
- data/vendor/memcache-client/README.txt +46 -0
- data/vendor/memcache-client/Rakefile +23 -0
- data/vendor/memcache-client/lib/memcache.rb +491 -0
- data/vendor/memcache-client/lib/memcache_util.rb +71 -0
- data/vendor/memcache-client/test/test_mem_cache.rb +284 -0
- data/vendor/plugins/action_view_patch/Rakefile +22 -0
- data/vendor/plugins/action_view_patch/init.rb +1 -0
- data/vendor/plugins/action_view_patch/lib/action_view_patch.rb +18 -0
- data/vendor/plugins/action_view_patch/test/action_view_patch_test.rb +56 -0
- data/vendor/plugins/aimpresence_sidebar/Rakefile +22 -0
- data/vendor/plugins/aimpresence_sidebar/init.rb +4 -0
- data/vendor/plugins/aimpresence_sidebar/lib/aimpresence_sidebar.rb +21 -0
- data/vendor/plugins/aimpresence_sidebar/test/aimpresence_sidebar_test.rb +33 -0
- data/vendor/plugins/aimpresence_sidebar/views/content.rhtml +4 -0
- data/vendor/plugins/amazon_sidebar/init.rb +5 -0
- data/vendor/plugins/amazon_sidebar/lib/amazon_sidebar.rb +16 -0
- data/vendor/plugins/amazon_sidebar/views/content.rhtml +4 -0
- data/vendor/plugins/archives_sidebar/Rakefile +22 -0
- data/vendor/plugins/archives_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/archives_controller.rb → vendor/plugins/archives_sidebar/lib/archives_sidebar.rb} +7 -6
- data/vendor/plugins/archives_sidebar/test/archives_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/archives → vendor/plugins/archives_sidebar/views}/content.rhtml +2 -2
- data/vendor/plugins/audioscrobbler_sidebar/Rakefile +22 -0
- data/vendor/plugins/audioscrobbler_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/audioscrobbler_sidebar/lib}/audioscrobbler.rb +0 -0
- data/{components/plugins/sidebars/audioscrobbler_controller.rb → vendor/plugins/audioscrobbler_sidebar/lib/audioscrobbler_sidebar.rb} +7 -4
- data/vendor/plugins/audioscrobbler_sidebar/test/audioscrobbler_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/audioscrobbler → vendor/plugins/audioscrobbler_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/backpack_sidebar/Rakefile +22 -0
- data/vendor/plugins/backpack_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/backpack_sidebar/lib}/backpack.rb +0 -0
- data/{components/plugins/sidebars/backpack_controller.rb → vendor/plugins/backpack_sidebar/lib/backpack_sidebar.rb} +6 -3
- data/vendor/plugins/backpack_sidebar/test/backpack_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/backpack → vendor/plugins/backpack_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/category_sidebar/Rakefile +22 -0
- data/vendor/plugins/category_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/category_controller.rb → vendor/plugins/category_sidebar/lib/category_sidebar.rb} +3 -5
- data/vendor/plugins/category_sidebar/test/category_sidebar_test.rb +8 -0
- data/vendor/plugins/category_sidebar/views/content.rhtml +10 -0
- data/vendor/plugins/delicious_sidebar/Rakefile +22 -0
- data/vendor/plugins/delicious_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/delicious_sidebar/lib}/delicious.rb +0 -0
- data/{components/plugins/sidebars/delicious_controller.rb → vendor/plugins/delicious_sidebar/lib/delicious_sidebar.rb} +16 -10
- data/vendor/plugins/delicious_sidebar/test/delicious_sidebar_test.rb +8 -0
- data/vendor/plugins/delicious_sidebar/views/content.rhtml +20 -0
- data/vendor/plugins/flickr_sidebar/Rakefile +22 -0
- data/vendor/plugins/flickr_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/flickr_sidebar/lib}/flickr.rb +1 -1
- data/vendor/plugins/flickr_sidebar/lib/flickr_sidebar.rb +15 -0
- data/vendor/plugins/flickr_sidebar/test/flickr_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/flickr → vendor/plugins/flickr_sidebar/views}/content.rhtml +5 -5
- data/vendor/plugins/fortythree_sidebar/Rakefile +22 -0
- data/vendor/plugins/fortythree_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/fortythree_sidebar/lib}/fortythree.rb +0 -0
- data/{components/plugins/sidebars/fortythree_controller.rb → vendor/plugins/fortythree_sidebar/lib/fortythree_sidebar.rb} +5 -4
- data/vendor/plugins/fortythree_sidebar/test/fortythree_sidebar_test.rb +8 -0
- data/vendor/plugins/fortythree_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/fortythreeplaces_sidebar/Rakefile +22 -0
- data/vendor/plugins/fortythreeplaces_sidebar/init.rb +5 -0
- data/vendor/plugins/fortythreeplaces_sidebar/lib/fortythree.rb +62 -0
- data/{components/plugins/sidebars/fortythreeplaces_controller.rb → vendor/plugins/fortythreeplaces_sidebar/lib/fortythreeplaces_sidebar.rb} +5 -4
- data/vendor/plugins/fortythreeplaces_sidebar/test/fortythreeplaces_sidebar_test.rb +8 -0
- data/vendor/plugins/fortythreeplaces_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/haml/MIT-LICENSE +20 -0
- data/vendor/plugins/haml/REFERENCE +662 -0
- data/vendor/plugins/haml/Rakefile +171 -0
- data/vendor/plugins/haml/VERSION +1 -0
- data/vendor/plugins/haml/bin/haml +18 -0
- data/vendor/plugins/haml/init.rb +3 -0
- data/vendor/plugins/haml/lib/haml/buffer.rb +224 -0
- data/vendor/plugins/haml/lib/haml/engine.rb +557 -0
- data/vendor/plugins/haml/lib/haml/helpers.rb +220 -0
- data/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rb +54 -0
- data/vendor/plugins/haml/lib/haml/template.rb +138 -0
- data/vendor/plugins/haml/test/benchmark.rb +62 -0
- data/vendor/plugins/haml/test/engine_test.rb +93 -0
- data/vendor/plugins/haml/test/helper_test.rb +105 -0
- data/vendor/plugins/haml/test/mocks/article.rb +6 -0
- data/vendor/plugins/haml/test/profile.rb +45 -0
- data/vendor/plugins/haml/test/results/content_for_layout.xhtml +16 -0
- data/vendor/plugins/haml/test/results/eval_suppressed.xhtml +2 -0
- data/vendor/plugins/haml/test/results/helpers.xhtml +50 -0
- data/vendor/plugins/haml/test/results/helpful.xhtml +5 -0
- data/vendor/plugins/haml/test/results/just_stuff.xhtml +38 -0
- data/vendor/plugins/haml/test/results/list.xhtml +12 -0
- data/vendor/plugins/haml/test/results/original_engine.xhtml +24 -0
- data/vendor/plugins/haml/test/results/partials.xhtml +20 -0
- data/vendor/plugins/haml/test/results/silent_script.xhtml +74 -0
- data/vendor/plugins/haml/test/results/standard.xhtml +42 -0
- data/vendor/plugins/haml/test/results/tag_parsing.xhtml +28 -0
- data/vendor/plugins/haml/test/results/very_basic.xhtml +7 -0
- data/vendor/plugins/haml/test/results/whitespace_handling.xhtml +51 -0
- data/vendor/plugins/haml/test/rhtml/standard.rhtml +51 -0
- data/vendor/plugins/haml/test/runner.rb +15 -0
- data/vendor/plugins/haml/test/template_test.rb +137 -0
- data/vendor/plugins/haml/test/templates/_partial.haml +7 -0
- data/vendor/plugins/haml/test/templates/_text_area.haml +3 -0
- data/vendor/plugins/haml/test/templates/content_for_layout.haml +10 -0
- data/vendor/plugins/haml/test/templates/eval_suppressed.haml +5 -0
- data/vendor/plugins/haml/test/templates/helpers.haml +39 -0
- data/vendor/plugins/haml/test/templates/helpful.haml +6 -0
- data/vendor/plugins/haml/test/templates/just_stuff.haml +34 -0
- data/vendor/plugins/haml/test/templates/list.haml +12 -0
- data/vendor/plugins/haml/test/templates/original_engine.haml +17 -0
- data/vendor/plugins/haml/test/templates/partialize.haml +1 -0
- data/vendor/plugins/haml/test/templates/partials.haml +12 -0
- data/vendor/plugins/haml/test/templates/silent_script.haml +40 -0
- data/vendor/plugins/haml/test/templates/standard.haml +40 -0
- data/vendor/plugins/haml/test/templates/tag_parsing.haml +24 -0
- data/vendor/plugins/haml/test/templates/very_basic.haml +4 -0
- data/vendor/plugins/haml/test/templates/whitespace_handling.haml +66 -0
- data/vendor/plugins/localization/CHANGELOG +1 -0
- data/vendor/plugins/localization/README +85 -0
- data/vendor/plugins/localization/init.rb +3 -0
- data/vendor/plugins/localization/lib/localization.rb +46 -0
- data/vendor/plugins/magnolia_sidebar/Rakefile +22 -0
- data/vendor/plugins/magnolia_sidebar/init.rb +5 -0
- data/{app/models/aggregations/magnolia.rb → vendor/plugins/magnolia_sidebar/lib/magnolia_aggregation.rb} +0 -0
- data/vendor/plugins/magnolia_sidebar/lib/magnolia_sidebar.rb +16 -0
- data/vendor/plugins/magnolia_sidebar/test/magnolia_sidebar_test.rb +8 -0
- data/vendor/plugins/magnolia_sidebar/views/content.rhtml +12 -0
- data/vendor/plugins/recent_comments_sidebar/Rakefile +22 -0
- data/vendor/plugins/recent_comments_sidebar/init.rb +5 -0
- data/vendor/plugins/recent_comments_sidebar/lib/recent_comments_sidebar.rb +16 -0
- data/vendor/plugins/recent_comments_sidebar/test/recent_comments_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/recent_comments → vendor/plugins/recent_comments_sidebar/views}/content.rhtml +2 -2
- data/vendor/plugins/static_sidebar/init.rb +4 -0
- data/{components/plugins/sidebars/static_controller.rb → vendor/plugins/static_sidebar/lib/static_sidebar.rb} +4 -7
- data/vendor/plugins/static_sidebar/views/content.rhtml +2 -0
- data/vendor/plugins/tada_sidebar/Rakefile +22 -0
- data/vendor/plugins/tada_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/tada_sidebar/lib}/tada.rb +0 -0
- data/{components/plugins/sidebars/tada_controller.rb → vendor/plugins/tada_sidebar/lib/tada_sidebar.rb} +8 -4
- data/vendor/plugins/tada_sidebar/test/tada_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/tada → vendor/plugins/tada_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/tag_sidebar/Rakefile +22 -0
- data/vendor/plugins/tag_sidebar/init.rb +5 -0
- data/vendor/plugins/tag_sidebar/lib/tag_sidebar.rb +24 -0
- data/vendor/plugins/tag_sidebar/test/tag_sidebar_test.rb +8 -0
- data/vendor/plugins/tag_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/technorati_sidebar/Rakefile +22 -0
- data/vendor/plugins/technorati_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/technorati_sidebar/lib}/technorati.rb +0 -0
- data/{components/plugins/sidebars/technorati_controller.rb → vendor/plugins/technorati_sidebar/lib/technorati_sidebar.rb} +8 -4
- data/vendor/plugins/technorati_sidebar/test/technorati_sidebar_test.rb +8 -0
- data/vendor/plugins/technorati_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/typo_textfilter_amazon/README +5 -0
- data/vendor/plugins/typo_textfilter_amazon/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_amazon/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_amazon/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_amazon/lib/typo_textfilter_amazon.rb +45 -0
- data/vendor/plugins/typo_textfilter_amazon/tasks/typo_textfilter_amazon_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_amazon/test/typo_textfilter_amazon_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_code/README +4 -0
- data/vendor/plugins/typo_textfilter_code/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_code/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_code/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_code/lib/typo_textfilter_code.rb +62 -0
- data/vendor/plugins/typo_textfilter_code/tasks/typo_textfilter_code_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_code/test/typo_textfilter_code_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_flickr/README +4 -0
- data/vendor/plugins/typo_textfilter_flickr/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_flickr/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_flickr/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_flickr/lib/typo_textfilter_flickr.rb +79 -0
- data/vendor/plugins/typo_textfilter_flickr/tasks/typo_textfilter_flickr_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_flickr/test/typo_textfilter_flickr_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/README +4 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/lib/typo_textfilter_htmlfilter.rb +12 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/tasks/typo_textfilter_htmlfilter_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/test/typo_textfilter_htmlfilter_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_lightbox/README +4 -0
- data/vendor/plugins/typo_textfilter_lightbox/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_lightbox/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_lightbox/install.rb +1 -0
- data/{components/plugins/textfilters/lightbox_controller.rb → vendor/plugins/typo_textfilter_lightbox/lib/typo_textfilter_lightbox.rb} +64 -61
- data/vendor/plugins/typo_textfilter_lightbox/tasks/typo_textfilter_lightbox_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_lightbox/test/typo_textfilter_lightbox_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_markdown/README +4 -0
- data/vendor/plugins/typo_textfilter_markdown/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_markdown/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_markdown/install.rb +1 -0
- data/{components/plugins/textfilters/markdown_controller.rb → vendor/plugins/typo_textfilter_markdown/lib/typo_textfilter_markdown.rb} +13 -9
- data/vendor/plugins/typo_textfilter_markdown/tasks/typo_textfilter_markdown_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_markdown/test/typo_textfilter_markdown_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_none/README +4 -0
- data/vendor/plugins/typo_textfilter_none/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_none/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_none/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_none/lib/typo_textfilter_none.rb +12 -0
- data/vendor/plugins/typo_textfilter_none/tasks/typo_textfilter_none_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_none/test/typo_textfilter_none_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_smartypants/README +4 -0
- data/vendor/plugins/typo_textfilter_smartypants/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_smartypants/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_smartypants/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_smartypants/lib/typo_textfilter_smartypants.rb +12 -0
- data/vendor/plugins/typo_textfilter_smartypants/tasks/typo_textfilter_smartypants_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_smartypants/test/typo_textfilter_smartypants_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_sparkline/README +4 -0
- data/vendor/plugins/typo_textfilter_sparkline/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_sparkline/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_sparkline/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_sparkline/lib/typo_textfilter_sparkline.rb +92 -0
- data/vendor/plugins/typo_textfilter_sparkline/tasks/typo_textfilter_sparkline_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_sparkline/test/typo_textfilter_sparkline_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_textile/README +4 -0
- data/vendor/plugins/typo_textfilter_textile/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_textile/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_textile/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_textile/lib/typo_textfilter_textile.rb +18 -0
- data/vendor/plugins/typo_textfilter_textile/tasks/typo_textfilter_textile_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_textile/test/typo_textfilter_textile_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/README +4 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/lib/typo_textfilter_textile_and_markdown.rb +12 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/tasks/typo_textfilter_textile_and_markdown_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/test/typo_textfilter_textile_and_markdown_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_tmcode/README +4 -0
- data/vendor/plugins/typo_textfilter_tmcode/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_tmcode/init.rb +3 -0
- data/vendor/plugins/typo_textfilter_tmcode/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_tmcode/lib/typo_textfilter_tmcode.rb +86 -0
- data/vendor/plugins/typo_textfilter_tmcode/tasks/typo_textfilter_tmcode_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_tmcode/test/typo_textfilter_tmcode_test.rb +8 -0
- data/vendor/plugins/upcoming_sidebar/Rakefile +22 -0
- data/vendor/plugins/upcoming_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/upcoming_sidebar/lib}/upcoming.rb +0 -0
- data/vendor/plugins/upcoming_sidebar/lib/upcoming_sidebar.rb +15 -0
- data/vendor/plugins/upcoming_sidebar/test/upcoming_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/upcoming → vendor/plugins/upcoming_sidebar/views}/content.rhtml +3 -3
- data/vendor/plugins/xbox_sidebar/Rakefile +22 -0
- data/vendor/plugins/xbox_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/xbox_controller.rb → vendor/plugins/xbox_sidebar/lib/xbox_sidebar.rb} +1 -1
- data/vendor/plugins/xbox_sidebar/test/xbox_sidebar_test.rb +8 -0
- data/vendor/plugins/xbox_sidebar/views/content.rhtml +2 -0
- data/vendor/plugins/xml_sidebar/Rakefile +22 -0
- data/vendor/plugins/xml_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/xml_controller.rb → vendor/plugins/xml_sidebar/lib/xml_sidebar.rb} +1 -1
- data/vendor/plugins/xml_sidebar/test/xml_sidebar_test.rb +8 -0
- data/vendor/plugins/xml_sidebar/views/content.rhtml +12 -0
- metadata +505 -101
- data/app/controllers/sidebar_controller.rb +0 -50
- data/app/models/content_observer.rb +0 -5
- data/components/plugins/sidebars/aimpresence/content.rhtml +0 -4
- data/components/plugins/sidebars/aimpresence_controller.rb +0 -10
- data/components/plugins/sidebars/amazon/content.rhtml +0 -4
- data/components/plugins/sidebars/amazon_controller.rb +0 -17
- data/components/plugins/sidebars/category/content.rhtml +0 -10
- data/components/plugins/sidebars/delicious/content.rhtml +0 -20
- data/components/plugins/sidebars/flickr_controller.rb +0 -16
- data/components/plugins/sidebars/fortythree/content.rhtml +0 -8
- data/components/plugins/sidebars/fortythreeplaces/content.rhtml +0 -8
- data/components/plugins/sidebars/magnolia/content.rhtml +0 -12
- data/components/plugins/sidebars/magnolia_controller.rb +0 -17
- data/components/plugins/sidebars/recent_comments_controller.rb +0 -23
- data/components/plugins/sidebars/static/content.rhtml +0 -2
- data/components/plugins/sidebars/tag/content.rhtml +0 -8
- data/components/plugins/sidebars/tag_controller.rb +0 -18
- data/components/plugins/sidebars/technorati/content.rhtml +0 -8
- data/components/plugins/sidebars/upcoming_controller.rb +0 -11
- data/components/plugins/sidebars/xbox/content.rhtml +0 -2
- data/components/plugins/sidebars/xml/content.rhtml +0 -12
- data/components/plugins/textfilters/amazon_controller.rb +0 -39
- data/components/plugins/textfilters/code_controller.rb +0 -59
- data/components/plugins/textfilters/flickr_controller.rb +0 -75
- data/components/plugins/textfilters/htmlfilter_controller.rb +0 -8
- data/components/plugins/textfilters/macropost_controller.rb +0 -14
- data/components/plugins/textfilters/macropre_controller.rb +0 -14
- data/components/plugins/textfilters/none_controller.rb +0 -8
- data/components/plugins/textfilters/smartypants_controller.rb +0 -8
- data/components/plugins/textfilters/sparkline_controller.rb +0 -88
- data/components/plugins/textfilters/textile_and_markdown_controller.rb +0 -8
- data/components/plugins/textfilters/textile_controller.rb +0 -14
- data/db/schema.mysql-v3.sql +0 -218
- data/lib/generators/sidebar/templates/components/plugins/sidebars/controller_template.rb +0 -20
- data/lib/generators/sidebar/templates/components/plugins/sidebars/views/content_template.rhtml +0 -4
- data/lib/rails_patch/components.rb +0 -14
- data/public/images/checked.gif +0 -0
- data/test/unit/observer_test.rb +0 -40
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
context 'Given the results of Category.find_all_with_article_counters' do
|
|
4
|
+
fixtures :contents, :categories, :categorizations, :blogs
|
|
5
|
+
|
|
6
|
+
setup { @cats = Category.find_all_with_article_counters }
|
|
7
|
+
|
|
8
|
+
specify "Categories should be sorted by category.position" do
|
|
9
|
+
@cats.should == @cats.sort_by { |c| c.position }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
specify "Counts should be correct" do
|
|
13
|
+
@cats.each do |cat|
|
|
14
|
+
cat.article_counter.should == cat.published_articles.size
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context 'Given the fixtures' do
|
|
20
|
+
fixtures :contents, :categories, :categorizations, :blogs
|
|
21
|
+
|
|
22
|
+
specify 'find gets the order right' do
|
|
23
|
+
cats = Category.find(:all)
|
|
24
|
+
cats.should == cats.sort_by { |c| c.position }
|
|
25
|
+
Category.reorder(cats.reverse.collect { |c| c.id })
|
|
26
|
+
Category.find(:all).should == cats.reverse
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
specify 'can still override order in find' do
|
|
30
|
+
cats = Category.find(:all, :order => 'name ASC')
|
|
31
|
+
|
|
32
|
+
cats.should == cats.sort_by {|c| c.name}
|
|
33
|
+
Category.find(:all).should_not == cats
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
specify '.reorder_alpha puts categories in alphabetical order' do
|
|
37
|
+
Category.find(:all).should_not == Category.find(:all, :order => :name)
|
|
38
|
+
Category.reorder_alpha
|
|
39
|
+
Category.find(:all).should == Category.find(:all, :order => :name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
specify 'A category knows its url' do
|
|
43
|
+
categories(:software).permalink_url.should ==
|
|
44
|
+
'http://myblog.net/articles/category/software'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
context 'Given a new blog' do
|
|
4
|
+
setup { @blog = Blog.new }
|
|
5
|
+
|
|
6
|
+
# Must find a better name for this key!
|
|
7
|
+
specify 'Global spam protection is not enabled' do
|
|
8
|
+
@blog.should_not_sp_global
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
specify '#blog_name should be My Shiny Weblog!' do
|
|
12
|
+
@blog.blog_name.should == 'My Shiny Weblog!'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
specify '#blog_subtitle should be ""' do
|
|
16
|
+
@blog.blog_subtitle.should == ''
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
specify "#sp_article_auto_close should be 0" do
|
|
20
|
+
@blog.sp_article_auto_close.should == 0
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
specify "#sp_allow_non_ajax_comments should be false" do
|
|
24
|
+
@blog.should_sp_allow_non_ajax_comments
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
specify "#sp_url_limit should be 0" do
|
|
28
|
+
@blog.sp_url_limit.should_be 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
specify "#sp_akismet_key should be blank" do
|
|
32
|
+
@blog.sp_akismet_key.should == ''
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Another icky setting name
|
|
36
|
+
specify "#itunes_explicit should be false" do
|
|
37
|
+
@blog.itunes_explicit.should_be false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
specify "Other itunes settings should be blank" do
|
|
41
|
+
%w{ author subtitle summary owner email name copyright}.each do |setting|
|
|
42
|
+
@blog.send("itunes_#{setting}").should == ''
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
specify '#text_filter and #comment_text_filter should be blank' do
|
|
47
|
+
@blog.text_filter.should == ''
|
|
48
|
+
@blog.comment_text_filter.should == ''
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
specify '#limit_article_display and #limit_rss_display should be 10' do
|
|
52
|
+
@blog.limit_article_display.should == 10
|
|
53
|
+
@blog.limit_rss_display.should == 10
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
specify 'Pings should not be allowed by default' do
|
|
57
|
+
@blog.should_not_default_allow_pings
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
specify 'Comments should be allowed by default' do
|
|
61
|
+
@blog.should_default_allow_comments
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
specify 'Should not link to author' do
|
|
65
|
+
@blog.should_not_link_to_author
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
specify 'Should show extended on rss' do
|
|
69
|
+
@blog.should_show_extended_on_rss
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
specify '#theme should be "azure"' do
|
|
73
|
+
@blog.theme.should == 'azure'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
specify 'should not use gravatar' do
|
|
77
|
+
@blog.should_not_use_gravatar
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Another clumsy setting name
|
|
81
|
+
specify '#global_pings_disable should be false' do
|
|
82
|
+
@blog.global_pings_disable.should == false
|
|
83
|
+
@blog.should_not_global_pings_disable
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
specify 'should ping technorati, blog.gs and weblogs.com' do
|
|
87
|
+
@blog.ping_urls.should == "http://rpc.technorati.com/rpc/ping\nhttp://ping.blo.gs/\nhttp://rpc.weblogs.com/RPC2"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
specify 'should send outbound pings' do
|
|
91
|
+
@blog.should_send_outbound_pings
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
specify '#email_from should be typo@example.com' do
|
|
95
|
+
@blog.email_from.should == 'typo@example.com'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
specify 'Jabber address and password should be blank' do
|
|
99
|
+
@blog.jabber_address.should_be_blank
|
|
100
|
+
@blog.jabber_password.should_be_blank
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
specify '#is_okay should be false until #blog_name is explicitly set' do
|
|
104
|
+
@blog.is_ok?.should_be false
|
|
105
|
+
@blog.blog_name = 'Specific blog name'
|
|
106
|
+
@blog.is_ok?.should_be true
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,1010 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
module ContentStateSpecHelper
|
|
4
|
+
def stop_the_clock
|
|
5
|
+
@this_instant = Time.now
|
|
6
|
+
Time.stub!(:now).and_return { @this_instant }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def should_set_content_fields(expectations = {})
|
|
10
|
+
expectations.each { |flag, val| @content.should_receive(:[]=).with(flag, val).and_return(val) }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
alias_method :should_set_content_field, :should_set_content_fields
|
|
14
|
+
|
|
15
|
+
def should_change_state_to(statesym)
|
|
16
|
+
expected_state = case statesym
|
|
17
|
+
when :draft; ContentState::Draft
|
|
18
|
+
when :just_published; ContentState::JustPublished
|
|
19
|
+
when :published; ContentState::Published
|
|
20
|
+
when :draft; ContentState::Draft
|
|
21
|
+
when :publication_pending; ContentState::PublicationPending
|
|
22
|
+
when :withdrawn; ContentState::Withdrawn
|
|
23
|
+
when :just_withdrawn; ContentState::JustWithdrawn
|
|
24
|
+
when :unclassified; ContentState::Unclassified
|
|
25
|
+
when :new; ContentState::New
|
|
26
|
+
when :ham; ContentState::Ham
|
|
27
|
+
when :just_marked_as_ham; ContentState::JustMarkedAsHam
|
|
28
|
+
when :just_marked_as_spam; ContentState::JustMarkedAsSpam
|
|
29
|
+
when :spam; ContentState::Spam
|
|
30
|
+
when :presumed_ham; ContentState::PresumedHam
|
|
31
|
+
when :just_presumed_ham; ContentState::JustPresumedHam
|
|
32
|
+
when :presumed_spam; ContentState::PresumedSpam
|
|
33
|
+
else
|
|
34
|
+
raise "Don't recognize #{statesym.inspect} as a state"
|
|
35
|
+
end.instance
|
|
36
|
+
@content.should_receive(:state=).with(expected_state)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'With ContentState::New.instance and mock content' do
|
|
41
|
+
include ContentStateSpecHelper
|
|
42
|
+
|
|
43
|
+
setup do
|
|
44
|
+
@content = mock('content')
|
|
45
|
+
@state = ContentState::New.instance
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
specify '#just_published? should be false' do
|
|
49
|
+
@state.should_not_be_just_published
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
specify '#just_changed_published_status? should be false' do
|
|
53
|
+
@state.just_changed_published_status?.should_be false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
specify '#enter_hook should set :published false and :published_at nil' do
|
|
57
|
+
should_set_content_fields :published => false, :published_at => nil
|
|
58
|
+
|
|
59
|
+
@state.enter_hook(@content)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
specify '#before_save should set content.state to Draft' do
|
|
63
|
+
should_change_state_to :draft
|
|
64
|
+
@state.before_save(@content)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
specify '#change_published_state => true should set published flag and change state to JustPublished' do
|
|
68
|
+
should_set_content_field :published => true
|
|
69
|
+
should_change_state_to :just_published
|
|
70
|
+
|
|
71
|
+
@state.change_published_state(@content, true)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
specify '#change_published_state to false should set published flag' do
|
|
75
|
+
should_set_content_field :published => false
|
|
76
|
+
@state.change_published_state(@content, false)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
specify '#set_published_at to the_future should set published_at and change to PublicationPending' do
|
|
80
|
+
stop_the_clock
|
|
81
|
+
should_set_content_field :published_at => Time.now + 10
|
|
82
|
+
should_change_state_to :publication_pending
|
|
83
|
+
|
|
84
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
specify '#set_published_at now should set published_at and change to JustPublished' do
|
|
88
|
+
stop_the_clock
|
|
89
|
+
should_change_state_to :just_published
|
|
90
|
+
should_set_content_field :published_at => Time.now
|
|
91
|
+
|
|
92
|
+
@state.set_published_at(@content, Time.now)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
specify '#set_published_at in the past should set published_at and change to JustPublished' do
|
|
96
|
+
stop_the_clock
|
|
97
|
+
should_change_state_to :just_published
|
|
98
|
+
should_set_content_field :published_at => Time.now - 10
|
|
99
|
+
|
|
100
|
+
@state.set_published_at(@content, Time.now - 10)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
specify '#send_notifications should not send notifications' do
|
|
104
|
+
@content.should_not_receive(:anything)
|
|
105
|
+
@state.send_notifications(@content)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
109
|
+
@content.should_not_receive(:really_send_pings)
|
|
110
|
+
|
|
111
|
+
@state.send_pings(@content)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
context 'With ContentState::Draft.instance and mock content' do
|
|
116
|
+
include ContentStateSpecHelper
|
|
117
|
+
|
|
118
|
+
setup do
|
|
119
|
+
@content = mock('content')
|
|
120
|
+
@state = ContentState::Draft.instance
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
specify '#just_published? should be false' do
|
|
124
|
+
@state.should_not_be_just_published
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
specify '#just_changed_published_status? should be false' do
|
|
128
|
+
@state.just_changed_published_status?.should_be false
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
specify '#enter_hook should set :published false and set published_at to nil' do
|
|
132
|
+
should_set_content_fields :published => false, :published_at => nil
|
|
133
|
+
|
|
134
|
+
@state.enter_hook(@content)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
specify '#before_save should not do anything' do
|
|
138
|
+
@state.before_save(@content)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
specify '#change_published_state => true should set published flag and change state to JustPublished' do
|
|
142
|
+
should_set_content_field :published => true
|
|
143
|
+
should_change_state_to :just_published
|
|
144
|
+
|
|
145
|
+
@state.change_published_state(@content, true)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
specify '#change_published_state to false should set published flag' do
|
|
149
|
+
should_set_content_field :published => false
|
|
150
|
+
@state.change_published_state(@content, false)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
specify '#set_published_at to the_future should set published_at and change to PublicationPending' do
|
|
154
|
+
stop_the_clock
|
|
155
|
+
should_set_content_field :published_at => Time.now + 10
|
|
156
|
+
should_change_state_to :publication_pending
|
|
157
|
+
|
|
158
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
specify '#set_published_at <=now should discard the time and set published_at to nil' do
|
|
162
|
+
stop_the_clock
|
|
163
|
+
@content.should_receive(:[]=).with(:published_at, Time.now).ordered
|
|
164
|
+
@content.should_receive(:[]=).with(:published_at, nil).ordered
|
|
165
|
+
|
|
166
|
+
@state.set_published_at(@content, Time.now)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
specify '#send_notifications should not send notifications' do
|
|
170
|
+
@content.should_not_receive(:anything)
|
|
171
|
+
@state.send_notifications(@content)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
175
|
+
@content.should_not_receive(:really_send_pings)
|
|
176
|
+
|
|
177
|
+
@state.send_pings(@content)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context 'With ContentState::Published.instance and mock content' do
|
|
182
|
+
include ContentStateSpecHelper
|
|
183
|
+
|
|
184
|
+
setup do
|
|
185
|
+
@content = mock('content')
|
|
186
|
+
@state = ContentState::Published.instance
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
specify '#just_published? should be false' do
|
|
190
|
+
@state.should_not_be_just_published
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
specify '#just_changed_published_status? should be false' do
|
|
194
|
+
@state.just_changed_published_status?.should_be false
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
specify '#enter_hook should set :published true and sets a nil published_at to Time.now' do
|
|
198
|
+
stop_the_clock
|
|
199
|
+
should_set_content_fields :published => true
|
|
200
|
+
@content.should_receive(:[]).with(:published_at).and_return nil
|
|
201
|
+
@content.should_receive(:[]=).with(:published_at, Time.now)
|
|
202
|
+
|
|
203
|
+
@state.enter_hook(@content)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
specify '#before_save should just return true' do
|
|
207
|
+
@state.before_save(@content).should_be true
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
specify '#change_published_state => true should not do anything' do
|
|
211
|
+
@state.change_published_state(@content, true)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
specify '#change_published_state to false should unset the published flag and change state to JustWithdrawn' do
|
|
215
|
+
should_set_content_fields :published => false, :published_at => nil
|
|
216
|
+
should_change_state_to :just_withdrawn
|
|
217
|
+
@state.change_published_state(@content, false)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
specify '#set_published_at to the_future should set published_at and change to PublicationPending' do
|
|
221
|
+
stop_the_clock
|
|
222
|
+
should_set_content_field :published_at => Time.now + 10
|
|
223
|
+
should_change_state_to :publication_pending
|
|
224
|
+
|
|
225
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
specify '#set_published_at now should set published_at' do
|
|
229
|
+
stop_the_clock
|
|
230
|
+
should_set_content_field :published_at => Time.now
|
|
231
|
+
|
|
232
|
+
@state.set_published_at(@content, Time.now)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
specify '#set_published_at in the past should set published_at' do
|
|
236
|
+
stop_the_clock
|
|
237
|
+
should_set_content_field :published_at => Time.now - 10
|
|
238
|
+
|
|
239
|
+
@state.set_published_at(@content, Time.now - 10)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
specify '#send_notifications should not send notifications' do
|
|
243
|
+
@content.should_not_receive(:anything)
|
|
244
|
+
@state.send_notifications(@content)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
248
|
+
@content.should_not_receive(:really_send_pings)
|
|
249
|
+
|
|
250
|
+
@state.send_pings(@content)
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
context 'With ContentState::JustPublished.instance and mock content' do
|
|
255
|
+
include ContentStateSpecHelper
|
|
256
|
+
|
|
257
|
+
setup do
|
|
258
|
+
@content = mock('content')
|
|
259
|
+
@state = ContentState::JustPublished.instance
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
specify '#just_published? should be true' do
|
|
263
|
+
@state.should_be_just_published
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
specify '#just_changed_published_status? should be true' do
|
|
267
|
+
@state.just_changed_published_status?.should_be true
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
specify '#enter_hook should set :published true and sets a nil published_at to Time.now' do
|
|
271
|
+
stop_the_clock
|
|
272
|
+
should_set_content_fields :published => true
|
|
273
|
+
@content.should_receive(:[]).with(:published_at).and_return nil
|
|
274
|
+
@content.should_receive(:[]=).with(:published_at, Time.now)
|
|
275
|
+
|
|
276
|
+
@state.enter_hook(@content)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
specify '#before_save should just return true' do
|
|
280
|
+
@state.before_save(@content).should_be true
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
specify '#change_published_state => true should not do anything' do
|
|
284
|
+
@state.change_published_state(@content, true)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
specify '#change_published_state to false should unset the published flag and change state to JustWithdrawn' do
|
|
288
|
+
should_set_content_fields :published => false, :published_at => nil
|
|
289
|
+
should_change_state_to :just_withdrawn
|
|
290
|
+
@state.change_published_state(@content, false)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
specify '#set_published_at to the_future should set published_at and change to PublicationPending' do
|
|
294
|
+
stop_the_clock
|
|
295
|
+
should_set_content_field :published_at => Time.now + 10
|
|
296
|
+
should_change_state_to :publication_pending
|
|
297
|
+
|
|
298
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
specify '#set_published_at now should set published_at' do
|
|
302
|
+
stop_the_clock
|
|
303
|
+
should_set_content_field :published_at => Time.now
|
|
304
|
+
|
|
305
|
+
@state.set_published_at(@content, Time.now)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
specify '#set_published_at in the past should set published_at' do
|
|
309
|
+
stop_the_clock
|
|
310
|
+
should_set_content_field :published_at => Time.now - 10
|
|
311
|
+
|
|
312
|
+
@state.set_published_at(@content, Time.now - 10)
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
specify '#send_notifications should really send notifications' do
|
|
316
|
+
@content.should_receive(:interested_users).and_return([:bob, :jim])
|
|
317
|
+
@content.should_receive(:send_notification_to_user).with(:bob)
|
|
318
|
+
@content.should_receive(:send_notification_to_user).with(:jim)
|
|
319
|
+
|
|
320
|
+
@state.send_notifications(@content)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
specify '#send_pings should call back to @content.really_send_pings' do
|
|
324
|
+
@content.should_receive(:really_send_pings)
|
|
325
|
+
|
|
326
|
+
@state.send_pings(@content)
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
context 'With ContentState::Withdrawn.instance and mock content' do
|
|
331
|
+
include ContentStateSpecHelper
|
|
332
|
+
|
|
333
|
+
setup do
|
|
334
|
+
@content = mock('content')
|
|
335
|
+
@state = ContentState::Withdrawn.instance
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
specify '#just_published? should be false' do
|
|
339
|
+
@state.should_not_be_just_published
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
specify '#just_changed_published_status? should be false' do
|
|
343
|
+
@state.just_changed_published_status?.should_be false
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
specify '#enter_hook should set :published false and set published_at to nil' do
|
|
347
|
+
should_set_content_field :published => false
|
|
348
|
+
|
|
349
|
+
@state.enter_hook(@content)
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
specify '#before_save should not do anything' do
|
|
353
|
+
@state.before_save(@content)
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
specify '#change_published_state => true should set published flag and change state to JustPublished' do
|
|
357
|
+
should_set_content_field :published => true
|
|
358
|
+
should_change_state_to :published
|
|
359
|
+
|
|
360
|
+
@state.change_published_state(@content, true)
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
specify '#change_published_state to false should not do anything' do
|
|
364
|
+
@content.should_not_receive(:[]=)
|
|
365
|
+
@state.change_published_state(@content, false)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
specify '#set_published_at to the_future should set published_at, remove any trigger and change to PublicationPending' do
|
|
369
|
+
stop_the_clock
|
|
370
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
371
|
+
should_set_content_field :published_at => Time.now + 10
|
|
372
|
+
should_change_state_to :publication_pending
|
|
373
|
+
|
|
374
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
specify '#set_published_at <=now should change the publication time and remove any trigger' do
|
|
378
|
+
stop_the_clock
|
|
379
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
380
|
+
@content.should_receive(:[]=).with(:published_at, Time.now).ordered
|
|
381
|
+
|
|
382
|
+
@state.set_published_at(@content, Time.now)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
specify '#send_notifications should not send notifications' do
|
|
386
|
+
@content.should_not_receive(:anything)
|
|
387
|
+
@state.send_notifications(@content)
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
391
|
+
@content.should_not_receive(:really_send_pings)
|
|
392
|
+
|
|
393
|
+
@state.send_pings(@content)
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
context 'With ContentState::JustWithdrawn.instance and mock content' do
|
|
398
|
+
include ContentStateSpecHelper
|
|
399
|
+
|
|
400
|
+
setup do
|
|
401
|
+
@content = mock('content')
|
|
402
|
+
@state = ContentState::JustWithdrawn.instance
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
specify '#just_published? should be false' do
|
|
406
|
+
@state.should_not_be_just_published
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
specify '#just_changed_published_status? should be true' do
|
|
410
|
+
@state.just_changed_published_status?.should_be true
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
specify '#enter_hook should set :published false' do
|
|
414
|
+
should_set_content_field :published => false
|
|
415
|
+
|
|
416
|
+
@state.enter_hook(@content)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
specify '#before_save should not do anything' do
|
|
420
|
+
@content.should_not_receive(:[]=)
|
|
421
|
+
@state.before_save(@content)
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
specify '#change_published_state => true should set published flag and change state to Published' do
|
|
425
|
+
should_set_content_field :published => true
|
|
426
|
+
should_change_state_to :published
|
|
427
|
+
|
|
428
|
+
@state.change_published_state(@content, true)
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
specify '#change_published_state to false should not do anything' do
|
|
432
|
+
@content.should_not_receive(:[]=)
|
|
433
|
+
@state.change_published_state(@content, false)
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
specify '#set_published_at to the_future should set published_at, remove any trigger and change to PublicationPending' do
|
|
437
|
+
stop_the_clock
|
|
438
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
439
|
+
should_set_content_field :published_at => Time.now + 10
|
|
440
|
+
should_change_state_to :publication_pending
|
|
441
|
+
|
|
442
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
specify '#set_published_at <=now should change the publication time and remove any trigger' do
|
|
446
|
+
stop_the_clock
|
|
447
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
448
|
+
@content.should_receive(:[]=).with(:published_at, Time.now).ordered
|
|
449
|
+
|
|
450
|
+
@state.set_published_at(@content, Time.now)
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
specify '#send_notifications should not send notifications' do
|
|
454
|
+
@content.should_not_receive(:anything)
|
|
455
|
+
@state.send_notifications(@content)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
459
|
+
@content.should_not_receive(:really_send_pings)
|
|
460
|
+
|
|
461
|
+
@state.send_pings(@content)
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
context 'With ContentState::PublicationPending.instance and mock content' do
|
|
466
|
+
include ContentStateSpecHelper
|
|
467
|
+
|
|
468
|
+
setup do
|
|
469
|
+
@content = mock('content')
|
|
470
|
+
@state = ContentState::PublicationPending.instance
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
specify '#just_published? should be false' do
|
|
474
|
+
@state.should_not_be_just_published
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
specify '#just_changed_published_status? should be false' do
|
|
478
|
+
@state.just_changed_published_status?.should_be false
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
specify '#enter_hook should set :published false for a new record' do
|
|
482
|
+
@content.should_receive(:new_record?).and_return true
|
|
483
|
+
should_set_content_field :published => false
|
|
484
|
+
|
|
485
|
+
@state.enter_hook(@content)
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
specify '#enter_hook should not touch an existing record' do
|
|
489
|
+
@content.should_receive(:new_record?).and_return false
|
|
490
|
+
@content.should_not_receive(:[]=)
|
|
491
|
+
|
|
492
|
+
@state.enter_hook(@content)
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
specify '#before_save should not do anything' do
|
|
496
|
+
@state.before_save(@content)
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
# I don't quite understand why this works like this... just port the test for now.
|
|
500
|
+
specify '#change_published_state => true should set published flag and change to JustPublished if published_at is in the past' do
|
|
501
|
+
stop_the_clock
|
|
502
|
+
@content.should_receive(:published_at).and_return(Time.now - 10)
|
|
503
|
+
should_change_state_to :just_published
|
|
504
|
+
|
|
505
|
+
should_set_content_field :published => true
|
|
506
|
+
|
|
507
|
+
@state.change_published_state(@content, true)
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
specify '#change_published_state => true should just set the published flag if published_at is in the future' do
|
|
511
|
+
stop_the_clock
|
|
512
|
+
@content.should_receive(:published_at).and_return(Time.now + 10)
|
|
513
|
+
|
|
514
|
+
should_set_content_field :published => true
|
|
515
|
+
|
|
516
|
+
@state.change_published_state(@content, true)
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
specify '#change_published_state to false should unset the flag' do
|
|
521
|
+
should_set_content_field :published => false
|
|
522
|
+
@state.change_published_state(@content, false)
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
specify '#set_published_at to the_future should set published_at, remove any trigger and change to PublicationPending' do
|
|
526
|
+
stop_the_clock
|
|
527
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
528
|
+
should_set_content_field :published_at => Time.now + 10
|
|
529
|
+
|
|
530
|
+
@state.set_published_at(@content, Time.now + 10)
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
specify '#set_published_at <=now should change the publication time and remove any trigger' do
|
|
534
|
+
stop_the_clock
|
|
535
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
536
|
+
should_set_content_field :published_at => Time.now - 10
|
|
537
|
+
should_change_state_to :just_published
|
|
538
|
+
|
|
539
|
+
@state.set_published_at(@content, Time.now - 10)
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
specify '#set_published_at <= nil should nil the publication time and change state to Draft' do
|
|
543
|
+
Trigger.should_receive(:remove).with(@content, :trigger_method => 'publish!')
|
|
544
|
+
should_set_content_field :published_at => nil
|
|
545
|
+
should_change_state_to :draft
|
|
546
|
+
|
|
547
|
+
@state.set_published_at(@content, nil)
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
specify '#send_notifications should not send notifications' do
|
|
551
|
+
@content.should_not_receive(:anything)
|
|
552
|
+
@state.send_notifications(@content)
|
|
553
|
+
end
|
|
554
|
+
|
|
555
|
+
specify '#send_pings should not call back to @content.really_send_pings' do
|
|
556
|
+
@content.should_not_receive(:really_send_pings)
|
|
557
|
+
|
|
558
|
+
@state.send_pings(@content)
|
|
559
|
+
end
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
context 'With ContentState::Unclassified.instance and mock content' do
|
|
563
|
+
include ContentStateSpecHelper
|
|
564
|
+
|
|
565
|
+
setup do
|
|
566
|
+
@content = mock('content')
|
|
567
|
+
@state = ContentState::Unclassified.instance
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
specify 'state should stringify as "Unclassified"' do
|
|
571
|
+
@state.to_s.should == 'Unclassified'
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
specify '#just_published? should be false' do
|
|
575
|
+
@state.should_not_be_just_published
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
specify '#published? should force content classification' do
|
|
579
|
+
should_force_classification(:published?)
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
specify '#just_changed_published_status? should be false' do
|
|
583
|
+
@state.just_changed_published_status?.should_be false
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
specify '#mark_as_spam should change to JustMarkedAsSpam' do
|
|
587
|
+
should_change_state_to :just_marked_as_spam
|
|
588
|
+
@state.mark_as_spam(@content)
|
|
589
|
+
end
|
|
590
|
+
|
|
591
|
+
specify '#mark_as_ham should change state to JustMarkedAsHam' do
|
|
592
|
+
should_change_state_to :just_marked_as_ham
|
|
593
|
+
@state.mark_as_ham(@content)
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
specify '#is_spam? should force content classification' do
|
|
598
|
+
should_force_classification(:is_spam?)
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
specify '#enter_hook should set :published and :status_confirmed to false' do
|
|
602
|
+
should_set_content_fields :published => false, :status_confirmed => false
|
|
603
|
+
|
|
604
|
+
@state.enter_hook(@content)
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
specify '#before_save should force classification' do
|
|
608
|
+
should_force_classification(:before_save)
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
specify '#after_save should not do anything' do
|
|
612
|
+
@content.should_not_receive(:anything)
|
|
613
|
+
@state.after_save(@content).should_be true
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
specify '#send_notifications should not do anything' do
|
|
617
|
+
@content.should_not_receive(:anything)
|
|
618
|
+
@state.send_notifications(@content)
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
specify '#send_pings should not do anything' do
|
|
622
|
+
@content.should_not_receive(:anything)
|
|
623
|
+
@state.send_pings(@content)
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
def should_force_classification(state_method, expected_result = :ham)
|
|
627
|
+
@content.should_receive(:classify).and_return(expected_result)
|
|
628
|
+
new_state = case expected_result
|
|
629
|
+
when :ham; ContentState::JustPresumedHam.instance
|
|
630
|
+
when :spam; ContentState::JustPresumedSpam.instance
|
|
631
|
+
else ContentState::JustPresumedSpam.instance
|
|
632
|
+
end
|
|
633
|
+
@content.should_receive(:state=).and_return(new_state)
|
|
634
|
+
@state.send(state_method, @content)
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
context 'With ContentState::JustPresumedHam.instance and mock content' do
|
|
642
|
+
include ContentStateSpecHelper
|
|
643
|
+
|
|
644
|
+
setup do
|
|
645
|
+
@content = mock('content')
|
|
646
|
+
@state = ContentState::JustPresumedHam.instance
|
|
647
|
+
end
|
|
648
|
+
|
|
649
|
+
specify '#just_published? should be true' do
|
|
650
|
+
@state.should_be_just_published
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
specify '#published? should be true' do
|
|
654
|
+
@state.should_be_published(@content)
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
specify '#just_changed_published_status? should be true' do
|
|
658
|
+
@state.just_changed_published_status?.should_be true
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
specify '#enter_hook should set :published to true and :status_confirmed to false' do
|
|
662
|
+
should_set_content_fields :published => true, :status_confirmed => false
|
|
663
|
+
|
|
664
|
+
@state.enter_hook(@content)
|
|
665
|
+
end
|
|
666
|
+
|
|
667
|
+
specify '#after_save should not do anything' do
|
|
668
|
+
@content.should_not_receive(:anything)
|
|
669
|
+
@state.after_save(@content).should_be true
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
specify '#before_save should not do anything' do
|
|
673
|
+
@content.should_not_receive(:anything)
|
|
674
|
+
@state.before_save(@content).should_be true
|
|
675
|
+
end
|
|
676
|
+
|
|
677
|
+
specify '#mark_as_spam should change state to ContentState::JustMarkedAsSpam' do
|
|
678
|
+
should_change_state_to :just_marked_as_spam
|
|
679
|
+
@state.mark_as_spam(@content)
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
specify '#mark_as_ham should change state to ContentState::Ham' do
|
|
683
|
+
should_change_state_to :ham
|
|
684
|
+
@state.mark_as_ham(@content)
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
specify 'state should stringify as "Ham?"' do
|
|
688
|
+
@state.to_s.should == 'Ham?'
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
specify '#send_notifications should send notifications to interested users' do
|
|
692
|
+
@content.should_receive(:interested_users).and_return([:tom, :dick, :harry])
|
|
693
|
+
@content.should_receive(:send_notification_to_user).with(:tom)
|
|
694
|
+
@content.should_receive(:send_notification_to_user).with(:dick)
|
|
695
|
+
@content.should_receive(:send_notification_to_user).with(:harry)
|
|
696
|
+
|
|
697
|
+
@state.send_notifications(@content)
|
|
698
|
+
end
|
|
699
|
+
|
|
700
|
+
specify '#send_pings should really send pings' do
|
|
701
|
+
@content.should_receive(:really_send_pings)
|
|
702
|
+
@state.send_pings(@content)
|
|
703
|
+
end
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
context 'With ContentState::PresumedHam.instance and mock content' do
|
|
708
|
+
include ContentStateSpecHelper
|
|
709
|
+
|
|
710
|
+
setup do
|
|
711
|
+
@content = mock('content')
|
|
712
|
+
@state = ContentState::PresumedHam.instance
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
specify '#just_published? should be false' do
|
|
716
|
+
@state.should_not_be_just_published
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
specify '#published? should be true' do
|
|
720
|
+
@state.should_be_published(@content)
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
specify '#just_changed_published_status? should be false' do
|
|
724
|
+
@state.just_changed_published_status?.should_be false
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
specify '#enter_hook should set :published to true and :status_confirmed to false' do
|
|
728
|
+
should_set_content_fields :published => true, :status_confirmed => false
|
|
729
|
+
|
|
730
|
+
@state.enter_hook(@content)
|
|
731
|
+
end
|
|
732
|
+
|
|
733
|
+
specify '#after_save should not do anything' do
|
|
734
|
+
@content.should_not_receive(:anything)
|
|
735
|
+
@state.after_save(@content).should_be true
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
specify '#before_save should not do anything' do
|
|
739
|
+
@content.should_not_receive(:anything)
|
|
740
|
+
@state.before_save(@content).should_be true
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
specify '#mark_as_spam should change state to ContentState::JustMarkedAsSpam' do
|
|
744
|
+
should_change_state_to :just_marked_as_spam
|
|
745
|
+
@state.mark_as_spam(@content)
|
|
746
|
+
end
|
|
747
|
+
|
|
748
|
+
specify '#mark_as_ham should change state to ContentState::Ham' do
|
|
749
|
+
should_change_state_to :ham
|
|
750
|
+
@state.mark_as_ham(@content)
|
|
751
|
+
end
|
|
752
|
+
|
|
753
|
+
specify 'state should stringify as "Ham?"' do
|
|
754
|
+
@state.to_s.should == 'Ham?'
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
specify '#send_notifications should not send any notifications' do
|
|
758
|
+
@content.should_not_receive(:anything)
|
|
759
|
+
@state.send_notifications(@content)
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
specify '#send_pings should not send pings' do
|
|
763
|
+
@content.should_not_receive(:really_send_pings)
|
|
764
|
+
@state.send_pings(@content)
|
|
765
|
+
end
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
context 'With ContentState::Ham.instance and mock content' do
|
|
769
|
+
include ContentStateSpecHelper
|
|
770
|
+
|
|
771
|
+
setup do
|
|
772
|
+
@content = mock('content')
|
|
773
|
+
@state = ContentState::Ham.instance
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
specify '#just_published? should be false' do
|
|
777
|
+
@state.should_not_be_just_published
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
specify '#published? should be true' do
|
|
781
|
+
@state.should_be_published(@content)
|
|
782
|
+
end
|
|
783
|
+
|
|
784
|
+
specify '#just_changed_published_status? should be false' do
|
|
785
|
+
@state.just_changed_published_status?.should_be false
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
specify '#enter_hook should set :published and :status_confirmed to true' do
|
|
789
|
+
should_set_content_fields :published => true, :status_confirmed => true
|
|
790
|
+
|
|
791
|
+
@state.enter_hook(@content)
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
specify '#after_save should not do anything' do
|
|
795
|
+
@content.should_not_receive(:anything)
|
|
796
|
+
@state.after_save(@content).should_be true
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
specify '#before_save should not do anything' do
|
|
800
|
+
@content.should_receive(:report_as_ham)
|
|
801
|
+
@state.before_save(@content).should_be true
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
specify '#mark_as_spam should change state to ContentState::JustMarkedAsSpam' do
|
|
805
|
+
should_change_state_to :just_marked_as_spam
|
|
806
|
+
@state.mark_as_spam(@content)
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
specify '#mark_as_ham should not do anything' do
|
|
810
|
+
@content.should_not_receive(:anything)
|
|
811
|
+
@state.mark_as_ham(@content)
|
|
812
|
+
end
|
|
813
|
+
|
|
814
|
+
specify 'state should stringify as "Ham"' do
|
|
815
|
+
@state.to_s.should == 'Ham'
|
|
816
|
+
end
|
|
817
|
+
|
|
818
|
+
specify '#send_notifications should not send any notifications' do
|
|
819
|
+
@content.should_not_receive(:anything)
|
|
820
|
+
@state.send_notifications(@content)
|
|
821
|
+
end
|
|
822
|
+
|
|
823
|
+
specify '#send_pings should not send pings' do
|
|
824
|
+
@content.should_not_receive(:really_send_pings)
|
|
825
|
+
@state.send_pings(@content)
|
|
826
|
+
end
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
context 'With ContentState::PresumedSpam.instance and mock content' do
|
|
830
|
+
include ContentStateSpecHelper
|
|
831
|
+
|
|
832
|
+
setup do
|
|
833
|
+
@content = mock('content')
|
|
834
|
+
@state = ContentState::PresumedSpam.instance
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
specify '#just_published? should be false' do
|
|
838
|
+
@state.should_not_be_just_published
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
specify '#published? should be false' do
|
|
842
|
+
@state.should_not_be_published(@content)
|
|
843
|
+
end
|
|
844
|
+
|
|
845
|
+
specify '#just_changed_published_status? should be false' do
|
|
846
|
+
@state.just_changed_published_status?.should_be false
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
specify '#enter_hook should set :published and :status_confirmed to false' do
|
|
850
|
+
should_set_content_fields :published => false, :status_confirmed => false
|
|
851
|
+
|
|
852
|
+
@state.enter_hook(@content)
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
specify '#after_save should not do anything' do
|
|
856
|
+
@content.should_not_receive(:anything)
|
|
857
|
+
@state.after_save(@content).should_be true
|
|
858
|
+
end
|
|
859
|
+
|
|
860
|
+
specify '#before_save should not do anything' do
|
|
861
|
+
@content.should_not_receive(:anything)
|
|
862
|
+
@state.before_save(@content).should_be true
|
|
863
|
+
end
|
|
864
|
+
|
|
865
|
+
specify '#mark_as_spam should change state to ContentState::Spam' do
|
|
866
|
+
should_change_state_to :spam
|
|
867
|
+
@state.mark_as_spam(@content)
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
specify '#mark_as_ham should change state to ContentState::JustMarkedAsHam' do
|
|
871
|
+
should_change_state_to :just_marked_as_ham
|
|
872
|
+
@state.mark_as_ham(@content)
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
specify 'state should stringify as "Spam?"' do
|
|
876
|
+
@state.to_s.should == 'Spam?'
|
|
877
|
+
end
|
|
878
|
+
|
|
879
|
+
specify '#send_notifications should not send any notifications' do
|
|
880
|
+
@content.should_not_receive(:anything)
|
|
881
|
+
@state.send_notifications(@content)
|
|
882
|
+
end
|
|
883
|
+
|
|
884
|
+
specify '#send_pings should not send pings' do
|
|
885
|
+
@content.should_not_receive(:really_send_pings)
|
|
886
|
+
@state.send_pings(@content)
|
|
887
|
+
end
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
context 'With ContentState::JustMarkedAsSpam.instance and mock content' do
|
|
891
|
+
include ContentStateSpecHelper
|
|
892
|
+
|
|
893
|
+
setup do
|
|
894
|
+
@content = mock('content')
|
|
895
|
+
@state = ContentState::JustMarkedAsSpam.instance
|
|
896
|
+
end
|
|
897
|
+
|
|
898
|
+
specify '#just_published? should be false' do
|
|
899
|
+
@state.should_not_be_just_published
|
|
900
|
+
end
|
|
901
|
+
|
|
902
|
+
specify '#published? should be false' do
|
|
903
|
+
@state.should_not_be_published(@content)
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
specify '#just_changed_published_status? should be true' do
|
|
907
|
+
@state.just_changed_published_status?.should_be true
|
|
908
|
+
end
|
|
909
|
+
|
|
910
|
+
specify '#enter_hook should set :published false and :status_confirmed to true' do
|
|
911
|
+
should_set_content_fields :published => false, :status_confirmed => true
|
|
912
|
+
|
|
913
|
+
@state.enter_hook(@content)
|
|
914
|
+
end
|
|
915
|
+
|
|
916
|
+
specify '#after_save should report the feedback as spam' do
|
|
917
|
+
@content.should_receive(:report_as_spam)
|
|
918
|
+
@state.after_save(@content).should_be true
|
|
919
|
+
end
|
|
920
|
+
|
|
921
|
+
specify '#before_save should not do anything' do
|
|
922
|
+
@content.should_not_receive(:anything)
|
|
923
|
+
@state.before_save(@content).should_be true
|
|
924
|
+
end
|
|
925
|
+
|
|
926
|
+
specify '#mark_as_spam should not do anything' do
|
|
927
|
+
@content.should_not_receive(:anything)
|
|
928
|
+
@state.mark_as_spam(@content)
|
|
929
|
+
end
|
|
930
|
+
|
|
931
|
+
specify '#mark_as_ham should change state to ContentState::JustMarkedAsHam' do
|
|
932
|
+
should_change_state_to :just_marked_as_ham
|
|
933
|
+
@state.mark_as_ham(@content)
|
|
934
|
+
end
|
|
935
|
+
|
|
936
|
+
specify 'state should stringify as "Spam"' do
|
|
937
|
+
@state.to_s.should == 'Spam'
|
|
938
|
+
end
|
|
939
|
+
|
|
940
|
+
specify '#send_notifications should not send any notifications' do
|
|
941
|
+
@content.should_not_receive(:anything)
|
|
942
|
+
@state.send_notifications(@content)
|
|
943
|
+
end
|
|
944
|
+
|
|
945
|
+
specify '#send_pings should not send pings' do
|
|
946
|
+
@content.should_not_receive(:really_send_pings)
|
|
947
|
+
@state.send_pings(@content)
|
|
948
|
+
end
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
context 'With ContentState::Spam.instance and mock content' do
|
|
952
|
+
include ContentStateSpecHelper
|
|
953
|
+
|
|
954
|
+
setup do
|
|
955
|
+
@content = mock('content')
|
|
956
|
+
@state = ContentState::Spam.instance
|
|
957
|
+
end
|
|
958
|
+
|
|
959
|
+
specify '#just_published? should be false' do
|
|
960
|
+
@state.should_not_be_just_published
|
|
961
|
+
end
|
|
962
|
+
|
|
963
|
+
specify '#published? should be false' do
|
|
964
|
+
@state.should_not_be_published(@content)
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
specify '#just_changed_published_status? should be false' do
|
|
968
|
+
@state.just_changed_published_status?.should_be false
|
|
969
|
+
end
|
|
970
|
+
|
|
971
|
+
specify '#enter_hook should set :published false and :status_confirmed to true' do
|
|
972
|
+
should_set_content_fields :published => false, :status_confirmed => true
|
|
973
|
+
|
|
974
|
+
@state.enter_hook(@content)
|
|
975
|
+
end
|
|
976
|
+
|
|
977
|
+
specify '#after_save should do nothing' do
|
|
978
|
+
@content.should_not_receive(:anything)
|
|
979
|
+
@state.after_save(@content).should_be true
|
|
980
|
+
end
|
|
981
|
+
|
|
982
|
+
specify '#before_save should not do anything' do
|
|
983
|
+
@content.should_not_receive(:anything)
|
|
984
|
+
@state.before_save(@content).should_be true
|
|
985
|
+
end
|
|
986
|
+
|
|
987
|
+
specify '#mark_as_spam should not do anything' do
|
|
988
|
+
@content.should_not_receive(:anything)
|
|
989
|
+
@state.mark_as_spam(@content)
|
|
990
|
+
end
|
|
991
|
+
|
|
992
|
+
specify '#mark_as_ham should change state to ContentState::JustMarkedAsHam' do
|
|
993
|
+
should_change_state_to :just_marked_as_ham
|
|
994
|
+
@state.mark_as_ham(@content)
|
|
995
|
+
end
|
|
996
|
+
|
|
997
|
+
specify 'state should stringify as "Spam"' do
|
|
998
|
+
@state.to_s.should == 'Spam'
|
|
999
|
+
end
|
|
1000
|
+
|
|
1001
|
+
specify '#send_notifications should not send any notifications' do
|
|
1002
|
+
@content.should_not_receive(:anything)
|
|
1003
|
+
@state.send_notifications(@content)
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
specify '#send_pings should not send pings' do
|
|
1007
|
+
@content.should_not_receive(:really_send_pings)
|
|
1008
|
+
@state.send_pings(@content)
|
|
1009
|
+
end
|
|
1010
|
+
end
|