From 04576c7e2e00f99ed88b6c828a0698a15d4e9a3e Mon Sep 17 00:00:00 2001 From: VĂ­tor Barbosa Date: Tue, 28 Jul 2015 09:56:25 -0300 Subject: [PATCH] Fix clone article behavior --- app/controllers/my_profile/cms_controller.rb | 13 +++++++++---- app/views/cms/edit.html.erb | 2 -- app/views/content_viewer/_article_toolbar.html.erb | 4 ++-- test/functional/cms_controller_test.rb | 46 +++++++++++++++++++++++++++++++++++++--------- test/unit/clone_article_test.rb | 21 +++++++++++++++++++++ 5 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 test/unit/clone_article_test.rb diff --git a/app/controllers/my_profile/cms_controller.rb b/app/controllers/my_profile/cms_controller.rb index 9ff7a92..4a008a6 100644 --- a/app/controllers/my_profile/cms_controller.rb +++ b/app/controllers/my_profile/cms_controller.rb @@ -118,10 +118,7 @@ class CmsController < MyProfileController end end - unless @article.kind_of?(RssFeed) - @escaped_body = CGI::escapeHTML(@article.body || '') - @escaped_abstract = CGI::escapeHTML(@article.abstract || '') - end + escape_fields @article end def new @@ -192,6 +189,8 @@ class CmsController < MyProfileController end end + escape_fields @article + render :action => 'edit' end @@ -541,4 +540,10 @@ class CmsController < MyProfileController end end + def escape_fields article + unless article.kind_of?(RssFeed) + @escaped_body = CGI::escapeHTML(article.body || '') + @escaped_abstract = CGI::escapeHTML(article.abstract || '') + end + end end diff --git a/app/views/cms/edit.html.erb b/app/views/cms/edit.html.erb index c234788..2ad2960 100644 --- a/app/views/cms/edit.html.erb +++ b/app/views/cms/edit.html.erb @@ -5,8 +5,6 @@ <%= hidden_field_tag("type", @type) if @type %> - <%= hidden_field_tag('parent_id', @parent_id) if @parent_id %> - <%= hidden_field_tag('back_to', @back_to) %> <%= hidden_field_tag('success_back_to', @success_back_to) %> diff --git a/app/views/content_viewer/_article_toolbar.html.erb b/app/views/content_viewer/_article_toolbar.html.erb index b364e04..ea9cfad 100644 --- a/app/views/content_viewer/_article_toolbar.html.erb +++ b/app/views/content_viewer/_article_toolbar.html.erb @@ -29,10 +29,10 @@ <%= expirable_button @page, :locale, content, url %> <% end %> - <%= modal_button(:new, label_for_new_article(@page), profile.admin_url.merge(:controller => 'cms', :action => 'new', :parent_id => (@page.folder? ? @page : (@page.parent.nil? ? nil : @page.parent)))) unless remove_content_button(:new, @page) %> + <%= modal_button(:new, label_for_new_article(@page), profile.admin_url.merge(:controller => 'cms', :action => 'new', :parent_id => (@page.folder? ? @page : @page.parent))) unless remove_content_button(:new, @page) %> <% content = content_tag('span', label_for_clone_article(@page)) %> - <% url = profile.admin_url.merge({ :controller => 'cms', :action => 'new', :id => @page.id, :clone => true, :type => @page.class }) %> + <% url = profile.admin_url.merge({ :controller => 'cms', :action => 'new', :id => @page.id, :clone => true, :parent_id => (@page.folder? ? @page : @page.parent), :type => @page.class}) %> <%= expirable_button @page, :clone, content, url %> <% end %> diff --git a/test/functional/cms_controller_test.rb b/test/functional/cms_controller_test.rb index 97df043..64bec38 100644 --- a/test/functional/cms_controller_test.rb +++ b/test/functional/cms_controller_test.rb @@ -560,8 +560,17 @@ class CmsControllerTest < ActionController::TestCase end should 'keep informed parent_id' do + fast_create(:blog, :name=>"Sample blog", :profile_id=>@profile.id) + + profile.home_page = profile.blogs.find_by_name "Sample blog" + profile.save! + get :new, :profile => @profile.identifier, :parent_id => profile.home_page.id, :type => 'TextileArticle' - assert_tag :tag => 'input', :attributes => { :name => 'parent_id', :value => profile.home_page.id } + assert_tag :tag => 'select', + :attributes => { :id => 'article_parent_id' }, + :child => { + :tag => "option", :attributes => {:value => profile.home_page.id, :selected => "selected"} + } end should 'list folders before others' do @@ -1839,14 +1848,6 @@ class CmsControllerTest < ActionController::TestCase assert_equal 'first version', assigns(:article).name end - should 'clone article with its content' do - article = profile.articles.create(:name => 'first version') - - get :new, :profile => profile.identifier, :id => article.id, :clone => true, :type => 'TinyMceArticle' - - assert_match article.name, @response.body - end - should 'save article with content from older version' do article = profile.articles.create(:name => 'first version') article.name = 'second version'; article.save @@ -1897,6 +1898,33 @@ class CmsControllerTest < ActionController::TestCase assert_equal '[{"label":"linux","value":"linux"}]', @response.body end + should 'clone an article with its parent' do + login_as(profile.identifier) + + f = Folder.new(:name => 'f') + profile.articles << f + f.save! + + post :new, :type => 'TinyMceArticle', :profile => profile.identifier, :parent_id => f.id, + :article => { :name => 'Main Article', :body => 'some content' } + + main_article = profile.articles.find_by_name('Main Article') + assert_not_nil main_article + + post :new, :type => 'TinyMceArticle', :profile => profile.identifier, :parent_id => f.id, + :id => main_article.id, :clone => true + + cloned_main_article = profile.articles.find_by_name('Main Article') + assert_not_nil cloned_main_article + + assert_equal main_article.parent_id, cloned_main_article.parent_id + + get :new, :profile => profile.identifier, :id => cloned_main_article.id, + :clone => true, :type => 'TinyMceArticle' + + assert_match main_article.body, @response.body + end + protected # FIXME this is to avoid adding an extra dependency for a proper JSON parser. diff --git a/test/unit/clone_article_test.rb b/test/unit/clone_article_test.rb new file mode 100644 index 0000000..fb0c64d --- /dev/null +++ b/test/unit/clone_article_test.rb @@ -0,0 +1,21 @@ +require_relative "../test_helper" + +class CloneArticleTest < ActiveSupport::TestCase + + should 'cloned article have its source attributes' do + community = fast_create(Community) + folder = fast_create(Folder, :profile_id => community.id) + article = fast_create(TinyMceArticle, :profile_id => community.id) + article.parent_id = folder.id + article.save! + + article.reload + cloned_article = article.copy_without_save({:parent_id => article.parent_id}) + + assert_equal folder.id, cloned_article.parent_id + assert_equal article.body , cloned_article.body + assert_equal article.name, cloned_article.name + assert_equal article.setting, cloned_article.setting + end + +end \ No newline at end of file -- libgit2 0.21.2