bcms_blog 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +165 -0
- data/README.markdown +113 -2
- data/app/controllers/application_controller.rb +10 -0
- data/app/controllers/cms/blog_comments_controller.rb +1 -1
- data/app/controllers/cms/blog_posts_controller.rb +34 -1
- data/app/controllers/cms/blogs_controller.rb +10 -1
- data/app/controllers/feeds_controller.rb +8 -0
- data/app/helpers/application_helper.rb +3 -0
- data/app/helpers/cms/blog_helper.rb +17 -0
- data/app/helpers/feeds_helper.rb +2 -0
- data/app/models/blog.rb +70 -14
- data/app/models/blog_comment.rb +15 -9
- data/app/models/blog_group_membership.rb +4 -0
- data/app/models/blog_observer.rb +135 -0
- data/app/models/blog_post.rb +76 -32
- data/app/portlets/blog_post_portlet.rb +23 -9
- data/app/portlets/blog_posts_portlet.rb +50 -0
- data/app/views/cms/blog_posts/_form.html.erb +9 -4
- data/app/views/cms/blog_posts/no_access.html.erb +9 -0
- data/app/views/cms/blog_posts/render.html.erb +1 -5
- data/app/views/cms/blogs/_form.html.erb +27 -1
- data/app/views/cms/blogs/admin_only.html.erb +9 -0
- data/app/views/cms/blogs/render.html.erb +2 -3
- data/app/views/feeds/index.rss.builder +18 -0
- data/app/views/partials/_blog_post.html.erb +102 -0
- data/app/views/partials/_blog_post.html.haml +91 -0
- data/app/views/portlets/blog_post/_form.html.erb +2 -1
- data/app/views/portlets/blog_post/render.html.erb +33 -36
- data/app/views/portlets/blog_posts/_form.html.erb +13 -0
- data/app/views/portlets/blog_posts/render.html.haml +9 -0
- data/db/migrate/20090415000000_create_blogs.rb +31 -18
- data/db/migrate/20090415000001_create_blog_posts.rb +5 -30
- data/db/migrate/20090415000002_create_blog_comments.rb +2 -1
- data/db/migrate/20090415000003_add_attachment_to_blog_posts.rb +23 -0
- data/db/migrate/20100521042244_add_moderate_comments_to_blog.rb +10 -0
- data/doc/README_FOR_APP +2 -0
- data/doc/migrate_to_20100427.rb +77 -0
- data/doc/release_notes.txt +40 -0
- data/lib/bcms_blog/routes.rb +3 -0
- data/rails/init.rb +6 -1
- data/test/factories.rb +47 -1
- data/test/functional/blog_post_test.rb +19 -17
- data/test/functional/blog_test.rb +47 -25
- data/test/functional/cms/blog_posts_controller_test.rb +44 -0
- data/test/functional/cms/blogs_controller_test.rb +25 -0
- data/test/functional/feeds_controller_test.rb +8 -0
- data/test/test_helper.rb +64 -120
- data/test/unit/blog_comment_test.rb +34 -0
- data/test/unit/blog_observer_test.rb +61 -0
- data/test/unit/blog_post_test.rb +43 -0
- data/test/unit/blog_test.rb +42 -0
- data/test/unit/helpers/feeds_helper_test.rb +4 -0
- metadata +64 -7
- data/app/views/portlets/blog_post/_blog_post.html.erb +0 -29
@@ -1,3 +1,15 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
Page # trigger auto-loading
|
4
|
+
# At the time of this writing, these associations are missing :dependent => :destroy
|
5
|
+
class Page
|
6
|
+
has_many :page_routes, :dependent => :destroy
|
7
|
+
end
|
8
|
+
class PageRoute
|
9
|
+
has_many :requirements, :class_name => "PageRouteRequirement", :dependent => :destroy
|
10
|
+
has_many :conditions, :class_name => "PageRouteCondition", :dependent => :destroy
|
11
|
+
end
|
12
|
+
|
1
13
|
class CreateBlogs < ActiveRecord::Migration
|
2
14
|
def self.up
|
3
15
|
create_versioned_table :blogs do |t|
|
@@ -5,28 +17,29 @@ class CreateBlogs < ActiveRecord::Migration
|
|
5
17
|
t.string :format
|
6
18
|
t.text :template
|
7
19
|
end
|
8
|
-
ContentType.create!(:name => "Blog", :group_name => "Blog")
|
9
20
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
:connect_to_container => "main",
|
17
|
-
:publish_on_save => true)
|
18
|
-
|
19
|
-
blog_page.page_routes.create(
|
20
|
-
:name => "Blog Posts With Tag",
|
21
|
-
:pattern => "/articles/tag/:tag")
|
22
|
-
|
23
|
-
blog_page.page_routes.create(
|
24
|
-
:name => "Blog Posts In Category",
|
25
|
-
:pattern => "/articles/category/:category")
|
21
|
+
create_table :blog_group_memberships do |t|
|
22
|
+
t.integer :blog_id
|
23
|
+
t.integer :group_id
|
24
|
+
end
|
25
|
+
|
26
|
+
ContentType.create!(:name => "Blog", :group_name => "Blog")
|
26
27
|
end
|
27
28
|
|
28
29
|
def self.down
|
29
|
-
|
30
|
+
puts "Destroying portlets, pages, page_routes..."
|
31
|
+
pp (portlets = BlogPostPortlet.all).map(&:connected_pages).flatten.each(&:destroy)
|
32
|
+
pp portlets.each(&:destroy)
|
33
|
+
|
34
|
+
#Blog.all.map(&:connected_pages).flatten.map(&:page_routes).flatten.each(&:destroy)
|
35
|
+
pp Blog.all.map(&:connected_pages).flatten.each(&:destroy)
|
36
|
+
|
37
|
+
ContentType.destroy_all(:name => "Blog")
|
38
|
+
Connector.destroy_all(:connectable_type => "Blog")
|
39
|
+
|
40
|
+
drop_table :blog_versions
|
30
41
|
drop_table :blogs
|
42
|
+
|
43
|
+
drop_table :blog_group_memberships
|
31
44
|
end
|
32
45
|
end
|
@@ -4,46 +4,21 @@ class CreateBlogPosts < ActiveRecord::Migration
|
|
4
4
|
t.integer :blog_id
|
5
5
|
t.integer :author_id
|
6
6
|
t.integer :category_id
|
7
|
-
t.string :name
|
7
|
+
t.string :name
|
8
8
|
t.string :slug
|
9
|
-
t.text :summary
|
9
|
+
t.text :summary
|
10
10
|
t.text :body, :size => (64.kilobytes + 1)
|
11
11
|
t.integer :comments_count
|
12
12
|
t.datetime :published_at
|
13
13
|
end
|
14
14
|
CategoryType.create!(:name => "Blog Post")
|
15
15
|
ContentType.create!(:name => "BlogPost", :group_name => "Blog")
|
16
|
-
|
17
|
-
blog_post_page = Page.create!(
|
18
|
-
:name => "Blog Post",
|
19
|
-
:path => "/blog/post",
|
20
|
-
:section => Section.root.first,
|
21
|
-
:template_file_name => "default.html.erb")
|
22
|
-
|
23
|
-
BlogPostPortlet.create!(
|
24
|
-
:name => "Blog Post Portlet",
|
25
|
-
:template => BlogPostPortlet.default_template,
|
26
|
-
:connect_to_page_id => blog_post_page.id,
|
27
|
-
:connect_to_container => "main",
|
28
|
-
:publish_on_save => true)
|
29
|
-
|
30
|
-
route = blog_post_page.page_routes.build(
|
31
|
-
:name => "Blog Post",
|
32
|
-
:pattern => "/articles/:year/:month/:day/:slug",
|
33
|
-
:code => "@blog_post = BlogPost.published_on(params).with_slug(params[:slug]).first")
|
34
|
-
route.add_condition(:method, "get")
|
35
|
-
route.add_requirement(:year, '\d{4,}')
|
36
|
-
route.add_requirement(:month, '\d{2,}')
|
37
|
-
route.add_requirement(:day, '\d{2,}')
|
38
|
-
route.save!
|
39
|
-
|
40
|
-
|
41
|
-
|
42
16
|
end
|
43
17
|
|
44
18
|
def self.down
|
45
|
-
ContentType.
|
46
|
-
CategoryType.
|
19
|
+
ContentType.destroy_all(:name => 'BlogPost')
|
20
|
+
CategoryType.destroy_all(:name => "Blog Post")
|
21
|
+
|
47
22
|
drop_table :blog_post_versions
|
48
23
|
drop_table :blog_posts
|
49
24
|
end
|
@@ -12,7 +12,8 @@ class CreateBlogComments < ActiveRecord::Migration
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.down
|
15
|
-
ContentType.
|
15
|
+
ContentType.destroy_all(:name => 'BlogComment')
|
16
|
+
drop_table :blog_comment_versions
|
16
17
|
drop_table :blog_comments
|
17
18
|
end
|
18
19
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class AddAttachmentToBlogPosts < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_table :blog_posts do |t|
|
4
|
+
t.belongs_to :attachment
|
5
|
+
t.integer :attachment_version
|
6
|
+
end
|
7
|
+
change_table :blog_post_versions do |t|
|
8
|
+
t.belongs_to :attachment
|
9
|
+
t.integer :attachment_version
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
change_table :blog_posts do |t|
|
15
|
+
t.remove :attachment
|
16
|
+
t.remove :attachment_version
|
17
|
+
end
|
18
|
+
change_table :blog_post_versions do |t|
|
19
|
+
t.remove :attachment
|
20
|
+
t.remove :attachment_version
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class AddModerateCommentsToBlog < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_content_column :blogs, :moderate_comments, :boolean, :default => true
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.down
|
7
|
+
remove_column :blogs, :moderate_comments
|
8
|
+
remove_column :blog_versions, :moderate_comments
|
9
|
+
end
|
10
|
+
end
|
data/doc/README_FOR_APP
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Ideally, we would create a new migration whenever we wanted to make changes to an existing
|
2
|
+
# migration that is already in circulation, instead of simply editing the existing migrations
|
3
|
+
# and publishing the new version, because doing rake db:migrate:redo VERSION=20090415000000,
|
4
|
+
# etc. on each updated migration is not only a pain but will probably result in more data being
|
5
|
+
# lost than is strictly necessary -- assuming the migrations work correctly at all.
|
6
|
+
#
|
7
|
+
# On the other hand, there's something pretty compelling about "fixing" the migration so that
|
8
|
+
# it doesn't have any useless steps that are just going to get reverted by the next migration.
|
9
|
+
#
|
10
|
+
# There is also the problem of model dependencies: you can't safely remove a model in the same
|
11
|
+
# commit that you use that model in a migration (f.e., Model.destroy_all). Even if you remove it
|
12
|
+
# in the following commit, it's only safe if people check out every intermediate version and run
|
13
|
+
# db:migrate at each version, instead of simply checking out the tip version and then running
|
14
|
+
# db:migrate. And people don't do that.
|
15
|
+
#
|
16
|
+
# Anyway, I guess we assume that there are only a few brave souls out there who are already
|
17
|
+
# using bcms_blog and hope for the best. Here is the "missing migration"; hopefully it will be
|
18
|
+
# helpful to you.
|
19
|
+
#
|
20
|
+
# Run this script instead of re-running the changed migrations with rake db:migrate:redo so that
|
21
|
+
# your blog data is not destroyed.
|
22
|
+
#
|
23
|
+
# Usage: ./script/runner 'require "/path/to/bcms_blog/doc/migrate_to_20100427.rb"'
|
24
|
+
|
25
|
+
require 'pp'
|
26
|
+
|
27
|
+
Page # trigger auto-loading
|
28
|
+
# At the time of this writing, these associations are missing :dependent => :destroy
|
29
|
+
class Page
|
30
|
+
has_many :page_routes, :dependent => :destroy
|
31
|
+
end
|
32
|
+
class PageRoute
|
33
|
+
has_many :requirements, :class_name => "PageRouteRequirement", :dependent => :destroy
|
34
|
+
has_many :conditions, :class_name => "PageRouteCondition", :dependent => :destroy
|
35
|
+
end
|
36
|
+
|
37
|
+
# Added these here because these classes will be removed by the next commit, so if anyone tried to run this script in future versions it would have a missing constant error unless we keep these class definitions around
|
38
|
+
class BlogPostsInCategoryPortlet < Portlet; end
|
39
|
+
class BlogPostsWithTagPortlet < Portlet; end
|
40
|
+
class BlogPostPortlet < Portlet; end
|
41
|
+
class BlogPostsInDayPortlet < Portlet; end
|
42
|
+
class BlogPostsInMonthPortlet < Portlet; end
|
43
|
+
class BlogPostsInYearPortlet < Portlet; end
|
44
|
+
|
45
|
+
class MigrateTo20100427 < ActiveRecord::Migration
|
46
|
+
def self.up
|
47
|
+
drop_table :blog_group_membership_versions
|
48
|
+
|
49
|
+
PageRouteOption.all.each {|a| a.destroy unless a.page_route }
|
50
|
+
|
51
|
+
puts "Destroying portlets, pages, page_routes left over from old version of bcms_blog..."
|
52
|
+
puts "(*Not* destroying any existing Blogs, pages on which Blogs are connected, or BlogPosts)"
|
53
|
+
portlets = [BlogPostPortlet, BlogPostsInCategoryPortlet, BlogPostsWithTagPortlet, BlogPostsInDayPortlet, BlogPostsInMonthPortlet, BlogPostsInYearPortlet]
|
54
|
+
#pp portlets.map(&:all).flatten.map(&:connected_pages).flatten.map(&:page_routes).flatten.each(&:destroy)
|
55
|
+
pp portlets.map(&:all).flatten.map(&:connected_pages).flatten.each(&:destroy)
|
56
|
+
pp portlets.map(&:all).flatten.each(&:destroy)
|
57
|
+
|
58
|
+
# Something like this might not work if they have moved their Blog page to a different section or to no section, so we better let users resolve this manually...
|
59
|
+
#Blog.all.map(&:connected_pages).flatten.each do |page|
|
60
|
+
# page.hidden = true
|
61
|
+
# page.save!
|
62
|
+
# page.section.hidden = false
|
63
|
+
# page.section.save!
|
64
|
+
#end
|
65
|
+
|
66
|
+
puts "Calling after_create on each Blog in the system..."
|
67
|
+
Blog.all.each do |blog|
|
68
|
+
puts "#{blog}..."
|
69
|
+
blog.send :after_create
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.down
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
MigrateTo20100427.up
|
@@ -0,0 +1,40 @@
|
|
1
|
+
v1.1.0
|
2
|
+
|
3
|
+
This version introduces significant changes and improvements over version 1.0.0
|
4
|
+
and lays the groundwork for a more sophisticated blogging platform for BrowserCMS.
|
5
|
+
|
6
|
+
Notable Features:
|
7
|
+
=================
|
8
|
+
|
9
|
+
1. A Blog and supporting structure (sections, pages, page routes, etc.) and data are no longer
|
10
|
+
created as part of the modules's installation process. When running the module's migrations,
|
11
|
+
only the following items are created:
|
12
|
+
|
13
|
+
* blogs, blog_posts and blog_comment tables (and corresponding tables to hold versioning data)
|
14
|
+
* blog_group_memberships table
|
15
|
+
* Blog, BlogPost and BlogComment content types
|
16
|
+
* Blog Post category type
|
17
|
+
|
18
|
+
2. It is only until a Blog is created when a corresponding section, pages, page routes and portlets are created.
|
19
|
+
Each blog has its own section, pages and page routes, which allows for multiple blogs to be created.
|
20
|
+
|
21
|
+
3. It is now possible to add attachments to blog posts.
|
22
|
+
|
23
|
+
4. Comments are moderated by default using BrowserCMS' default behaviors. However, when creating a Blog,
|
24
|
+
users can specify whether comments should be published automatically.
|
25
|
+
|
26
|
+
5. The module now uses BrowserCMS' permissions framework to specify if a particular user is able to
|
27
|
+
create or edit Blogs and BlogPosts.
|
28
|
+
|
29
|
+
6. Portlets have been improved to match common standard blog publishing templates.
|
30
|
+
|
31
|
+
For a complete rundown and rationale behind the changes introduced, please refer to:
|
32
|
+
https://browsermedia.lighthouseapp.com/projects/28481/tickets/163-review-and-integrate-changes-to-the-blog-module
|
33
|
+
|
34
|
+
Contributors:
|
35
|
+
=============
|
36
|
+
Tyler Rick
|
37
|
+
Jon Leighton
|
38
|
+
|
39
|
+
|
40
|
+
v1.0.0
|
data/lib/bcms_blog/routes.rb
CHANGED
data/rails/init.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
1
|
gem_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
2
2
|
Cms.add_to_rails_paths gem_root
|
3
|
-
Cms.add_generator_paths gem_root, "db/migrate/[0-9]*_*.rb"
|
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
|
data/test/factories.rb
CHANGED
@@ -1,3 +1,49 @@
|
|
1
|
+
Factory.define :category_type do |m|
|
2
|
+
m.name "Blog Post"
|
3
|
+
end
|
4
|
+
|
5
|
+
Factory.define :group do |m|
|
6
|
+
m.sequence(:name) {|n| "TestGroup#{n}" }
|
7
|
+
m.association :group_type
|
8
|
+
end
|
9
|
+
|
10
|
+
Factory.define :group_type do |m|
|
11
|
+
m.sequence(:name) {|n| "TestGroupType#{n}" }
|
12
|
+
end
|
13
|
+
|
14
|
+
Factory.define :permission do |m|
|
15
|
+
m.name "edit_content"
|
16
|
+
end
|
17
|
+
|
18
|
+
Factory.define :user do |m|
|
19
|
+
m.first_name "Test"
|
20
|
+
m.last_name "User"
|
21
|
+
m.sequence(:login) {|n| "test_#{n}" }
|
22
|
+
m.email {|a| "#{a.login}@example.com" }
|
23
|
+
m.password "password"
|
24
|
+
m.password_confirmation {|a| a.password }
|
25
|
+
end
|
26
|
+
|
27
|
+
Factory.define :section do |m|
|
28
|
+
m.name "A Section"
|
29
|
+
m.path "/a-section"
|
30
|
+
end
|
31
|
+
|
1
32
|
Factory.define :blog do |m|
|
2
33
|
m.sequence(:name) {|n| "TestBlog#{n}"}
|
3
|
-
|
34
|
+
m.moderate_comments true
|
35
|
+
end
|
36
|
+
|
37
|
+
Factory.define :blog_post do |m|
|
38
|
+
m.sequence(:name) { |n| "BlogPost#{n}" }
|
39
|
+
m.blog {|b| b.association(:blog) }
|
40
|
+
m.sequence(:body) { |n| "Lorem ipsum #{n}" }
|
41
|
+
m.association :author, :factory => :user
|
42
|
+
end
|
43
|
+
|
44
|
+
Factory.define :blog_comment do |m|
|
45
|
+
m.name "Just a comment"
|
46
|
+
m.body "Nice blog"
|
47
|
+
m.association :post, :factory => :blog_post
|
48
|
+
m.association :author, :factory => :user
|
49
|
+
end
|
@@ -5,31 +5,33 @@ class BlogPostTest < ActionController::TestCase
|
|
5
5
|
|
6
6
|
def setup
|
7
7
|
create_baseline_data
|
8
|
-
@blog_post_portlet = BlogPostPortlet.create!(:name => "Blog Post Portlet",
|
9
|
-
:template => BlogPostPortlet.default_template,
|
10
|
-
:connect_to_page_id => @blog_post_page.id,
|
11
|
-
:connect_to_container => "main",
|
12
|
-
:publish_on_save => true)
|
13
8
|
end
|
14
|
-
|
9
|
+
|
10
|
+
=begin
|
15
11
|
def test_show_post
|
16
|
-
get :
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
#log @response.body
|
12
|
+
get :show, :path => ["myblog"],
|
13
|
+
:year => 2008,
|
14
|
+
:month => 07,
|
15
|
+
:day => 05
|
16
|
+
log @response.body
|
22
17
|
assert_response :success
|
23
18
|
assert_select "title", @first_post.name
|
24
19
|
assert_select ".blog_post", 1
|
25
|
-
|
20
|
+
|
26
21
|
assert_select "#blog_post_#{@first_post.id}" do
|
27
|
-
assert_select "h2 a",
|
28
|
-
assert_select "p.body",
|
22
|
+
assert_select "h2 a", @first_post.name
|
23
|
+
assert_select "p.body", @first_post.body
|
29
24
|
assert_select "p.meta a", "General"
|
30
25
|
assert_select "p.meta a", "0 Comments"
|
31
26
|
end
|
32
|
-
|
27
|
+
end
|
28
|
+
=end
|
29
|
+
|
30
|
+
def test_non_existent_slug_should_return_404
|
31
|
+
get :show, :path => ["blog", "post"],
|
32
|
+
:year => 2005, :month => 6, :day => 14,
|
33
|
+
:slug => "not-here"
|
34
|
+
assert_response :not_found
|
33
35
|
end
|
34
36
|
|
35
|
-
end
|
37
|
+
end
|
@@ -6,40 +6,62 @@ class BlogTest < ActionController::TestCase
|
|
6
6
|
def setup
|
7
7
|
create_baseline_data
|
8
8
|
end
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
assert_select "
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
assert_select "
|
25
|
-
|
26
|
-
|
27
|
-
|
9
|
+
|
10
|
+
=begin
|
11
|
+
test "displays the list of blog posts" do
|
12
|
+
get :show, :path => ['myblog']
|
13
|
+
log @response.body
|
14
|
+
assert_response :success
|
15
|
+
assert_select ".blog_post", 5
|
16
|
+
|
17
|
+
assert_select "#blog_post_#{@first_post.id}" do
|
18
|
+
assert_select "h2 a", @first_post.name
|
19
|
+
assert_select "p.body", @first_post.body
|
20
|
+
assert_select "p.meta a", "General"
|
21
|
+
assert_select "p.meta a", "0 Comments"
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_select "#blog_post_#{@foo_post_1.id}" do
|
25
|
+
assert_select "h2 a", @foo_post_1.name
|
26
|
+
assert_select "p.body", @foo_post_1.body
|
27
|
+
assert_select "p.meta .tags a", "foo"
|
28
|
+
assert_select "p.meta .tags a", "stuff"
|
29
|
+
end
|
28
30
|
end
|
29
|
-
end
|
30
31
|
|
31
32
|
def test_list_of_tagged_blog_posts
|
32
|
-
get :show, :
|
33
|
-
|
33
|
+
get :show, :category => "General"
|
34
|
+
puts @response.body
|
34
35
|
assert_response :success
|
35
36
|
assert_select ".blog_post", 3
|
36
37
|
end
|
37
38
|
|
38
39
|
def test_list_of_categorized_blog_posts
|
39
|
-
get :show, :
|
40
|
-
|
40
|
+
get :show, :tag => "foo"
|
41
|
+
assert_response :success
|
42
|
+
assert_select ".blog_post", 2
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_list_of_blog_posts_in_day
|
46
|
+
get :show, :path => ["blog", "posts_in_day"],
|
47
|
+
:year => 2008, :month => 7, :day => 5
|
41
48
|
assert_response :success
|
42
49
|
assert_select ".blog_post", 2
|
43
50
|
end
|
44
51
|
|
45
|
-
|
52
|
+
def test_list_of_blog_posts_in_month
|
53
|
+
get :show, :path => ["blog", "posts_in_month"],
|
54
|
+
:year => 2008, :month => 7
|
55
|
+
assert_response :success
|
56
|
+
assert_select ".blog_post", 3
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_list_of_blog_posts_in_year
|
60
|
+
get :show, :path => ["blog", "posts_in_year"],
|
61
|
+
:year => 2008
|
62
|
+
assert_response :success
|
63
|
+
assert_select ".blog_post", 4
|
64
|
+
end
|
65
|
+
=end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
|
3
|
+
class Cms::BlogPostsControllerTest < ActionController::TestCase
|
4
|
+
def setup
|
5
|
+
setup_stubs
|
6
|
+
ContentType.create!(:name => 'BlogPost', :group_name => 'Blog')
|
7
|
+
login_as(_create_user)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_access_denied_on_create_if_blog_not_user_editable
|
11
|
+
@editable = Factory(:blog, :groups => [@group])
|
12
|
+
@non_editable = Factory(:blog)
|
13
|
+
post :create, :blog_post => { :blog_id => @non_editable.id }
|
14
|
+
assert @response.body.include?("Access Denied")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_access_denied_on_update_if_blog_not_user_editable
|
18
|
+
@editable = Factory.create(:blog, :groups => [@group])
|
19
|
+
@non_editable = Factory.create(:blog)
|
20
|
+
@blog_post = Factory.create(:blog_post, :blog => @non_editable)
|
21
|
+
put :update, :id => @blog_post, :blog_post => { :name => "Foo" }
|
22
|
+
assert @response.body.include?("Access Denied")
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_no_access_if_no_editable_blogs
|
26
|
+
@blog = Factory.create(:blog)
|
27
|
+
get :index
|
28
|
+
assert_template "no_access"
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_index_shouldnt_show_non_editable_posts
|
32
|
+
@editable = Factory.create(:blog, :groups => [@group])
|
33
|
+
@non_editable = Factory.create(:blog)
|
34
|
+
@blog_post = Factory.create(:blog_post, :name => "Non-editable", :blog => @non_editable)
|
35
|
+
get :index
|
36
|
+
assert !@response.body.include?("Non-editable")
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_create_sets_author
|
40
|
+
@blog = Factory.create(:blog, :groups => [@group])
|
41
|
+
post :create, :blog_post => { :blog_id => @blog.id }
|
42
|
+
assert_equal @user, assigns(:block).author
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
|
3
|
+
class Cms::BlogsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
setup_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
|