bcms_blog 1.1.1 → 1.2.0

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.
Files changed (35) hide show
  1. data/README.markdown +3 -12
  2. data/app/helpers/cms/blog_helper.rb +3 -0
  3. data/app/models/blog.rb +2 -1
  4. data/app/models/blog_comment.rb +3 -1
  5. data/app/models/blog_observer.rb +14 -10
  6. data/app/models/blog_post.rb +2 -2
  7. data/app/portlets/blog_post_portlet.rb +22 -2
  8. data/app/portlets/blog_posts_portlet.rb +4 -1
  9. data/app/views/cms/blog_comments/render.html.erb +1 -1
  10. data/app/views/partials/_blog_post.html.erb +2 -2
  11. data/app/views/portlets/blog_post/render.html.erb +7 -2
  12. data/doc/release_notes.txt +5 -2
  13. data/lib/bcms_blog/engine.rb +10 -0
  14. data/lib/bcms_blog/routes.rb +5 -7
  15. data/lib/bcms_blog.rb +1 -0
  16. data/lib/generators/bcms_blog/install/USAGE +10 -0
  17. data/lib/generators/bcms_blog/install/install_generator.rb +18 -0
  18. metadata +46 -93
  19. data/app/controllers/application_controller.rb +0 -10
  20. data/app/helpers/application_helper.rb +0 -3
  21. data/rails/init.rb +0 -8
  22. data/test/blog_test_helper.rb +0 -52
  23. data/test/factories.rb +0 -18
  24. data/test/functional/blog_controller_test.rb +0 -63
  25. data/test/functional/blog_post_controller_test.rb +0 -31
  26. data/test/functional/cms/blog_posts_controller_test.rb +0 -45
  27. data/test/functional/cms/blogs_controller_test.rb +0 -25
  28. data/test/performance/browsing_test.rb +0 -9
  29. data/test/test_helper.rb +0 -18
  30. data/test/test_logging.rb +0 -64
  31. data/test/unit/blog_comment_test.rb +0 -34
  32. data/test/unit/blog_observer_test.rb +0 -61
  33. data/test/unit/blog_post_test.rb +0 -43
  34. data/test/unit/blog_test.rb +0 -42
  35. data/test/unit/helpers/feeds_helper_test.rb +0 -4
