bcms_blog 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +10 -0
- data/README.markdown +10 -4
- data/app/assets/javascripts/bcms_blog/application.js +15 -0
- data/app/assets/stylesheets/bcms_blog/application.css +13 -0
- data/app/controllers/bcms_blog/blog_comments_controller.rb +5 -0
- data/app/controllers/bcms_blog/blog_posts_controller.rb +37 -0
- data/app/controllers/bcms_blog/blogs_controller.rb +13 -0
- data/app/controllers/bcms_blog/feeds_controller.rb +10 -0
- data/app/helpers/bcms_blog/blog_helper.rb +27 -0
- data/app/models/bcms_blog/blog.rb +99 -0
- data/app/models/bcms_blog/blog_comment.rb +36 -0
- data/app/models/bcms_blog/blog_group_membership.rb +6 -0
- data/app/models/bcms_blog/blog_observer.rb +141 -0
- data/app/models/bcms_blog/blog_post.rb +108 -0
- data/app/portlets/blog_post_portlet.rb +6 -6
- data/app/portlets/blog_posts_portlet.rb +4 -4
- data/app/views/bcms_blog/blog_comments/_form.html.erb +5 -0
- data/app/views/bcms_blog/blog_comments/render.html.erb +2 -0
- data/app/views/{cms → bcms_blog}/blog_posts/_form.html.erb +1 -1
- data/app/views/{cms → bcms_blog}/blog_posts/no_access.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blog_posts/render.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blogs/_form.html.erb +2 -2
- data/app/views/{cms → bcms_blog}/blogs/admin_only.html.erb +0 -0
- data/app/views/{cms → bcms_blog}/blogs/render.html.erb +0 -0
- data/app/views/{feeds → bcms_blog/feeds}/index.rss.builder +3 -3
- data/app/views/portlets/blog_post/_form.html.erb +1 -1
- data/app/views/portlets/blog_post/render.html.erb +3 -1
- data/app/views/portlets/blog_posts/_form.html.erb +1 -1
- data/config/routes.rb +5 -0
- data/db/bcms_blog.seeds.rb +4 -0
- data/db/migrate/20090415000000_create_blogs.rb +5 -6
- data/db/migrate/20090415000001_create_blog_posts.rb +1 -5
- data/db/migrate/20090415000002_create_blog_comments.rb +0 -2
- data/db/migrate/20120529184028_v130.rb +12 -0
- data/lib/bcms_blog/engine.rb +15 -1
- data/lib/bcms_blog/route_extensions.rb +8 -0
- data/lib/bcms_blog/version.rb +3 -0
- data/lib/bcms_blog.rb +5 -2
- data/lib/generators/bcms_blog/install/install_generator.rb +11 -11
- data/lib/tasks/bcms_blog_tasks.rake +4 -0
- data/test/bcms_blog_test.rb +7 -0
- data/test/functional/cms/blog_posts_controller_test.rb +47 -0
- data/test/functional/cms/blogs_controller_test.rb +27 -0
- data/test/integration/blog_controller_test.rb +63 -0
- data/test/integration/blog_post_test.rb +31 -0
- data/test/support/blog_test_helper.rb +71 -0
- data/test/support/factories.rb +54 -0
- data/test/support/factory_girl_support.rb +2 -0
- data/test/test_helper.rb +15 -0
- data/test/test_logging.rb +64 -0
- data/test/unit/blog_comment_test.rb +34 -0
- data/test/unit/blog_observer_test.rb +84 -0
- data/test/unit/blog_post_test.rb +45 -0
- data/test/unit/blog_test.rb +42 -0
- data/test/unit/helpers/feeds_helper_test.rb +4 -0
- metadata +83 -35
- data/app/controllers/cms/blog_comments_controller.rb +0 -3
- data/app/controllers/cms/blog_posts_controller.rb +0 -35
- data/app/controllers/cms/blogs_controller.rb +0 -11
- data/app/controllers/feeds_controller.rb +0 -8
- data/app/helpers/cms/blog_helper.rb +0 -20
- data/app/models/blog.rb +0 -95
- data/app/models/blog_comment.rb +0 -34
- data/app/models/blog_group_membership.rb +0 -4
- data/app/models/blog_observer.rb +0 -140
- data/app/models/blog_post.rb +0 -113
- data/app/views/cms/blog_comments/_form.html.erb +0 -5
- data/app/views/cms/blog_comments/render.html.erb +0 -2
- data/app/views/layouts/templates/default.html.erb +0 -17
- data/doc/README_FOR_APP +0 -2
- data/doc/migrate_to_20100427.rb +0 -77
- data/doc/release_notes.txt +0 -48
- data/lib/bcms_blog/routes.rb +0 -10
@@ -5,7 +5,7 @@
|
|
5
5
|
<label>Permissions</label>
|
6
6
|
<%= hidden_field_tag "blog[group_ids][]", "", :id => nil %>
|
7
7
|
<div class="checkboxes">
|
8
|
-
<% for group in Group.cms_access.all(:order => "groups.name") %>
|
8
|
+
<% for group in Cms::Group.cms_access.all(:order => "groups.name") %>
|
9
9
|
<div class="checkbox_fields">
|
10
10
|
<%= check_box_tag "blog[group_ids][]", group.id,
|
11
11
|
@block.groups.include?(group), :class => "cms_group_ids", :id => "cms_group_ids_#{group.id}", :tabindex => next_tabindex %>
|
@@ -21,7 +21,7 @@
|
|
21
21
|
</div>
|
22
22
|
<br clear="all" />
|
23
23
|
|
24
|
-
<%= f.cms_text_area :template, :default_value => Blog.default_template %>
|
24
|
+
<%= f.cms_text_area :template, :default_value => BcmsBlog::Blog.default_template %>
|
25
25
|
|
26
26
|
<div class="instructions" style="float:none">
|
27
27
|
Saving your blog might take a couple of seconds while everything is set up.
|
File without changes
|
File without changes
|
@@ -2,7 +2,7 @@ xml.instruct! :xml, :version=>"1.0"
|
|
2
2
|
xml.rss(:version=>"2.0") do
|
3
3
|
xml.channel do
|
4
4
|
xml.title("#{@blog.name} Posts Feed")
|
5
|
-
xml.link(blog_feeds_url(:id => @blog.id, :format => "rss"))
|
5
|
+
xml.link(main_app.blog_feeds_url(:id => @blog.id, :format => "rss"))
|
6
6
|
xml.description("")
|
7
7
|
xml.language('en-us')
|
8
8
|
for post in @blog_posts
|
@@ -10,8 +10,8 @@ xml.rss(:version=>"2.0") do
|
|
10
10
|
xml.title(post.name)
|
11
11
|
xml.description(post.summary) unless post.summary.blank?
|
12
12
|
xml.pubDate(post.published_at.strftime("%a, %d %b %Y %H:%M:%S %z")) unless post.published_at.blank?
|
13
|
-
xml.link(send("#{@blog.name_for_path}_post_url", post.route_params))
|
14
|
-
xml.guid(send("#{@blog.name_for_path}_post_url", post.route_params))
|
13
|
+
xml.link(main_app.send("#{@blog.name_for_path}_post_url", post.route_params))
|
14
|
+
xml.guid(main_app.send("#{@blog.name_for_path}_post_url", post.route_params))
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -7,7 +7,9 @@
|
|
7
7
|
<%= render :partial => "partials/blog_post", :object => @blog_post %>
|
8
8
|
|
9
9
|
<div class="blog_comment_form">
|
10
|
-
|
10
|
+
<%#= form_for @blog_comment, :url => new_comment_path(@portlet) do |f| %>
|
11
|
+
<%= form_for @blog_comment, new_comment_params(@portlet) do |f| %>
|
12
|
+
|
11
13
|
<%= f.hidden_field :post_id %>
|
12
14
|
<%= f.cms_error_messages %>
|
13
15
|
<div class="fields text_fields">
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= f.cms_text_field :name, :label => 'Portlet Name', :instructions => 'Since we may have many Articles portlets, each with different parameters, give each portlet a descriptive name.' %>
|
2
2
|
|
3
|
-
<%= f.cms_drop_down :blog_id, Blog.all.map{|b| [b.name, b.id.to_s]}, :include_blank => true, :label => "Show posts from", :instructions => 'Leave blank to include posts from all blogs' %>
|
3
|
+
<%= f.cms_drop_down :blog_id, Bcms::Blog.all.map{|b| [b.name, b.id.to_s]}, :include_blank => true, :label => "Show posts from", :instructions => 'Leave blank to include posts from all blogs' %>
|
4
4
|
<%# f.cms_drop_down :show_posts_as, [['First post as full post, the rest as Summary + Read More link', 'first_full_post_others_summary'], ['Summary + Read More link', 'summary'], ['Full post', 'full_post'], ['Title (links to post)', 'link']] %>
|
5
5
|
<%= f.cms_drop_down :show_posts_as, [['Title (links to post)', 'link'], ['Post', 'post']] %>
|
6
6
|
<%= f.cms_check_box :show_full_posts %>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,4 @@
|
|
1
|
+
Cms::ContentType.create!(:name => "BcmsBlog::Blog", :group_name => "Blog")
|
2
|
+
Cms::CategoryType.create!(:name => "Blog Post")
|
3
|
+
Cms::ContentType.create!(:name => "BcmsBlog::BlogPost", :group_name => "Blog")
|
4
|
+
Cms::ContentType.create!(:name => "BcmsBlog::BlogComment", :group_name => "Blog")
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'pp'
|
2
2
|
|
3
|
-
Page # trigger auto-loading
|
3
|
+
Cms::Page # trigger auto-loading
|
4
4
|
# At the time of this writing, these associations are missing :dependent => :destroy
|
5
|
-
class Page
|
5
|
+
class Cms::Page
|
6
6
|
has_many :page_routes, :dependent => :destroy
|
7
7
|
end
|
8
|
-
class PageRoute
|
8
|
+
class Cms::PageRoute
|
9
9
|
has_many :requirements, :class_name => "PageRouteRequirement", :dependent => :destroy
|
10
10
|
has_many :conditions, :class_name => "PageRouteCondition", :dependent => :destroy
|
11
11
|
end
|
@@ -23,7 +23,6 @@ class CreateBlogs < ActiveRecord::Migration
|
|
23
23
|
t.integer :group_id
|
24
24
|
end
|
25
25
|
|
26
|
-
ContentType.create!(:name => "Blog", :group_name => "Blog")
|
27
26
|
end
|
28
27
|
|
29
28
|
def self.down
|
@@ -34,8 +33,8 @@ class CreateBlogs < ActiveRecord::Migration
|
|
34
33
|
#Blog.all.map(&:connected_pages).flatten.map(&:page_routes).flatten.each(&:destroy)
|
35
34
|
pp Blog.all.map(&:connected_pages).flatten.each(&:destroy)
|
36
35
|
|
37
|
-
ContentType.destroy_all(:name => "Blog")
|
38
|
-
Connector.destroy_all(:connectable_type => "Blog")
|
36
|
+
Cms::ContentType.destroy_all(:name => "Blog")
|
37
|
+
Cms::Connector.destroy_all(:connectable_type => "Blog")
|
39
38
|
|
40
39
|
drop_table :blog_versions
|
41
40
|
drop_table :blogs
|
@@ -11,14 +11,10 @@ class CreateBlogPosts < ActiveRecord::Migration
|
|
11
11
|
t.integer :comments_count
|
12
12
|
t.datetime :published_at
|
13
13
|
end
|
14
|
-
|
15
|
-
ContentType.create!(:name => "BlogPost", :group_name => "Blog")
|
14
|
+
|
16
15
|
end
|
17
16
|
|
18
17
|
def self.down
|
19
|
-
ContentType.destroy_all(:name => 'BlogPost')
|
20
|
-
CategoryType.destroy_all(:name => "Blog Post")
|
21
|
-
|
22
18
|
drop_table :blog_post_versions
|
23
19
|
drop_table :blog_posts
|
24
20
|
end
|
@@ -8,11 +8,9 @@ class CreateBlogComments < ActiveRecord::Migration
|
|
8
8
|
t.string :ip
|
9
9
|
t.text :body
|
10
10
|
end
|
11
|
-
ContentType.create!(:name => "BlogComment", :group_name => "Blog")
|
12
11
|
end
|
13
12
|
|
14
13
|
def self.down
|
15
|
-
ContentType.destroy_all(:name => 'BlogComment')
|
16
14
|
drop_table :blog_comment_versions
|
17
15
|
drop_table :blog_comments
|
18
16
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'cms/upgrades/v3_5_0'
|
2
|
+
|
3
|
+
# Upgrade this module to v1.3.0 of BcmsBlog (Rails 3.2/CMS 3.5.x compatible)
|
4
|
+
class V130 < ActiveRecord::Migration
|
5
|
+
def change
|
6
|
+
["Blog", "BlogPost", "BlogComment"].each do |model|
|
7
|
+
v3_5_0_apply_namespace_to_block("BcmsBlog", model)
|
8
|
+
end
|
9
|
+
|
10
|
+
rename_table "blog_group_memberships", "bcms_blog_blog_group_memberships"
|
11
|
+
end
|
12
|
+
end
|
data/lib/bcms_blog/engine.rb
CHANGED
@@ -3,8 +3,22 @@ require 'browsercms'
|
|
3
3
|
module BcmsBlog
|
4
4
|
class Engine < Rails::Engine
|
5
5
|
include Cms::Module
|
6
|
+
isolate_namespace BcmsBlog
|
6
7
|
|
7
|
-
config.active_record.observers =
|
8
|
+
config.active_record.observers = 'bcms_blog/blog_observer'
|
8
9
|
|
10
|
+
config.to_prepare do
|
11
|
+
Cms::ViewContext.send(:include, BcmsBlog::BlogHelper)
|
12
|
+
ApplicationHelper.send(:include, BcmsBlog::BlogHelper)
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer 'bcms_blog.route_extensions', :after => 'action_dispatch.prepare_dispatcher' do |app|
|
16
|
+
ActionDispatch::Routing::Mapper.send :include, BcmsBlog::RouteExtensions
|
17
|
+
end
|
18
|
+
|
19
|
+
config.before_configuration do |app|
|
20
|
+
# Used by blog_feed_url to determine the host
|
21
|
+
Rails.application.routes.default_url_options[:host]= config.cms.site_domain
|
22
|
+
end
|
9
23
|
end
|
10
24
|
end
|
data/lib/bcms_blog.rb
CHANGED
@@ -2,17 +2,17 @@ require 'cms/module_installation'
|
|
2
2
|
|
3
3
|
class BcmsBlog::InstallGenerator < Cms::ModuleInstallation
|
4
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
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
def copy_migrations
|
7
|
+
rake 'bcms_blog:install:migrations'
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_seed_data_to_project
|
11
|
+
copy_file "../bcms_blog.seeds.rb", "db/bcms_blog.seeds.rb"
|
12
|
+
append_to_file "db/seeds.rb", "\nload File.expand_path('../bcms_blog.seeds.rb', __FILE__)\n"
|
13
|
+
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
15
|
+
def add_routes
|
16
|
+
route 'mount_bcms_blog'
|
17
|
+
end
|
18
18
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module BcmsBlog
|
4
|
+
class BlogPostsControllerTest < ActionController::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
setup_blog_stubs
|
8
|
+
Cms::ContentType.create!(:name => 'BcmsBlog::BlogPost', :group_name => 'Blog')
|
9
|
+
login_as(create_user)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_access_denied_on_create_if_blog_not_user_editable
|
13
|
+
@editable = create(:blog, :groups => [@group])
|
14
|
+
@non_editable = create(:blog)
|
15
|
+
post :create, :blog_post => { :blog_id => @non_editable.id }
|
16
|
+
assert @response.body.include?("Access Denied")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_access_denied_on_update_if_blog_not_user_editable
|
20
|
+
@editable = create(:blog, :groups => [@group])
|
21
|
+
@non_editable = create(:blog)
|
22
|
+
@blog_post = create(:blog_post, :blog => @non_editable)
|
23
|
+
put :update, :id => @blog_post, :blog_post => { :name => "Foo" }
|
24
|
+
assert @response.body.include?("Access Denied")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_no_access_if_no_editable_blogs
|
28
|
+
@blog = create(:blog)
|
29
|
+
get :index
|
30
|
+
assert_template "no_access"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_index_shouldnt_show_non_editable_posts
|
34
|
+
@editable = create(:blog, :groups => [@group])
|
35
|
+
@non_editable = create(:blog)
|
36
|
+
@blog_post = create(:blog_post, :name => "Non-editable", :blog => @non_editable)
|
37
|
+
get :index
|
38
|
+
assert !@response.body.include?("Non-editable")
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_create_sets_author
|
42
|
+
@blog = create(:blog, :groups => [@group])
|
43
|
+
post :create, :blog_post => { :blog_id => @blog.id }
|
44
|
+
assert_equal @user, assigns(:block).author
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module BcmsBlog
|
4
|
+
class BlogsControllerTest < ActionController::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
setup_blog_stubs
|
8
|
+
Cms::ContentType.create!(:name => 'BcmsBlog::Blog', :group_name => 'Blog')
|
9
|
+
create(:blog)
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should allow access to admin users" do
|
13
|
+
login_as(create_user(:admin => true))
|
14
|
+
get :index
|
15
|
+
assert_response :success
|
16
|
+
assert assigns(:blocks)
|
17
|
+
assert_template("index")
|
18
|
+
end
|
19
|
+
|
20
|
+
test "should not allow access to non-admin users" do
|
21
|
+
login_as(create_user)
|
22
|
+
get :index
|
23
|
+
assert_response :success
|
24
|
+
assert_select "p", "Sorry, this section is restricted to administrators."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BlogControllerTest < ActionController::IntegrationTest
|
4
|
+
def setup
|
5
|
+
seed_bcms_data
|
6
|
+
seed_blog_data
|
7
|
+
create_test_data
|
8
|
+
end
|
9
|
+
|
10
|
+
test "displays the list of blog posts" do
|
11
|
+
get "/myblog"
|
12
|
+
|
13
|
+
assert_response :success
|
14
|
+
assert_select ".blog_post", 5
|
15
|
+
|
16
|
+
assert_select "#blog_post_#{@first_post.id}" do
|
17
|
+
assert_select "h2 a", @first_post.name
|
18
|
+
assert_select "div.body", @first_post.body
|
19
|
+
assert_select "div.meta" do
|
20
|
+
assert_select "a", 2
|
21
|
+
end
|
22
|
+
end
|
23
|
+
assert_select "#blog_post_#{@foo_post_1.id}" do
|
24
|
+
assert_select "h2 a", @foo_post_1.name
|
25
|
+
assert_select "div.body", @foo_post_1.body
|
26
|
+
assert_select "div.meta .tags a", "foo"
|
27
|
+
assert_select "div.meta .tags a", "stuff"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
test "list of blog posts by category" do
|
32
|
+
get "/myblog/category/General"
|
33
|
+
assert_response :success
|
34
|
+
assert_select ".blog_post", 3
|
35
|
+
end
|
36
|
+
|
37
|
+
test "list of blog posts by tag" do
|
38
|
+
get "/myblog/tag/foo"
|
39
|
+
assert_response :success
|
40
|
+
assert_select ".blog_post", 2
|
41
|
+
end
|
42
|
+
|
43
|
+
test "list_of_blog_posts_in_day" do
|
44
|
+
get "/myblog/2008/07/05"
|
45
|
+
assert_response :success
|
46
|
+
assert_select ".blog_post", 2
|
47
|
+
end
|
48
|
+
|
49
|
+
test "list_of_blog_posts_in_month" do
|
50
|
+
get '/myblog/2008/07'
|
51
|
+
assert_response :success
|
52
|
+
assert_select ".blog_post", 3
|
53
|
+
end
|
54
|
+
|
55
|
+
test "list_of_blog_posts_in_year" do
|
56
|
+
get "/myblog/2008"
|
57
|
+
assert_response :success
|
58
|
+
assert_select ".blog_post", 4
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class BlogPostIntegrationTest < ActionController::IntegrationTest
|
4
|
+
|
5
|
+
def setup
|
6
|
+
seed_bcms_data
|
7
|
+
seed_blog_data
|
8
|
+
create_test_data
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_show_post
|
12
|
+
get "/myblog/#{@first_post.year}/#{@first_post.month}/#{@first_post.day}/#{@first_post.slug}"
|
13
|
+
assert_response :success
|
14
|
+
assert_select "title", @first_post.name
|
15
|
+
assert_select ".blog_post", 1
|
16
|
+
|
17
|
+
assert_select "#blog_post_#{@first_post.id}" do
|
18
|
+
assert_select "h2 a", @first_post.name
|
19
|
+
assert_select ".body", @first_post.body
|
20
|
+
assert_select ".meta a", "General"
|
21
|
+
assert_select ".meta a", "0 Comments"
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
test "non_existent_post_should_return_404" do
|
27
|
+
get "/myblog/2005/6/14/non-existent"
|
28
|
+
assert_response :not_found
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Cms
|
2
|
+
module BlogTestHelper
|
3
|
+
|
4
|
+
def seed_bcms_data
|
5
|
+
silence_stream(STDOUT) do
|
6
|
+
load File.expand_path('../../dummy/db/browsercms.seeds.rb', __FILE__)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def login_as(user)
|
11
|
+
@request.session[:user_id] = user ? user.id : nil
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
# Seeds all data created by this module's migrations
|
16
|
+
def seed_blog_data
|
17
|
+
@content_type_group = ContentTypeGroup.create!(:name => "Blog")
|
18
|
+
Cms::CategoryType.create!(:name => "Blog Post")
|
19
|
+
Cms::ContentType.create!(:name => "Blog", :content_type_group => @content_type_group)
|
20
|
+
Cms::ContentType.create!(:name => "BlogPost", :content_type_group => @content_type_group)
|
21
|
+
Cms::ContentType.create!(:name => "BlogComment", :content_type_group => @content_type_group)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Creates data specifically used on tests
|
25
|
+
def create_test_data
|
26
|
+
template = %q[<% page_title @page_title || @blog.name %><%= render :partial => "partials/blog_post", :collection => @blog_posts %>"]
|
27
|
+
@blog = BcmsBlog::Blog.create!(:name => "MyBlog", :template => template)
|
28
|
+
|
29
|
+
@category_type = CategoryType.find_by_name("Blog Post")
|
30
|
+
|
31
|
+
@stuff = Category.create!(:name => "Stuff", :category_type => @category_type)
|
32
|
+
@general = Category.create!(:name => "General", :category_type => @category_type)
|
33
|
+
|
34
|
+
opts = {:blog => @blog, :publish_on_save => true}
|
35
|
+
@first_post = FactoryGirl.create(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2008, 7, 5, 6), :name => "The first Post"))
|
36
|
+
@foo_post_1 = FactoryGirl.create(:blog_post, opts.merge(:category => @stuff, :published_at => Time.utc(2008, 7, 5, 12), :tag_list => "foo stuff"))
|
37
|
+
@foo_post_2 = FactoryGirl.create(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2008, 7, 21)))
|
38
|
+
@bar_post_1 = FactoryGirl.create(:blog_post, opts.merge(:category => @stuff, :published_at => Time.utc(2008, 9, 2), :tag_list => "foo stuff"))
|
39
|
+
@bar_post_2 = FactoryGirl.create(:blog_post, opts.merge(:category => @general, :published_at => Time.utc(2009, 3, 18)))
|
40
|
+
|
41
|
+
publish_all_pages
|
42
|
+
end
|
43
|
+
|
44
|
+
def publish_all_pages
|
45
|
+
Cms::Page.all.each(&:publish)
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_blog_stubs()
|
49
|
+
Cms::PageRoute.stubs(:reload_routes)
|
50
|
+
@section = Section.new
|
51
|
+
Cms::Section.stubs(:create! => @section)
|
52
|
+
@section.stubs(:groups => [], :save! => true)
|
53
|
+
Cms::Page.stubs(:create! => Page.new)
|
54
|
+
Cms::Page.any_instance.stubs(:create_connector)
|
55
|
+
Cms::PageRoute.any_instance.stubs(:save!)
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_group
|
59
|
+
@group = FactoryGirl.create(:group, :name => "Test", :group_type => FactoryGirl.create(:group_type, :name => "CMS User", :cms_access => true))
|
60
|
+
@group.permissions << FactoryGirl.create(:permission, :name => "edit_content")
|
61
|
+
@group.permissions << FactoryGirl.create(:permission, :name => "publish_content")
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_user(opts = {})
|
65
|
+
create_group
|
66
|
+
@group.permissions << FactoryGirl.create(:permission, :name => "administrate") if opts[:admin]
|
67
|
+
@user = FactoryGirl.create(:user, :groups => [@group])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
ActiveSupport::TestCase.send(:include, Cms::BlogTestHelper)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'factory_girl'
|
2
|
+
# These factories are copied from bcms_support to avoid needing to update dependency
|
3
|
+
|
4
|
+
FactoryGirl.define do
|
5
|
+
factory :user, :class => Cms::User do |m|
|
6
|
+
m.first_name "Test"
|
7
|
+
m.last_name "User"
|
8
|
+
m.sequence(:login) {|n| "test_#{n}" }
|
9
|
+
m.email {|a| "#{a.login}@example.com" }
|
10
|
+
m.password "password"
|
11
|
+
m.password_confirmation {|a| a.password }
|
12
|
+
end
|
13
|
+
|
14
|
+
factory :group_type, :class => Cms::GroupType do |m|
|
15
|
+
m.sequence(:name) {|n| "TestGroupType#{n}" }
|
16
|
+
end
|
17
|
+
|
18
|
+
factory :group, :class => Cms::Group do |m|
|
19
|
+
m.sequence(:name) {|n| "TestGroup#{n}" }
|
20
|
+
end
|
21
|
+
|
22
|
+
factory :permission, :class => Cms::Permission do |m|
|
23
|
+
m.sequence(:name) {|n| "TestPermission#{n}" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# Blog specific factories
|
29
|
+
FactoryGirl.define do
|
30
|
+
factory :blog, :class=>BcmsBlog::Blog do |m|
|
31
|
+
m.sequence(:name) {|n| "TestBlog#{n}"}
|
32
|
+
m.moderate_comments true
|
33
|
+
end
|
34
|
+
|
35
|
+
factory :blog_post, :class=>BcmsBlog::BlogPost do |m|
|
36
|
+
m.sequence(:name) { |n| "BlogPost#{n}" }
|
37
|
+
m.blog {|b| b.association(:blog) }
|
38
|
+
m.sequence(:body) { |n| "Lorem ipsum #{n}" }
|
39
|
+
m.association :author, :factory => :user
|
40
|
+
end
|
41
|
+
|
42
|
+
factory :blog_comment, :class=>BcmsBlog::BlogComment do |m|
|
43
|
+
m.name "Just a comment"
|
44
|
+
m.body "Nice blog"
|
45
|
+
m.association :post, :factory => :blog_post
|
46
|
+
m.association :author, :factory => :user
|
47
|
+
end
|
48
|
+
|
49
|
+
factory :root_section, :class=>Cms::Section do |m|
|
50
|
+
m.name "My Site"
|
51
|
+
m.root true
|
52
|
+
m.path "/"
|
53
|
+
end
|
54
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
require "rails/test_help"
|
6
|
+
|
7
|
+
Rails.backtrace_cleaner.remove_silencers!
|
8
|
+
|
9
|
+
# Load support files
|
10
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
11
|
+
|
12
|
+
# Load fixtures from the engine
|
13
|
+
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
14
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
15
|
+
end
|
@@ -0,0 +1,64 @@
|
|
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
|