Commit 9152b209f308c3fd448ce9246f165b246a8d9a6c
Committed by
Daniela Feitosa
1 parent
ac0943b0
Exists in
master
and in
29 other branches
Blogs can't have folders inside
* Forbidding folders to be created inside blogs. * Avoiding folders on the blog's posts until it's decided what's going to be done the the folders that are already inside blogs (migration). (ActionItem1892)
Showing
11 changed files
with
94 additions
and
12 deletions
Show diff stats
app/controllers/my_profile/cms_controller.rb
... | ... | @@ -49,6 +49,9 @@ class CmsController < MyProfileController |
49 | 49 | if profile.enterprise? |
50 | 50 | articles << EnterpriseHomepage |
51 | 51 | end |
52 | + if @parent && @parent.blog? | |
53 | + articles -= Article.folder_types.map(&:constantize) | |
54 | + end | |
52 | 55 | articles |
53 | 56 | end |
54 | 57 | |
... | ... | @@ -109,6 +112,7 @@ class CmsController < MyProfileController |
109 | 112 | |
110 | 113 | # user must choose an article type first |
111 | 114 | |
115 | + @parent = profile.articles.find(params[:parent_id]) if params && params[:parent_id] | |
112 | 116 | record_coming |
113 | 117 | @type = params[:type] |
114 | 118 | if @type.blank? | ... | ... |
app/models/article.rb
... | ... | @@ -339,8 +339,13 @@ class Article < ActiveRecord::Base |
339 | 339 | end |
340 | 340 | end |
341 | 341 | |
342 | + def self.folder_types | |
343 | + ['Folder', 'Blog', 'Forum', 'Gallery'] | |
344 | + end | |
345 | + | |
342 | 346 | named_scope :published, :conditions => { :published => true } |
343 | - named_scope :folders, :conditions => { :type => ['Folder', 'Blog', 'Forum', 'Gallery'] } | |
347 | + named_scope :folders, :conditions => { :type => folder_types} | |
348 | + named_scope :no_folders, :conditions => ['type NOT IN (?)', folder_types] | |
344 | 349 | named_scope :galleries, :conditions => { :type => 'Gallery' } |
345 | 350 | named_scope :images, :conditions => { :is_image => true } |
346 | 351 | ... | ... |
app/models/blog.rb
... | ... | @@ -2,6 +2,13 @@ class Blog < Folder |
2 | 2 | |
3 | 3 | acts_as_having_posts |
4 | 4 | |
5 | + #FIXME This should be used until there is a migration to fix all blogs that | |
6 | + # already have folders inside them | |
7 | + def posts_with_no_folders | |
8 | + posts_without_no_folders.no_folders | |
9 | + end | |
10 | + alias_method_chain :posts, :no_folders | |
11 | + | |
5 | 12 | def self.short_description |
6 | 13 | _('Blog') |
7 | 14 | end | ... | ... |
app/models/folder.rb
1 | 1 | class Folder < Article |
2 | 2 | |
3 | + validate :not_belong_to_blog | |
4 | + | |
5 | + def not_belong_to_blog | |
6 | + errors.add(:parent, "A folder should not belong to a blog.") if parent && parent.blog? | |
7 | + end | |
8 | + | |
3 | 9 | acts_as_having_settings :field => :setting |
4 | 10 | |
5 | 11 | xss_terminate :only => [ :body ], :with => 'white_list', :on => 'validation' | ... | ... |
test/functional/cms_controller_test.rb
... | ... | @@ -818,6 +818,15 @@ class CmsControllerTest < Test::Unit::TestCase |
818 | 818 | assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{profile.identifier}/cms/new?type=Forum"} |
819 | 819 | end |
820 | 820 | |
821 | + should 'not offer folders if in a blog' do | |
822 | + blog = fast_create(Blog, :profile_id => profile.id) | |
823 | + get :new, :profile => profile.identifier, :parent_id => blog.id, :cms => true | |
824 | + types = assigns(:article_types).map {|t| t[:name]} | |
825 | + Article.folder_types.each do |type| | |
826 | + assert_not_includes types, type | |
827 | + end | |
828 | + end | |
829 | + | |
821 | 830 | should 'offer to edit a blog' do |
822 | 831 | profile.articles << Blog.new(:name => 'blog test', :profile => profile) |
823 | 832 | ... | ... |
test/functional/content_viewer_controller_test.rb
... | ... | @@ -714,8 +714,8 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
714 | 714 | |
715 | 715 | should 'add meta tag to rss feed on view post blog' do |
716 | 716 | login_as(profile.identifier) |
717 | - profile.articles << Blog.new(:name => 'Blog', :profile => profile) | |
718 | - profile.blog.posts << TextileArticle.new(:name => 'first post', :parent => profile.blog, :profile => profile) | |
717 | + blog = Blog.create!(:name => 'Blog', :profile => profile) | |
718 | + TextileArticle.create!(:name => 'first post', :parent => blog, :profile => profile) | |
719 | 719 | get :view_page, :profile => profile.identifier, :page => ['blog', 'first-post'] |
720 | 720 | assert_tag :tag => 'link', :attributes => { :rel => 'alternate', :type => 'application/rss+xml', :title => 'Blog', :href => "http://#{environment.default_hostname}/testinguser/blog/feed" } |
721 | 721 | end |
... | ... | @@ -1208,9 +1208,8 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
1208 | 1208 | FastGettext.stubs(:locale).returns('es') |
1209 | 1209 | blog = fast_create(Blog, :profile_id => profile.id, :path => 'blog') |
1210 | 1210 | blog.stubs(:display_posts_in_current_language).returns(true) |
1211 | - en_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'en_article', :language => 'en') | |
1212 | - es_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'es_article', :language => 'es', :translation_of_id => en_article) | |
1213 | - blog.posts = [en_article, es_article] | |
1211 | + en_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'en_article', :language => 'en', :parent_id => blog.id) | |
1212 | + es_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'es_article', :language => 'es', :parent_id => blog.id, :translation_of_id => en_article) | |
1214 | 1213 | |
1215 | 1214 | get :view_page, :profile => @profile.identifier, :page => blog.explode_path |
1216 | 1215 | assert_tag :div, :attributes => { :id => "post-#{es_article.id}" } |
... | ... | @@ -1232,8 +1231,8 @@ class ContentViewerControllerTest < Test::Unit::TestCase |
1232 | 1231 | FastGettext.stubs(:locale).returns('es') |
1233 | 1232 | blog = fast_create(Blog, :profile_id => profile.id, :path => 'blog') |
1234 | 1233 | blog.stubs(:display_posts_in_current_language).returns(true) |
1235 | - en_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'en_article', :language => 'en') | |
1236 | - es_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'es_article', :language => 'es', :translation_of_id => en_article) | |
1234 | + en_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'en_article', :language => 'en', :parent_id => blog.id) | |
1235 | + es_article = fast_create(TextileArticle, :profile_id => @profile.id, :path => 'es_article', :language => 'es', :parent_id => blog.id, :translation_of_id => en_article) | |
1237 | 1236 | blog.posts = [en_article, es_article] |
1238 | 1237 | |
1239 | 1238 | get :view_page, :profile => @profile.identifier, :page => blog.explode_path | ... | ... |
test/functional/profile_controller_test.rb
... | ... | @@ -482,9 +482,9 @@ class ProfileControllerTest < Test::Unit::TestCase |
482 | 482 | |
483 | 483 | should 'show number of published posts in index' do |
484 | 484 | profile.articles << blog = Blog.create(:name => 'Blog', :profile_id => profile.id) |
485 | - blog.posts << TextileArticle.new(:name => 'Published post', :parent => profile.blog, :profile => profile) | |
486 | - blog.posts << TextileArticle.new(:name => 'Other published post', :parent => profile.blog, :profile => profile) | |
487 | - blog.posts << TextileArticle.new(:name => 'Unpublished post', :parent => profile.blog, :profile => profile, :published => false) | |
485 | + fast_create(TextileArticle, :name => 'Published post', :parent_id => profile.blog.id, :profile_id => profile.id) | |
486 | + fast_create(TextileArticle, :name => 'Other published post', :parent_id => profile.blog.id, :profile_id => profile.id) | |
487 | + fast_create(TextileArticle, :name => 'Unpublished post', :parent_id => profile.blog.id, :profile_id => profile.id, :published => false) | |
488 | 488 | |
489 | 489 | get :index, :profile => profile.identifier |
490 | 490 | assert_tag :tag => 'a', :content => '2 posts', :attributes => { :href => /\/testuser\/blog/ } | ... | ... |
test/unit/article_test.rb
... | ... | @@ -1444,4 +1444,34 @@ class ArticleTest < Test::Unit::TestCase |
1444 | 1444 | assert !Article.new.tiny_mce? |
1445 | 1445 | end |
1446 | 1446 | |
1447 | + should 'return only folders' do | |
1448 | + not_folders = [RssFeed, TinyMceArticle, Event, TextileArticle] | |
1449 | + folders = [Folder, Blog, Gallery, Forum] | |
1450 | + | |
1451 | + not_folders.each do |klass| | |
1452 | + item = fast_create(klass) | |
1453 | + assert_not_includes Article.folders, item | |
1454 | + end | |
1455 | + | |
1456 | + folders.each do |klass| | |
1457 | + item = fast_create(klass) | |
1458 | + assert_includes Article.folders, item | |
1459 | + end | |
1460 | + end | |
1461 | + | |
1462 | + should 'return no folders' do | |
1463 | + not_folders = [RssFeed, TinyMceArticle, Event, TextileArticle] | |
1464 | + folders = [Folder, Blog, Gallery, Forum] | |
1465 | + | |
1466 | + not_folders.each do |klass| | |
1467 | + item = fast_create(klass) | |
1468 | + assert_includes Article.no_folders, item | |
1469 | + end | |
1470 | + | |
1471 | + folders.each do |klass| | |
1472 | + item = fast_create(klass) | |
1473 | + assert_not_includes Article.no_folders, item | |
1474 | + end | |
1475 | + end | |
1476 | + | |
1447 | 1477 | end | ... | ... |
test/unit/blog_test.rb
... | ... | @@ -195,4 +195,15 @@ class BlogTest < ActiveSupport::TestCase |
195 | 195 | assert !blog.reload.display_posts_in_current_language? |
196 | 196 | end |
197 | 197 | |
198 | + #FIXME This should be used until there is a migration to fix all blogs that | |
199 | + # already have folders inside them | |
200 | + should 'not list folders in posts' do | |
201 | + blog = fast_create(Blog) | |
202 | + folder = fast_create(Folder, :parent_id => blog.id) | |
203 | + article = fast_create(TextileArticle, :parent_id => blog.id) | |
204 | + | |
205 | + assert_not_includes blog.posts, folder | |
206 | + assert_includes blog.posts, article | |
207 | + end | |
208 | + | |
198 | 209 | end | ... | ... |
test/unit/folder_test.rb
... | ... | @@ -132,4 +132,12 @@ class FolderTest < ActiveSupport::TestCase |
132 | 132 | assert_no_match /[<>]/, folder.body |
133 | 133 | end |
134 | 134 | |
135 | + should 'not have a blog as parent' do | |
136 | + folder = Folder.new | |
137 | + folder.parent = Blog.new | |
138 | + folder.valid? | |
139 | + | |
140 | + assert folder.errors.on(:parent) | |
141 | + end | |
142 | + | |
135 | 143 | end | ... | ... |
test/unit/rss_feed_test.rb
... | ... | @@ -212,7 +212,10 @@ class RssFeedTest < Test::Unit::TestCase |
212 | 212 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => fast_create(Person)) |
213 | 213 | a.finish |
214 | 214 | |
215 | - blog.posts << published_article = article.class.last | |
215 | + published_article = article.class.last | |
216 | + published_article.parent = blog | |
217 | + published_article.save | |
218 | + | |
216 | 219 | feed = RssFeed.new(:parent => blog, :profile => profile) |
217 | 220 | |
218 | 221 | assert_match "This is the content of the Sample Article", feed.data | ... | ... |