data/README.markdown CHANGED
@@ -19,23 +19,14 @@ The blog module installs like most other BrowserCMS modules (http://guides.brows
19
19
 
20
20
  ## Set up your application to use the module
21
21
 
22
- ### 1. Edit config/environment.rb
22
+ ### 1. Install the module
23
23
 
24
- config.gem "browsercms"
25
- config.gem "bcms_blog"
24
+ rails g cms:install bcms_blog
26
25
 
27
26
  ### 2. Run the following commands
28
27
 
29
- script/generate browser_cms
30
28
  rake db:migrate
31
-
32
- ### 3. Edit config/routes.rb
33
-
34
- Make sure the routes.rb loads the blog routes.
35
-
36
- map.routes_for_bcms_blog
37
- map.routes_for_browser_cms
38
-
29
+
39
30
  ## Creating a Blog
40
31
 
41
32
  * To get started, go to the Content Library and choose the Blog module in the left hand menu.
@@ -13,5 +13,8 @@ module Cms::BlogHelper
13
13
  auto_discovery_link_tag(:rss, blog_feeds_url(:blog_id => blog), :title => "#{blog.name}")
14
14
  end
15
15
 
16
+ def new_comment_path(portlet)
17
+ url_for(:controller=>"cms/portlet", :action=>"execute_handler", :id=>portlet.id, :handler=>"create_comment")
18
+ end
16
19
  end
17
20
 
data/app/models/blog.rb CHANGED
@@ -8,7 +8,7 @@ class Blog < ActiveRecord::Base
8
8
  validates_presence_of :name
9
9
  validates_uniqueness_of :name
10
10
 
11
- named_scope :editable_by, lambda { |user|
11
+ scope :editable_by, lambda { |user|
12
12
  if user.able_to?(:administrate)
13
13
  { }
14
14
  else
@@ -91,4 +91,5 @@ class Blog < ActiveRecord::Base
91
91
  def name_for_path
92
92
  name.to_slug.gsub('-', '_')
93
93
  end
94
+
94
95
  end
@@ -4,7 +4,9 @@ class BlogComment < ActiveRecord::Base
4
4
 
5
5
  validates_presence_of :post_id, :author, :body
6
6
 
7
- def before_create
7
+ before_create :publish_if_comments_are_enabled
8
+
9
+ def publish_if_comments_are_enabled
8
10
  self.published = true unless post.blog.moderate_comments?
9
11
  end
10
12
 
@@ -5,15 +5,21 @@ class BlogObserver < ActiveRecord::Observer
5
5
  create_section_pages_and_routes
6
6
  end
7
7
 
8
- def before_update(blog)
9
- update_section_pages_and_route(blog)
8
+ def after_save(blog)
9
+ if blog.persisted?
10
+ blog.publish
11
+ end
10
12
  end
11
13
 
12
- def after_update(blog)
13
- blog.publish
14
+ # Can't use before_update since CMS callback stack is altered from normal callbacks.
15
+ def before_save(blog)
16
+ if blog.persisted?
17
+ update_section_pages_and_route(blog)
18
+ end
14
19
  end
15
-
20
+
16
21
  private
22
+
17
23
  # A section, two pages, 6 routes and a portlet are created alongside every blog.
18
24
  # This structure provides sensible defaults so users can pretty much start adding
19
25
  # posts right after creating a blog without having to worry about where to put
@@ -37,9 +43,7 @@ class BlogObserver < ActiveRecord::Observer
37
43
  :path => "/#{@blog.name_for_path}",
38
44
  :parent_id => 1
39
45
  )
40
- @section.groups << Group.find_by_code("cms-admin")
41
- @section.groups << Group.find_by_code("guest")
42
- @section.groups << Group.find_by_code("content-editor")
46
+ @section.allow_groups = :all
43
47
  @section.save!
44
48
  @section
45
49
  )
@@ -106,12 +110,12 @@ class BlogObserver < ActiveRecord::Observer
106
110
  end
107
111
 
108
112
  def reload_routes
109
- ActionController::Routing::Routes.load!
113
+ PageRoute.reload_routes
110
114
  end
111
115
 
112
116
  def create_route(page, name, pattern)
113
117
  route = page.page_routes.build(:name => name, :pattern => pattern, :code => "")
114
- route.send(:create_without_callbacks)
118
+ route.save!
115
119
  route.add_condition(:method, "get").save
116
120
  route.add_requirement(:year, '\d{4,}') if pattern.include?(":year")
117
121
  route.add_requirement(:month, '\d{2,}') if pattern.include?(":month")
@@ -26,13 +26,13 @@ class BlogPost < ActiveRecord::Base
26
26
  before_validation :set_slug
27
27
  validates_presence_of :name, :slug, :blog_id, :author_id
28
28
 
29
- named_scope :published_between, lambda { |start, finish|
29
+ scope :published_between, lambda { |start, finish|
30
30
  { :conditions => [
31
31
  "blog_posts.published_at >= ? AND blog_posts.published_at < ?",
32
32
  start, finish ] }
33
33
  }
34
34
 
35
- named_scope :not_tagged_with, lambda { |tag| {
35
+ scope :not_tagged_with, lambda { |tag| {
36
36
  :conditions => [
37
37
  "blog_posts.id not in (
38
38
  SELECT taggings.taggable_id FROM taggings
@@ -1,6 +1,6 @@
1
1
  class BlogPostPortlet < Portlet
2
- #render_inline false
3
- #enable_template_editor false
2
+
3
+ enable_template_editor false
4
4
 
5
5
  def render
6
6
  scope = Blog.find(self.blog_id).posts
@@ -16,6 +16,8 @@ class BlogPostPortlet < Portlet
16
16
  raise BlogPost::INCORRECT_PARAMETERS
17
17
  end
18
18
 
19
+ make_page_title_use_blog_post_name(@blog_post)
20
+
19
21
  pmap = flash[instance_name] || params
20
22
  pmap[:blog_comment] ||= {}
21
23
 
@@ -24,6 +26,8 @@ class BlogPostPortlet < Portlet
24
26
  end
25
27
 
26
28
  def create_comment
29
+ work_around_cms_3_3_bug_where_current_user_is_not_correctly_set
30
+
27
31
  params[:blog_comment].merge! :ip => request.remote_ip
28
32
  blog_comment = BlogComment.new(params[:blog_comment])
29
33
  if blog_comment.valid? && blog_comment.save
@@ -34,5 +38,21 @@ class BlogPostPortlet < Portlet
34
38
  url_for_failure
35
39
  end
36
40
  end
41
+
42
+ private
43
+
44
+ def work_around_cms_3_3_bug_where_current_user_is_not_correctly_set
45
+ User.current = current_user
46
+ end
47
+
48
+ # This is a work around for a bug in bcms 3.3 where the Cms::PageHeler#page_title doesnt
49
+ # share state between the portlet view and the page view.
50
+ # When the portlet view (app/views/portlets/blog_post/render) calls 'page_title @post.name'
51
+ # that instance variable isn't shared back to the page template.
52
+ # Instead, we just temporarily set the name of the page itself.
53
+ def make_page_title_use_blog_post_name(post)
54
+ page = @controller.current_page
55
+ page.name = post.name
56
+ end
37
57
 
38
58
  end
@@ -1,5 +1,8 @@
1
1
  class BlogPostsPortlet < Portlet
2
- def after_initialize
2
+
3
+ after_initialize :build_permalink_code
4
+
5
+ def build_permalink_code
3
6
  self.render_blog_post_code ||= 'truncate(blog_post.name, 30)'
4
7
  end
5
8
 
@@ -1,2 +1,2 @@
1
1
  <%= link_to h(@content_block.post.name), cms_blog_post_path(@content_block.post) %>
2
- <p><%=h @content_block.body %></p>
2
+ <p><%=h @content_block.body.html_safe %></p>
@@ -20,7 +20,7 @@
20
20
 
21
21
  <div class="body">
22
22
  <% if showing_individual_post or blog_post.summary.blank? %>
23
- <%= blog_post.body %>
23
+ <%= blog_post.body.html_safe %>
24
24
  <% else %>
25
25
  <%= blog_post.summary %>
26
26
  <p class="read_more">
@@ -38,7 +38,7 @@
38
38
  <% if blog_post.tags.any? %>
39
39
  Tags:
40
40
  <span class="tags">
41
- <%= blog_post.tags.map{|t| link_to(h(t.name), _blog_path(blog_post.blog, 'posts_with_tag', :tag => t.name)) }.join(", ") %>
41
+ <%= blog_post.tags.map{|t| link_to(h(t.name), _blog_path(blog_post.blog, 'posts_with_tag', :tag => t.name)) }.join(", ").html_safe %>
42
42
  </span>
43
43
  <strong>|</strong>
44
44
  <% end %>
@@ -1,10 +1,15 @@
1
+ <%
2
+ logger.warn "Page title is: #{page_title}"
3
+ page_title "SOMETHING ELSE"
4
+ logger.warn "Now it's #{page_title}"
5
+ %>
1
6
  <% page_title @blog_post.name %>
2
7
  <%= render :partial => "partials/blog_post", :object => @blog_post %>
3
8
 
4
9
  <div class="blog_comment_form">
5
- <% form_for @blog_comment, :url => cms_handler_path(@portlet, "create_comment") do |f| %>
10
+ <%= form_for @blog_comment, :url => new_comment_path(@portlet) do |f| %>
6
11
  <%= f.hidden_field :post_id %>
7
- <%= f.error_messages %>
12
+ <%= f.cms_error_messages %>
8
13
  <div class="fields text_fields">
9
14
  <%= f.label :author, 'Name *' %>
10
15
  <%= f.text_field :author %>
@@ -1,3 +1,6 @@
1
+ v1.2.0
2
+ - Upgrade to be compatible with BrowserCMS 3.3 (aka Rails 3)
3
+
1
4
  v1.1.1
2
5
 
3
6
  - Blog partials and templates no longer include any css style declarations
@@ -5,7 +8,6 @@ v1.1.1
5
8
  - Fixed bug on page route conditions and requirements when creating a blog
6
9
  - Tests refactoring. Tests now depend on bcms_support gem
7
10
 
8
-
9
11
  v1.1.0
10
12
 
11
13
  This version introduces significant changes and improvements over version 1.0.0
@@ -42,4 +44,5 @@ https://browsermedia.lighthouseapp.com/projects/28481/tickets/163-review-and-int
42
44
  Contributors:
43
45
  =============
44
46
  Tyler Rick
45
- Jon Leighton
47
+ Jon Leighton
48
+ Juan Alvarez
@@ -0,0 +1,10 @@
1
+ require 'browsercms'
2
+
3
+ module BcmsBlog
4
+ class Engine < Rails::Engine
5
+ include Cms::Module
6
+
7
+ config.active_record.observers = :blog_observer
8
+
9
+ end
10
+ end
@@ -1,12 +1,10 @@
1
1
  module Cms::Routes
2
2
  def routes_for_bcms_blog
3
-
4
- blog_feeds '/blog/feeds', :controller => "feeds", :format => "rss"
5
-
6
- namespace(:cms) do |cms|
7
- cms.content_blocks :blogs
8
- cms.content_blocks :blog_posts
9
- cms.content_blocks :blog_comments
3
+ match '/blog/feeds', :to=>"feeds#index", :defaults=>{:format => "rss"}, :as=>'blog_feeds'
4
+ namespace(:cms) do
5
+ content_blocks :blogs
6
+ content_blocks :blog_posts
7
+ content_blocks :blog_comments
10
8
  end
11
9
  end
12
10
  end
data/lib/bcms_blog.rb CHANGED
@@ -1 +1,2 @@
1
+ require 'bcms_blog/engine'
1
2
  require 'bcms_blog/routes'
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Installs the bcms_blog module.
3
+
4
+ Example:
5
+ rails generate bcms_blog:install
6
+
7
+ This will:
8
+ 1. Copy any migrations from the gem into the project.
9
+ 2. Add the routes to the config/routes.rb
10
+
@@ -0,0 +1,18 @@
1
+ require 'cms/module_installation'
2
+
3
+ class BcmsBlog::InstallGenerator < Cms::ModuleInstallation
4
+ add_migrations_directory_to_source_root __FILE__
5
+
6
+ # Add migrations to be copied, by uncommenting the following file and editing as needed.
7
+
8
+ ['20090415000001_create_blog_posts.rb', '20090415000000_create_blogs.rb', '20090415000002_create_blog_comments.rb',
9
+ '20090415000003_add_attachment_to_blog_posts.rb', '20100521042244_add_moderate_comments_to_blog.rb'].each do |mg|
10
+ copy_migration_file mg
11
+ end
12
+
13
+ def add_helpers
14
+ append_to_file 'app/helpers/application_helper.rb', :after=>"module ApplicationHelper\n" do
15
+ " include Cms::BlogHelper\n"
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,53 +1,39 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bcms_blog
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - BrowserMedia
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-07-11 00:00:00 -05:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: bcms_support
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2010-07-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: browsercms
16
+ requirement: &70330799771200 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
33
- type: :development
34
- version_requirements: *id001
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70330799771200
35
25
  description: The Blog Module for BrowserCMS
36
26
  email: github@browsermedia.com
37
27
  executables: []
38
-
39
28
  extensions: []
40
-
41
- extra_rdoc_files:
29
+ extra_rdoc_files:
42
30
  - LICENSE.txt
43
31
  - README.markdown
44
- files:
45
- - app/controllers/application_controller.rb
32
+ files:
46
33
  - app/controllers/cms/blog_comments_controller.rb
47
34
  - app/controllers/cms/blog_posts_controller.rb
48
35
  - app/controllers/cms/blogs_controller.rb
49
36
  - app/controllers/feeds_controller.rb
50
- - app/helpers/application_helper.rb
51
37
  - app/helpers/cms/blog_helper.rb
52
38
  - app/helpers/feeds_helper.rb
53
39
  - app/models/blog.rb
@@ -72,79 +58,46 @@ files:
72
58
  - app/views/portlets/blog_post/render.html.erb
73
59
  - app/views/portlets/blog_posts/_form.html.erb
74
60
  - app/views/portlets/blog_posts/render.html.haml
61
+ - LICENSE.txt
62
+ - README.markdown
63
+ - doc/migrate_to_20100427.rb
64
+ - doc/README_FOR_APP
65
+ - doc/release_notes.txt
75
66
  - db/migrate/20090415000000_create_blogs.rb
76
67
  - db/migrate/20090415000001_create_blog_posts.rb
77
68
  - db/migrate/20090415000002_create_blog_comments.rb
78
69
  - db/migrate/20090415000003_add_attachment_to_blog_posts.rb
79
70
  - db/migrate/20100521042244_add_moderate_comments_to_blog.rb
80
- - doc/README_FOR_APP
81
- - doc/migrate_to_20100427.rb
82
- - doc/release_notes.txt
83
- - lib/bcms_blog.rb
71
+ - lib/bcms_blog/engine.rb
84
72
  - lib/bcms_blog/routes.rb
85
- - rails/init.rb
86
- - LICENSE.txt
87
- - README.markdown
88
- - test/blog_test_helper.rb
89
- - test/factories.rb
90
- - test/functional/blog_controller_test.rb
91
- - test/functional/blog_post_controller_test.rb
92
- - test/functional/cms/blog_posts_controller_test.rb
93
- - test/functional/cms/blogs_controller_test.rb
94
- - test/performance/browsing_test.rb
95
- - test/test_helper.rb
96
- - test/test_logging.rb
97
- - test/unit/blog_comment_test.rb
98
- - test/unit/blog_observer_test.rb
99
- - test/unit/blog_post_test.rb
100
- - test/unit/blog_test.rb
101
- - test/unit/helpers/feeds_helper_test.rb
102
- has_rdoc: true
103
- homepage: http://browsercms.org
73
+ - lib/bcms_blog.rb
74
+ - lib/generators/bcms_blog/install/install_generator.rb
75
+ - lib/generators/bcms_blog/install/USAGE
76
+ homepage: http://www.github.com/browsermedia/bcms_blog
104
77
  licenses: []
105
-
106
78
  post_install_message:
107
- rdoc_options:
108
- - --charset=UTF-8
109
- require_paths:
79
+ rdoc_options: []
80
+ require_paths:
110
81
  - lib
111
- required_ruby_version: !ruby/object:Gem::Requirement
82
+ required_ruby_version: !ruby/object:Gem::Requirement
112
83
  none: false
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- hash: 3
117
- segments:
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ segments:
118
89
  - 0
119
- version: "0"
120
- required_rubygems_version: !ruby/object:Gem::Requirement
90
+ hash: -3905715097688536829
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
92
  none: false
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- hash: 3
126
- segments:
127
- - 0
128
- version: "0"
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
129
97
  requirements: []
130
-
131
- rubyforge_project: browsercms
132
- rubygems_version: 1.3.7
98
+ rubyforge_project: bcms_blog
99
+ rubygems_version: 1.8.10
133
100
  signing_key:
134
101
  specification_version: 3
135
102
  summary: The Blog Module for BrowserCMS
136
- test_files:
137
- - test/blog_test_helper.rb
138
- - test/factories.rb
139
- - test/functional/blog_controller_test.rb
140
- - test/functional/blog_post_controller_test.rb
141
- - test/functional/cms/blog_posts_controller_test.rb
142
- - test/functional/cms/blogs_controller_test.rb
143
- - test/performance/browsing_test.rb
144
- - test/test_helper.rb
145
- - test/test_logging.rb
146
- - test/unit/blog_comment_test.rb
147
- - test/unit/blog_observer_test.rb
148
- - test/unit/blog_post_test.rb
149
- - test/unit/blog_test.rb
150
- - test/unit/helpers/feeds_helper_test.rb
103
+ test_files: []
@@ -1,10 +0,0 @@
1
- # Filters added to this controller apply to all controllers in the application.
2
- # Likewise, all the methods added will be available for all controllers.
3
-
4
- class ApplicationController < ActionController::Base
5
- helper :all # include all helpers, all the time
6
- protect_from_forgery # See ActionController::RequestForgeryProtection for details
7
-
8
- # Scrub sensitive parameters from your log
9
- # filter_parameter_logging :password
10
- end
@@ -1,3 +0,0 @@
1
- # Methods added to this helper will be available to all templates in the application.
2
- module ApplicationHelper
3
- end
data/rails/init.rb DELETED
@@ -1,8 +0,0 @@
1
- gem_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
2
- Cms.add_to_rails_paths gem_root
3
- Cms.add_generator_paths gem_root, "db/migrate/[0-9]*_*.rb"
4
- ApplicationHelper.module_eval { include Cms::BlogHelper }
5
-
6
- config.after_initialize do
7
- ActiveRecord::Base.observers << BlogObserver
8
- end
@@ -1,52 +0,0 @@
1
- module BlogTestHelper
2
-
3
- # Seeds all data created by this module's migrations
4
- def seed_blog_data
5
- @content_type_group = ContentTypeGroup.create!(:name => "Blog")
6
- CategoryType.create!(:name => "Blog Post")
7
- ContentType.create!(:name => "Blog", :content_type_group => @content_type_group)
8
- ContentType.create!(:name => "BlogPost", :content_type_group => @content_type_group)
9
- ContentType.create!(:name => "BlogComment", :content_type_group => @content_type_group)
10
- end
11
-
12
- # Creates data specifically used on tests
13
- def create_test_data
14
- template = %q[<% page_title @page_title || @blog.name %><%= render :partial => "partials/blog_post", :collection => @blog_posts %>"]
15
- @blog = Blog.create!(:name => "MyBlog", :template => template)
16
-
17
- @category_type = CategoryType.find_by_name("Blog Post")
18
-
19
- @stuff = Category.create!(:name => "Stuff", :category_type => @category_type)
20
- @general = Category.create!(:name => "General", :category_type => @category_type)
21
-
22
- opts = {:blog => @blog, :publish_on_save => true}
23
- @first_post = Factory(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2008, 7, 5, 6), :name => "The first Post"))
24
- @foo_post_1 = Factory(:blog_post, opts.merge(:category => @stuff, :published_at => Time.utc(2008, 7, 5, 12), :tag_list => "foo stuff"))
25
- @foo_post_2 = Factory(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2008, 7, 21)))
26
- @bar_post_1 = Factory(:blog_post, opts.merge(:category => @stuff, :published_at => Time.utc(2008, 9, 2), :tag_list => "foo stuff"))
27
- @bar_post_2 = Factory(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2009, 3, 18)))
28
-
29
- publish_all_pages
30
- end
31
-
32
- def setup_blog_stubs
33
- Blog.any_instance.stubs(:reload_routes)
34
- @section = Section.new
35
- Section.stubs(:create! => @section)
36
- @section.stubs(:groups => [], :save! => true)
37
- Page.stubs(:create! => Page.new)
38
- Page.any_instance.stubs(:create_connector)
39
- end
40
-
41
- def create_group
42
- @group = Factory(:group, :name => "Test", :group_type => Factory(:group_type, :name => "CMS User", :cms_access => true))
43
- @group.permissions << Factory(:permission, :name => "edit_content")
44
- @group.permissions << Factory(:permission, :name => "publish_content")
45
- end
46
-
47
- def create_user(opts = {})
48
- create_group
49
- @group.permissions << Factory(:permission, :name => "administrate") if opts[:admin]
50
- @user = Factory(:user, :groups => [@group])
51
- end
52
- end
data/test/factories.rb DELETED
@@ -1,18 +0,0 @@
1
- Factory.define :blog do |m|
2
- m.sequence(:name) {|n| "TestBlog#{n}"}
3
- m.moderate_comments true
4
- end
5
-
6
- Factory.define :blog_post do |m|
7
- m.sequence(:name) { |n| "BlogPost#{n}" }
8
- m.blog {|b| b.association(:blog) }
9
- m.sequence(:body) { |n| "Lorem ipsum #{n}" }
10
- m.association :author, :factory => :user
11
- end
12
-
13
- Factory.define :blog_comment do |m|
14
- m.name "Just a comment"
15
- m.body "Nice blog"
16
- m.association :post, :factory => :blog_post
17
- m.association :author, :factory => :user
18
- end
@@ -1,63 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class BlogControllerTest < ActionController::TestCase
4
- tests Cms::ContentController
5
-
6
- def setup
7
- seed_bcms_data
8
- seed_blog_data
9
- create_test_data
10
- end
11
-
12
- test "displays the list of blog posts" do
13
- get :show, :path => ['myblog']
14
-
15
- assert_response :success
16
- assert_select ".blog_post", 5
17
-
18
- assert_select "#blog_post_#{@first_post.id}" do
19
- assert_select "h2 a", @first_post.name
20
- assert_select "div.body", @first_post.body
21
- assert_select "div.meta" do
22
- assert_select "a", 2
23
- end
24
- end
25
-
26
- assert_select "#blog_post_#{@foo_post_1.id}" do
27
- assert_select "h2 a", @foo_post_1.name
28
- assert_select "div.body", @foo_post_1.body
29
- assert_select "div.meta .tags a", "foo"
30
- assert_select "div.meta .tags a", "stuff"
31
- end
32
- end
33
-
34
- test "list of blog posts by category" do
35
- get :show, :path => ['myblog'], :category => 'General'
36
- assert_response :success
37
- assert_select ".blog_post", 3
38
- end
39
-
40
- test "list of blog posts by tag" do
41
- get :show, :path => ['myblog'], :tag => 'foo'
42
- assert_response :success
43
- assert_select ".blog_post", 2
44
- end
45
-
46
- test "list_of_blog_posts_in_day" do
47
- get :show, :path => ["myblog"], :year => 2008, :month => 7, :day => 5
48
- assert_response :success
49
- assert_select ".blog_post", 2
50
- end
51
-
52
- test "list_of_blog_posts_in_month" do
53
- get :show, :path => ["myblog"], :year => 2008, :month => 7
54
- assert_response :success
55
- assert_select ".blog_post", 3
56
- end
57
-
58
- test "list_of_blog_posts_in_year" do
59
- get :show, :path => ["myblog"], :year => 2008
60
- assert_response :success
61
- assert_select ".blog_post", 4
62
- end
63
- end
@@ -1,31 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class BlogPostControllerTest < ActionController::TestCase
4
- tests Cms::ContentController
5
-
6
- def setup
7
- seed_bcms_data
8
- seed_blog_data
9
- create_test_data
10
- end
11
-
12
- test "show_post" do
13
- get :show, :path => ['myblog', 'post'], :year => 2008, :month => 07, :day => 05, :slug => 'the-first-post'
14
- assert_response :success
15
-
16
- assert_select "title", @first_post.name
17
- assert_select ".blog_post", 1
18
-
19
- assert_select "#blog_post_#{@first_post.id}" do
20
- assert_select "h2 a", @first_post.name
21
- assert_select "div.body", @first_post.body
22
- assert_select "div.meta a", "General"
23
- assert_select "div.meta a", "0 Comments"
24
- end
25
- end
26
-
27
- test "non_existent_post_should_return_404" do
28
- get :show, :path => ["myblog"], :year => 2005, :month => 6, :day => 14, :slug => "not-here"
29
- assert_response :not_found
30
- end
31
- end
@@ -1,45 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
-
3
- class Cms::BlogPostsControllerTest < ActionController::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- ContentType.create!(:name => 'BlogPost', :group_name => 'Blog')
8
- login_as(create_user)
9
- end
10
-
11
- def test_access_denied_on_create_if_blog_not_user_editable
12
- @editable = Factory(:blog, :groups => [@group])
13
- @non_editable = Factory(:blog)
14
- post :create, :blog_post => { :blog_id => @non_editable.id }
15
- assert @response.body.include?("Access Denied")
16
- end
17
-
18
- def test_access_denied_on_update_if_blog_not_user_editable
19
- @editable = Factory.create(:blog, :groups => [@group])
20
- @non_editable = Factory.create(:blog)
21
- @blog_post = Factory.create(:blog_post, :blog => @non_editable)
22
- put :update, :id => @blog_post, :blog_post => { :name => "Foo" }
23
- assert @response.body.include?("Access Denied")
24
- end
25
-
26
- def test_no_access_if_no_editable_blogs
27
- @blog = Factory.create(:blog)
28
- get :index
29
- assert_template "no_access"
30
- end
31
-
32
- def test_index_shouldnt_show_non_editable_posts
33
- @editable = Factory.create(:blog, :groups => [@group])
34
- @non_editable = Factory.create(:blog)
35
- @blog_post = Factory.create(:blog_post, :name => "Non-editable", :blog => @non_editable)
36
- get :index
37
- assert !@response.body.include?("Non-editable")
38
- end
39
-
40
- def test_create_sets_author
41
- @blog = Factory.create(:blog, :groups => [@group])
42
- post :create, :blog_post => { :blog_id => @blog.id }
43
- assert_equal @user, assigns(:block).author
44
- end
45
- end
@@ -1,25 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
-
3
- class Cms::BlogsControllerTest < ActionController::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- ContentType.create!(:name => 'Blog', :group_name => 'Blog')
8
- Factory(:blog)
9
- end
10
-
11
- test "should allow access to admin users" do
12
- login_as(create_user(:admin => true))
13
- get :index
14
- assert_response :success
15
- assert assigns(:blocks)
16
- assert_template("index")
17
- end
18
-
19
- test "should not allow access to non-admin users" do
20
- login_as(create_user)
21
- get :index
22
- assert_response :success
23
- assert_template("admin_only.html.erb")
24
- end
25
- end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
- require 'performance_test_help'
3
-
4
- # Profiling results for each test method are written to tmp/performance.
5
- class BrowsingTest < ActionController::PerformanceTest
6
- def test_homepage
7
- get '/'
8
- end
9
- end
data/test/test_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- ENV["RAILS_ENV"] = "test"
2
- require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
- require 'test_help'
4
- require 'mocha'
5
- require 'factory_girl'
6
- require 'bcms_support'
7
- require 'bcms_support/factories'
8
- require 'blog_test_helper'
9
- require 'test_logging'
10
-
11
- class ActiveSupport::TestCase
12
- include BcmsSupport::Test
13
- include BlogTestHelper
14
- include TestLogging
15
-
16
- self.use_transactional_fixtures = true
17
- self.use_instantiated_fixtures = false
18
- end
data/test/test_logging.rb DELETED
@@ -1,64 +0,0 @@
1
- module TestLogging
2
- def log(msg)
3
- Rails.logger.info(msg)
4
- end
5
-
6
- def log_array(obj, *columns)
7
- lengths = columns.map{|m| m.to_s.length }
8
-
9
- obj.each do |r|
10
- columns.each_with_index do |m, i|
11
- v = r.send(m)
12
- if v.to_s.length > lengths[i]
13
- lengths[i] = v.to_s.length
14
- end
15
- end
16
- end
17
-
18
- str = " "
19
- columns.each_with_index do |m, i|
20
- str << "%#{lengths[i]}s" % m
21
- str << " "
22
- end
23
- str << "\n "
24
-
25
- columns.each_with_index do |m, i|
26
- str << ("-"*lengths[i])
27
- str << " "
28
- end
29
- str << "\n "
30
-
31
- obj.each do |r|
32
- columns.each_with_index do |m, i|
33
- str << "%#{lengths[i]}s" % r.send(m)
34
- str << " "
35
- end
36
- str << "\n "
37
- end
38
-
39
- log str
40
- end
41
-
42
- def log_table(cls, options={})
43
- if options[:include_columns]
44
- columns = options[:include_columns]
45
- elsif options[:exclude_columns]
46
- columns = cls.column_names - options[:exclude_columns].map(&:to_s)
47
- else
48
- columns = cls.column_names
49
- end
50
- log_array (cls.uses_soft_delete? ? cls.find_with_deleted(:all) : cls.all), *columns
51
- end
52
-
53
- def log_table_with(cls, *columns)
54
- log_table(cls, :include_columns => columns)
55
- end
56
-
57
- def log_table_without(cls, *columns)
58
- log_table(cls, :exclude_columns => columns)
59
- end
60
-
61
- def log_table_without_stamps(cls, *columns)
62
- log_table(cls, :exclude_columns => %w[created_at updated_at created_by_id updated_by_id] + columns)
63
- end
64
- end
@@ -1,34 +0,0 @@
1
- require File.dirname(__FILE__) + "/../test_helper"
2
-
3
- class BlogCommentTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- end
8
-
9
- test "crates a valid instance" do
10
- assert Factory.build(:blog_comment).valid?
11
- end
12
-
13
- test "requires post" do
14
- assert Factory.build(:blog_comment, :post => nil).invalid?
15
- end
16
-
17
- test "requires author" do
18
- assert Factory.build(:blog_comment, :author => nil).invalid?
19
- end
20
-
21
- test "requires body" do
22
- assert Factory.build(:blog_comment, :body => nil).invalid?
23
- end
24
-
25
- test "should not be published if Blog#moderate_comments is true" do
26
- assert !Factory(:blog_comment).published?
27
- end
28
-
29
- test "should be published if Blog#moderate_comments is false" do
30
- blog = Factory(:blog, :moderate_comments => false)
31
- post = Factory(:blog_post, :blog => blog)
32
- assert Factory(:blog_comment, :post => post).published?
33
- end
34
- end
@@ -1,61 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BlogObserverTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- [Section, PageRoute, Page].each {|klass| klass.stubs(:find_by_name)}
8
- BlogPostPortlet.stubs(:create!)
9
- @blog = Factory(:blog, :name => 'TestBlog')
10
- end
11
-
12
- test "does not update section, pageroute and pages if name did not change when updated" do
13
- [Section, PageRoute, Page].each {|klass| klass.expects(:find_by_name).never}
14
- @blog.toggle!(:moderate_comments)
15
- end
16
-
17
- test "updates section, pageroute and pages if name changed" do
18
- route = mock('page_route', :update_attribute => true)
19
- page = mock('page')
20
- Section.expects(:find_by_name).returns(Section.new)
21
- PageRoute.expects(:find_by_name).returns(route)
22
- Page.expects(:find_by_name).twice.returns(page)
23
- page.expects(:update_attribute).twice.returns(true)
24
- page.expects(:publish).twice.returns(true)
25
-
26
- @blog.update_attribute(:name, "OtherName")
27
- end
28
-
29
- test "should create a section with the same name and route" do
30
- Section.expects(:create!).with(:name => 'Test', :path => '/test', :parent_id => 1).returns(@section)
31
- Factory(:blog, :name => 'Test')
32
- end
33
-
34
- test "should create a hidden page with the same name in the section with the blog's name" do
35
- Page.expects(:create!).with(:name => 'Test',
36
- :path => '/test',
37
- :section => @section,
38
- :template_file_name => 'default.html.erb',
39
- :hidden => true).returns(Page.new)
40
- Factory(:blog, :name => 'Test')
41
- end
42
-
43
- test "should create a page to hold the BlogPostPortlet" do
44
- Page.expects(:create!).with(:name => 'Test: Post',
45
- :path => '/test/post',
46
- :section => @section,
47
- :template_file_name => 'default.html.erb',
48
- :hidden => true).returns(Page.new)
49
- Factory(:blog, :name => 'Test')
50
- end
51
-
52
- test "should create an instance of BlogPostPortlet" do
53
- BlogPostPortlet.expects(:create!).with(:name => 'Test: Post Portlet',
54
- :blog_id => 2,
55
- :template => BlogPostPortlet.default_template,
56
- :connect_to_page_id => nil,
57
- :connect_to_container => 'main',
58
- :publish_on_save => true).returns(BlogPostPortlet.new)
59
- Factory(:blog, :name => 'Test')
60
- end
61
- end
@@ -1,43 +0,0 @@
1
- require File.dirname(__FILE__) + "/../test_helper"
2
-
3
- class BlogPostTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- @post = Factory(:blog_post, :name => "This is the first Post")
8
- end
9
-
10
- test "cretates a valid instance" do
11
- assert @post.valid?
12
- end
13
-
14
- test "requires name" do
15
- assert Factory.build(:blog_post, :name => nil).invalid?
16
- end
17
-
18
- test "requires blog_id" do
19
- assert Factory.build(:blog_post, :blog => nil).invalid?
20
- end
21
-
22
- test "requires author_id" do
23
- assert Factory.build(:blog_post, :author => nil).invalid?
24
- end
25
-
26
- test "should set slug" do
27
- assert_equal('this-is-the-first-post', @post.slug)
28
- end
29
-
30
- test "should set published_at when published" do
31
- assert_nil @post.published_at
32
- @post.publish!
33
- assert_not_nil @post.published_at
34
- end
35
-
36
- test "BlogPost should find posts published between 2 given dates" do
37
- @post.publish!
38
- Factory(:blog_post, :published_at => 5.days.ago)
39
- Factory(:blog_post, :published_at => 10.days.ago)
40
- assert_equal(1, BlogPost.published_between(6.days.ago, 4.days.ago).count)
41
- end
42
-
43
- end
@@ -1,42 +0,0 @@
1
- require File.dirname(__FILE__) + "/../test_helper"
2
-
3
- class BlogTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_blog_stubs
7
- @blog = Factory(:blog, :name => 'TestBlog')
8
- end
9
-
10
- test "creates a valid instance" do
11
- assert @blog.valid?
12
- end
13
-
14
- test "requires name" do
15
- assert Factory.build(:blog, :name => nil).invalid?
16
- end
17
-
18
- test "should be editable by user" do
19
- group = Factory(:group, :group_type => Factory(:group_type,:cms_access => true))
20
- user = Factory(:user, :groups => [group])
21
- blog = Factory.build(:blog, :groups => [group])
22
- assert blog.editable_by?(user)
23
- assert !@blog.editable_by?(user)
24
- end
25
-
26
- test "should be editable by administrators" do
27
- admin = Factory(:user)
28
- admin.expects(:able_to?).with(:administrate).returns(true)
29
- assert @blog.editable_by?(admin)
30
- end
31
-
32
- test "should create an instance of BlogPostPortlet" do
33
- BlogPostPortlet.expects(:create!).with(:name => 'Test: Post Portlet',
34
- :blog_id => 2,
35
- :template => BlogPostPortlet.default_template,
36
- :connect_to_page_id => nil,
37
- :connect_to_container => 'main',
38
- :publish_on_save => true).returns(BlogPostPortlet.new)
39
- Factory(:blog, :name => 'Test')
40
- end
41
-
42
- end
@@ -1,4 +0,0 @@
1
- require 'test_helper'
2
-
3
- class FeedsHelperTest < ActionView::TestCase
4
- end