bcms_blog 1.0.0 → 1.1.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.
- 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
|