Commit 03861bc6550c346d986dc6b195fc4f257ded84ea
Committed by
Antonio Terceiro
1 parent
bc0cbc25
Exists in
master
and in
22 other branches
Allowing admin to edit articles before approve it
* When approving a task, some fields from published article are
displayed and can be edited
* Removed PublishedArticle
* Added migrate to copy body, article and
type from PublishedArticle's reference_article to article
(ActionItem1733)
Showing
24 changed files
with
439 additions
and
402 deletions
Show diff stats
app/models/approve_article.rb
| ... | ... | @@ -24,7 +24,7 @@ class ApproveArticle < Task |
| 24 | 24 | end |
| 25 | 25 | |
| 26 | 26 | def name |
| 27 | - data[:name] | |
| 27 | + data[:name].blank? ? article.name : data[:name] | |
| 28 | 28 | end |
| 29 | 29 | |
| 30 | 30 | def name= value |
| ... | ... | @@ -63,12 +63,24 @@ class ApproveArticle < Task |
| 63 | 63 | data[:highlighted] |
| 64 | 64 | end |
| 65 | 65 | |
| 66 | + def abstract= value | |
| 67 | + data[:abstract] = value | |
| 68 | + end | |
| 69 | + | |
| 70 | + def abstract | |
| 71 | + data[:abstract].blank? ? article.abstract : data[:abstract] | |
| 72 | + end | |
| 73 | + | |
| 74 | + def body= value | |
| 75 | + data[:body] = value | |
| 76 | + end | |
| 77 | + | |
| 78 | + def body | |
| 79 | + data[:body].blank? ? article.body : data[:body] | |
| 80 | + end | |
| 81 | + | |
| 66 | 82 | def perform |
| 67 | - if article.event? | |
| 68 | - article.copy(:name => name, :profile => target, :reference_article => article) | |
| 69 | - else | |
| 70 | - PublishedArticle.create!(:name => name, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) | |
| 71 | - end | |
| 83 | + article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) | |
| 72 | 84 | end |
| 73 | 85 | |
| 74 | 86 | def target_notification_message | ... | ... |
app/models/article.rb
| ... | ... | @@ -30,6 +30,12 @@ class Article < ActiveRecord::Base |
| 30 | 30 | |
| 31 | 31 | before_create do |article| |
| 32 | 32 | article.published_at = article.created_at if article.published_at.nil? |
| 33 | + if article.reference_article && !article.parent | |
| 34 | + parent = article.reference_article.parent | |
| 35 | + if parent && parent.blog? && article.profile.has_blog? | |
| 36 | + article.parent = article.profile.blog | |
| 37 | + end | |
| 38 | + end | |
| 33 | 39 | end |
| 34 | 40 | |
| 35 | 41 | xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' |
| ... | ... | @@ -318,6 +324,12 @@ class Article < ActiveRecord::Base |
| 318 | 324 | self.class.create(attrs) |
| 319 | 325 | end |
| 320 | 326 | |
| 327 | + def copy!(options = {}) | |
| 328 | + attrs = attributes.reject! { |key, value| ATTRIBUTES_NOT_COPIED.include?(key.to_sym) } | |
| 329 | + attrs.merge!(options) | |
| 330 | + self.class.create!(attrs) | |
| 331 | + end | |
| 332 | + | |
| 321 | 333 | ATTRIBUTES_NOT_COPIED = [ |
| 322 | 334 | :id, |
| 323 | 335 | :profile_id, |
| ... | ... | @@ -364,8 +376,11 @@ class Article < ActiveRecord::Base |
| 364 | 376 | end |
| 365 | 377 | |
| 366 | 378 | def author |
| 367 | - last_changed_by || | |
| 368 | - profile | |
| 379 | + if reference_article | |
| 380 | + reference_article.author | |
| 381 | + else | |
| 382 | + last_changed_by || profile | |
| 383 | + end | |
| 369 | 384 | end |
| 370 | 385 | |
| 371 | 386 | alias :active_record_cache_key :cache_key | ... | ... |
app/models/folder.rb
| ... | ... | @@ -46,7 +46,5 @@ class Folder < Article |
| 46 | 46 | has_many :images, :class_name => 'Article', |
| 47 | 47 | :foreign_key => 'parent_id', |
| 48 | 48 | :order => 'articles.type, articles.name', |
| 49 | - :include => :reference_article, | |
| 50 | - :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery') or (articles.type = 'PublishedArticle' and reference_articles_articles.type = 'UploadedFile' and reference_articles_articles.content_type in (?))", UploadedFile.content_types, UploadedFile.content_types] | |
| 51 | - | |
| 49 | + :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types] | |
| 52 | 50 | end | ... | ... |
app/models/published_article.rb
| ... | ... | @@ -1,44 +0,0 @@ |
| 1 | -class PublishedArticle < Article | |
| 2 | - before_create do |article| | |
| 3 | - unless article.parent | |
| 4 | - parent = article.reference_article.parent | |
| 5 | - if parent && parent.blog? && article.profile.has_blog? | |
| 6 | - article.parent = article.profile.blog | |
| 7 | - end | |
| 8 | - end | |
| 9 | - end | |
| 10 | - | |
| 11 | - def self.short_description | |
| 12 | - _('Reference to other article') | |
| 13 | - end | |
| 14 | - | |
| 15 | - def self.description | |
| 16 | - _('A reference to another article published in another profile') | |
| 17 | - end | |
| 18 | - | |
| 19 | - before_validation_on_create :update_name | |
| 20 | - def update_name | |
| 21 | - self.name = self.reference_article.name if self.name.blank? | |
| 22 | - end | |
| 23 | - | |
| 24 | - def author | |
| 25 | - if reference_article | |
| 26 | - reference_article.author | |
| 27 | - else | |
| 28 | - profile | |
| 29 | - end | |
| 30 | - end | |
| 31 | - | |
| 32 | - def to_html(options={}) | |
| 33 | - reference_article ? reference_article.to_html : ('<em>' + _('The original text was removed.') + '</em>') | |
| 34 | - end | |
| 35 | - | |
| 36 | - def abstract | |
| 37 | - reference_article && reference_article.abstract | |
| 38 | - end | |
| 39 | - | |
| 40 | - def notifiable? | |
| 41 | - true | |
| 42 | - end | |
| 43 | - | |
| 44 | -end |
app/views/content_viewer/slideshow.rhtml
| 1 | 1 | <p class='back-button' ><%= button('', _('Back to gallery'), @page.url)%></p> |
| 2 | 2 | <ul id='slideshow' > |
| 3 | 3 | <% @images.each do |img| -%> |
| 4 | - <% img = img.reference_article if img.kind_of?(PublishedArticle) -%> | |
| 5 | 4 | <% if img.image? -%> |
| 6 | 5 | <li><%= image_tag(url_for(img.public_filename(:display)), :title => (img.abstract.blank? ? img.name : img.abstract)) %></li> |
| 7 | 6 | <% end -%> | ... | ... |
app/views/tasks/_approve_article.rhtml
| ... | ... | @@ -27,7 +27,8 @@ |
| 27 | 27 | |
| 28 | 28 | <%= select_folder(_('Select the folder where the article must be published'), 'task', 'article_parent_id', task.target.folders) %> |
| 29 | 29 | <%= labelled_form_field( _('Highlight this article'), f.check_box(:highlighted)) %> |
| 30 | - <%= labelled_form_field _('Comment for author'), f.text_area(:closing_statment, :style => 'height:200px; width:80%;') %> | |
| 30 | + <%= labelled_form_field _('Comment for author'), f.text_field(:closing_statment, :style => 'width:80%;') %> | |
| 31 | + <%= render :partial => partial_for_class(task.article.class), :locals => { :f => f } %> | |
| 31 | 32 | |
| 32 | 33 | </div> |
| 33 | 34 | <% end %> | ... | ... |
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +<% button_bar do %> | |
| 2 | + <%= button :add, _("Lead"), '#', :id => "lead-button", :title => _('Used when a short version of your text is needed.'), :style => "margin-left: 0px;" %> | |
| 3 | + <%= button :add, _("Text"), '#', :id => "body-button", :style => "margin-left: 0px;" %> | |
| 4 | +<% end %> | |
| 5 | + | |
| 6 | +<div id="article-lead"> | |
| 7 | + <%= labelled_form_field(_('Lead'), f.text_area(:abstract, :cols => 64, :rows => 10)) %> | |
| 8 | +</div> | |
| 9 | +<div id="article-body-field" style="margin-top: 10px;"> | |
| 10 | + <%= labelled_form_field(_('Text'), f.text_area(:body, :cols => 64)) %> | |
| 11 | +</div> | |
| 12 | + | |
| 13 | +<%= javascript_include_tag 'article'%> | |
| 14 | + | ... | ... |
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +<%= render :file => 'shared/tiny_mce' %> | |
| 2 | + | |
| 3 | +<% button_bar do %> | |
| 4 | + <%= button :add, _("Lead"), '#', :id => "lead-button", :title => _('Used when a short version your text is needed.'), :style => "margin-left: 0px;" %> | |
| 5 | + <%= button :add, _("Text"), '#', :id => "body-button", :style => "margin-left: 0px;" %> | |
| 6 | +<% end %> | |
| 7 | + | |
| 8 | +<div id="article-lead"> | |
| 9 | + <%= labelled_form_field(_('Lead'), f.text_area(:abstract, :style => 'width: 100%; height: 300px;')) %> | |
| 10 | +</div> | |
| 11 | +<div id="article-body-field" style="margin-top: 10px;"> | |
| 12 | + <%= labelled_form_field(_('Text'), f.text_area(:body, :style => 'width:100%')) %> | |
| 13 | +</div> | |
| 14 | + | |
| 15 | +<%= javascript_include_tag 'article' %> | ... | ... |
| ... | ... | @@ -0,0 +1,9 @@ |
| 1 | +<% button_bar do %> | |
| 2 | + <%= button :add, _("Description"), '#', :id => "lead-button", :title => _('Used when a short version your text is needed.') %> | |
| 3 | +<% end %> | |
| 4 | + | |
| 5 | +<div id="article-lead"> | |
| 6 | + <%= labelled_form_field(_('Description'), text_area(:article, :abstract, :rows => 3, :cols => 64)) %> | |
| 7 | +</div> | |
| 8 | + | |
| 9 | +<%= javascript_include_tag 'article' %> | ... | ... |
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +class RemovePublishedArticles < ActiveRecord::Migration | |
| 2 | + def self.up | |
| 3 | + select_all("SELECT * from articles WHERE type = 'PublishedArticle'").each do |published| | |
| 4 | + reference = Article.exists?(published['reference_article_id']) ? Article.find(published['reference_article_id']) : nil | |
| 5 | + if reference | |
| 6 | + execute("UPDATE articles SET type = '#{reference.type}', abstract = '#{reference.abstract}', body = '#{reference.body}' WHERE articles.id = #{published['id']}") | |
| 7 | + else | |
| 8 | + execute("DELETE from articles where articles.id = #{published['id']}") | |
| 9 | + end | |
| 10 | + end | |
| 11 | + end | |
| 12 | + | |
| 13 | + def self.down | |
| 14 | + say 'Nothing to do' | |
| 15 | + end | |
| 16 | +end | ... | ... |
db/schema.rb
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | # |
| 10 | 10 | # It's strongly recommended to check this file into your version control system. |
| 11 | 11 | |
| 12 | -ActiveRecord::Schema.define(:version => 20100928000952) do | |
| 12 | +ActiveRecord::Schema.define(:version => 20101202205446) do | |
| 13 | 13 | |
| 14 | 14 | create_table "action_tracker", :force => true do |t| |
| 15 | 15 | t.integer "user_id" | ... | ... |
| ... | ... | @@ -0,0 +1,34 @@ |
| 1 | +Feature: approve article | |
| 2 | + As a community admin | |
| 3 | + I want to approve an article | |
| 4 | + In order to share it with other users | |
| 5 | + | |
| 6 | + Background: | |
| 7 | + Given the following users | |
| 8 | + | login | name | | |
| 9 | + | joaosilva | Joao Silva | | |
| 10 | + | mariasilva | Maria Silva | | |
| 11 | + And the following articles | |
| 12 | + | owner | name | body | homepage | | |
| 13 | + | mariasilva | Sample Article | This is an article | true | | |
| 14 | + And the following communities | |
| 15 | + | identifier | name | | |
| 16 | + | sample-community | Sample Community | | |
| 17 | + And the articles of "Sample Community" are moderated | |
| 18 | + And "Maria Silva" is a member of "Sample Community" | |
| 19 | + And "Joao Silva" is admin of "Sample Community" | |
| 20 | + | |
| 21 | + Scenario: edit an article before approval | |
| 22 | + Given I am logged in as "mariasilva" | |
| 23 | + And I am on Maria Silva's homepage | |
| 24 | + And I follow "Spread" | |
| 25 | + And I check "Sample Community" | |
| 26 | + And I press "Spread this" | |
| 27 | + When I am logged in as "joaosilva" | |
| 28 | + And I go to Sample Community's control panel | |
| 29 | + And I follow "Process requests" | |
| 30 | + And I fill in "Text" with "This is an article edited" | |
| 31 | + And I press "Ok!" | |
| 32 | + And I go to Sample Community's sitemap | |
| 33 | + When I follow "Sample Article" | |
| 34 | + Then I should see "This is an article edited" | ... | ... |
features/step_definitions/noosfero_steps.rb
| ... | ... | @@ -301,3 +301,9 @@ Given /^the profile "(.+)" has no blocks$/ do |profile| |
| 301 | 301 | box.blocks.destroy_all |
| 302 | 302 | end |
| 303 | 303 | end |
| 304 | + | |
| 305 | +Given /^the articles of "(.+)" are moderated$/ do |organization| | |
| 306 | + organization = Organization.find_by_name(organization) | |
| 307 | + organization.moderated_articles = true | |
| 308 | + organization.save | |
| 309 | +end | ... | ... |
public/javascripts/article.js
public/stylesheets/application.css
test/functional/cms_controller_test.rb
| ... | ... | @@ -677,10 +677,10 @@ class CmsControllerTest < Test::Unit::TestCase |
| 677 | 677 | should 'publish the article in the selected community if community is not moderated' do |
| 678 | 678 | c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => false) |
| 679 | 679 | c.affiliate(profile, Profile::Roles.all_roles(c.environment.id)) |
| 680 | - a = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') | |
| 680 | + article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') | |
| 681 | 681 | |
| 682 | - assert_difference PublishedArticle, :count do | |
| 683 | - post :publish, :profile => profile.identifier, :id => a.id, :marked_groups => {c.id.to_s => {:name => 'bli', :group_id => c.id.to_s}} | |
| 682 | + assert_difference article.class, :count do | |
| 683 | + post :publish, :profile => profile.identifier, :id => article.id, :marked_groups => {c.id.to_s => {:name => 'bli', :group_id => c.id.to_s}} | |
| 684 | 684 | assert_equal [{'group' => c, 'name' => 'bli'}], assigns(:marked_groups) |
| 685 | 685 | end |
| 686 | 686 | end |
| ... | ... | @@ -710,7 +710,7 @@ class CmsControllerTest < Test::Unit::TestCase |
| 710 | 710 | Environment.any_instance.stubs(:portal_community).returns(portal_community) |
| 711 | 711 | article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') |
| 712 | 712 | |
| 713 | - assert_difference PublishedArticle, :count do | |
| 713 | + assert_difference article.class, :count do | |
| 714 | 714 | post :publish_on_portal_community, :profile => profile.identifier, :id => article.id, :name => article.name |
| 715 | 715 | end |
| 716 | 716 | end |
| ... | ... | @@ -720,7 +720,7 @@ class CmsControllerTest < Test::Unit::TestCase |
| 720 | 720 | c.affiliate(profile, Profile::Roles.all_roles(c.environment.id)) |
| 721 | 721 | a = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') |
| 722 | 722 | |
| 723 | - assert_no_difference PublishedArticle, :count do | |
| 723 | + assert_no_difference a.class, :count do | |
| 724 | 724 | assert_difference ApproveArticle, :count do |
| 725 | 725 | assert_difference c.tasks, :count do |
| 726 | 726 | post :publish, :profile => profile.identifier, :id => a.id, :marked_groups => {c.id.to_s => {:name => 'bli', :group_id => c.id.to_s}} |
| ... | ... | @@ -737,7 +737,7 @@ class CmsControllerTest < Test::Unit::TestCase |
| 737 | 737 | Environment.any_instance.stubs(:portal_community).returns(portal_community) |
| 738 | 738 | article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') |
| 739 | 739 | |
| 740 | - assert_no_difference PublishedArticle, :count do | |
| 740 | + assert_no_difference article.class, :count do | |
| 741 | 741 | assert_difference ApproveArticle, :count do |
| 742 | 742 | assert_difference portal_community.tasks, :count do |
| 743 | 743 | post :publish_on_portal_community, :profile => profile.identifier, :id => article.id, :name => article.name | ... | ... |
test/functional/tasks_controller_test.rb
| ... | ... | @@ -153,8 +153,7 @@ class TasksControllerTest < Test::Unit::TestCase |
| 153 | 153 | assert_equal f, assigns(:ticket).target |
| 154 | 154 | end |
| 155 | 155 | |
| 156 | - should 'create published article after finish approve article task' do | |
| 157 | - PublishedArticle.destroy_all | |
| 156 | + should 'create article with reference_article after finish approve article task' do | |
| 158 | 157 | c = fast_create(Community) |
| 159 | 158 | c.update_attributes(:moderated_articles => false) |
| 160 | 159 | @controller.stubs(:profile).returns(c) |
| ... | ... | @@ -162,12 +161,11 @@ class TasksControllerTest < Test::Unit::TestCase |
| 162 | 161 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 163 | 162 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) |
| 164 | 163 | |
| 165 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new_name'} | |
| 166 | - assert_equal article, PublishedArticle.find(:first).reference_article | |
| 164 | + post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name'} | |
| 165 | + assert_equal article, c.articles.find_by_name('new name').reference_article | |
| 167 | 166 | end |
| 168 | 167 | |
| 169 | 168 | should 'create published article in folder after finish approve article task' do |
| 170 | - PublishedArticle.destroy_all | |
| 171 | 169 | c = fast_create(Community) |
| 172 | 170 | c.update_attributes(:moderated_articles => false) |
| 173 | 171 | @controller.stubs(:profile).returns(c) |
| ... | ... | @@ -176,35 +174,33 @@ class TasksControllerTest < Test::Unit::TestCase |
| 176 | 174 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 177 | 175 | t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) |
| 178 | 176 | |
| 179 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new_name', :article_parent_id => folder.id} | |
| 180 | - assert_equal folder, PublishedArticle.find(:first).parent | |
| 177 | + post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => folder.id} | |
| 178 | + assert_equal folder, c.articles.find_by_name('new name').parent | |
| 181 | 179 | end |
| 182 | 180 | |
| 183 | 181 | should 'be highlighted if asked when approving a published article' do |
| 184 | - PublishedArticle.destroy_all | |
| 185 | 182 | c = fast_create(Community) |
| 186 | 183 | c.update_attributes(:moderated_articles => false) |
| 187 | 184 | @controller.stubs(:profile).returns(c) |
| 188 | 185 | folder = c.articles.create!(:name => 'test folder', :type => 'Folder') |
| 189 | 186 | c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) |
| 190 | 187 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 191 | - t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) | |
| 188 | + t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) | |
| 192 | 189 | |
| 193 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new_name', :article_parent_id => folder.id, :highlighted => true} | |
| 194 | - assert_equal true, PublishedArticle.find(:first).highlighted | |
| 190 | + post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => folder.id, :highlighted => true} | |
| 191 | + assert_equal true, c.articles.find_by_name('new name').highlighted | |
| 195 | 192 | end |
| 196 | 193 | |
| 197 | - should 'create published article after choosing root folder on approve article task' do | |
| 198 | - PublishedArticle.destroy_all | |
| 194 | + should 'create article of same class after choosing root folder on approve article task' do | |
| 199 | 195 | c = fast_create(Community) |
| 200 | 196 | c.update_attributes(:moderated_articles => false) |
| 201 | 197 | @controller.stubs(:profile).returns(c) |
| 202 | 198 | c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) |
| 203 | 199 | article = profile.articles.create!(:name => 'something interesting', :body => 'ruby on rails') |
| 204 | - t = ApproveArticle.create!(:name => 'test name', :article => article, :target => c, :requestor => profile) | |
| 200 | + t = ApproveArticle.create!(:article => article, :target => c, :requestor => profile) | |
| 205 | 201 | |
| 206 | - post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new_name', :article_parent_id => ""} | |
| 207 | - assert_not_nil PublishedArticle.find(:first) | |
| 202 | + post :close, :decision => 'finish', :id => t.id, :task => { :name => 'new name', :article_parent_id => ""} | |
| 203 | + assert_equal article.class, c.articles.find_by_name('new name').class | |
| 208 | 204 | end |
| 209 | 205 | |
| 210 | 206 | should 'handle blank names for published articles' do |
| ... | ... | @@ -220,10 +216,10 @@ class TasksControllerTest < Test::Unit::TestCase |
| 220 | 216 | a = ApproveArticle.create!(:article => article, :target => c, :requestor => person) |
| 221 | 217 | assert_includes c.tasks, a |
| 222 | 218 | |
| 223 | - assert_difference PublishedArticle, :count do | |
| 219 | + assert_difference article.class, :count do | |
| 224 | 220 | post :close, {"commit"=>"Ok!", "id"=> a.id.to_s, "task"=>{"name"=>"", "closing_statment"=>"", "highlighted"=>"0", "article_parent_id"=>c_blog2.id.to_s}, "decision"=>"finish"} |
| 225 | 221 | end |
| 226 | - assert p_article = PublishedArticle.find_by_reference_article_id(article.id) | |
| 222 | + assert p_article = article.class.find_by_reference_article_id(article.id) | |
| 227 | 223 | assert_includes c_blog2.children(true), p_article |
| 228 | 224 | end |
| 229 | 225 | ... | ... |
test/unit/approve_article_test.rb
| ... | ... | @@ -7,24 +7,28 @@ class ApproveArticleTest < ActiveSupport::TestCase |
| 7 | 7 | ActionMailer::Base.perform_deliveries = true |
| 8 | 8 | ActionMailer::Base.deliveries = [] |
| 9 | 9 | @profile = create_user('test_user').person |
| 10 | + @article = fast_create(TextileArticle, :profile_id => @profile.id, :name => 'test name', :abstract => 'Lead of article', :body => 'This is my article') | |
| 11 | + @community = fast_create(Community) | |
| 10 | 12 | end |
| 11 | - attr_reader :profile | |
| 13 | + attr_reader :profile, :article, :community | |
| 12 | 14 | |
| 13 | 15 | should 'have name, reference article and profile' do |
| 14 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 15 | - | |
| 16 | - a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) | |
| 16 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 17 | 17 | |
| 18 | - assert_equal 'test name', a.name | |
| 19 | 18 | assert_equal article, a.article |
| 20 | - assert_equal profile, a.target | |
| 19 | + assert_equal community, a.target | |
| 21 | 20 | end |
| 22 | 21 | |
| 23 | - should 'create published article when finished' do | |
| 24 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 25 | - a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) | |
| 22 | + should 'have abstract and body' do | |
| 23 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 24 | + | |
| 25 | + assert_equal ['Lead of article', 'This is my article'], [a.abstract, a.body] | |
| 26 | + end | |
| 27 | + | |
| 28 | + should 'create an article with the same class as original when finished' do | |
| 29 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 26 | 30 | |
| 27 | - assert_difference PublishedArticle, :count do | |
| 31 | + assert_difference article.class, :count do | |
| 28 | 32 | a.finish |
| 29 | 33 | end |
| 30 | 34 | end |
| ... | ... | @@ -39,7 +43,6 @@ class ApproveArticleTest < ActiveSupport::TestCase |
| 39 | 43 | end |
| 40 | 44 | |
| 41 | 45 | should 'have parent if defined' do |
| 42 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 43 | 46 | folder = profile.articles.create!(:name => 'test folder', :type => 'Folder') |
| 44 | 47 | |
| 45 | 48 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile, :article_parent_id => folder.id) |
| ... | ... | @@ -48,16 +51,12 @@ class ApproveArticleTest < ActiveSupport::TestCase |
| 48 | 51 | end |
| 49 | 52 | |
| 50 | 53 | should 'not have parent if not defined' do |
| 51 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 52 | - | |
| 53 | 54 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) |
| 54 | 55 | |
| 55 | 56 | assert_nil a.article_parent |
| 56 | 57 | end |
| 57 | 58 | |
| 58 | 59 | should 'alert when reference article is removed' do |
| 59 | - article = profile.articles.create!(:name => 'test article') | |
| 60 | - | |
| 61 | 60 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => profile) |
| 62 | 61 | |
| 63 | 62 | article.destroy |
| ... | ... | @@ -67,44 +66,269 @@ class ApproveArticleTest < ActiveSupport::TestCase |
| 67 | 66 | end |
| 68 | 67 | |
| 69 | 68 | should 'preserve article_parent' do |
| 70 | - article = profile.articles.create!(:name => 'test article') | |
| 71 | 69 | a = ApproveArticle.new(:article_parent => article) |
| 72 | 70 | |
| 73 | 71 | assert_equal article, a.article_parent |
| 74 | 72 | end |
| 75 | 73 | |
| 76 | 74 | should 'handle blank names' do |
| 77 | - article = profile.articles.create!(:name => 'test article') | |
| 78 | - community = fast_create(Community, :name => 'test comm') | |
| 79 | 75 | a = ApproveArticle.create!(:name => '', :article => article, :target => community, :requestor => profile) |
| 80 | 76 | |
| 81 | - assert_difference PublishedArticle, :count do | |
| 77 | + assert_difference article.class, :count do | |
| 82 | 78 | a.finish |
| 83 | 79 | end |
| 84 | 80 | end |
| 85 | 81 | |
| 86 | 82 | should 'notify target if group is moderated' do |
| 87 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 88 | - community = Community.create!(:name => 'test comm', :moderated_articles => true) | |
| 83 | + community.moderated_articles = true | |
| 84 | + community.save | |
| 85 | + | |
| 89 | 86 | a = ApproveArticle.create!(:name => '', :article => article, :target => community, :requestor => profile) |
| 90 | 87 | assert !ActionMailer::Base.deliveries.empty? |
| 91 | 88 | end |
| 92 | 89 | |
| 93 | 90 | should 'not notify target if group is not moderated' do |
| 94 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article') | |
| 95 | - community = Community.create!(:name => 'test comm', :moderated_articles => false) | |
| 91 | + community.moderated_articles = false | |
| 92 | + community.save | |
| 93 | + | |
| 96 | 94 | a = ApproveArticle.create!(:name => '', :article => article, :target => community, :requestor => profile) |
| 97 | 95 | assert ActionMailer::Base.deliveries.empty? |
| 98 | 96 | end |
| 99 | 97 | |
| 100 | 98 | should 'copy the source from the original article' do |
| 101 | - article = fast_create(TextArticle, :profile_id => profile.id, :name => 'test article', :source => "sample-feed.com") | |
| 102 | - community = fast_create(Community, :name => 'test comm') | |
| 99 | + article.source = 'sample-feed.com' | |
| 100 | + article.save | |
| 101 | + | |
| 102 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 103 | + a.finish | |
| 104 | + | |
| 105 | + assert_equal article.class.last.source, article.source | |
| 106 | + end | |
| 107 | + | |
| 108 | + should 'have a reference article and profile on published article' do | |
| 109 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 110 | + a.finish | |
| 111 | + | |
| 112 | + published = article.class.last | |
| 113 | + assert_equal [article, community], [published.reference_article, published.profile] | |
| 114 | + end | |
| 115 | + | |
| 116 | + should 'copy name from original article' do | |
| 117 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 118 | + a.finish | |
| 103 | 119 | |
| 120 | + assert_equal 'test name', article.class.last.name | |
| 121 | + end | |
| 122 | + | |
| 123 | + should 'be able to edit name of generated article' do | |
| 124 | + a = ApproveArticle.create!(:name => 'Other name', :article => article, :target => community, :requestor => profile) | |
| 125 | + a.abstract = 'Abstract edited';a.save | |
| 126 | + a.finish | |
| 127 | + | |
| 128 | + assert_equal 'Other name', article.class.last.name | |
| 129 | + end | |
| 130 | + | |
| 131 | + should 'copy abstract from original article' do | |
| 104 | 132 | a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) |
| 105 | 133 | a.finish |
| 106 | 134 | |
| 107 | - assert_equal PublishedArticle.last.source, article.source | |
| 135 | + assert_equal 'Lead of article', article.class.last.abstract | |
| 108 | 136 | end |
| 109 | 137 | |
| 138 | + should 'be able to edit abstract of generated article' do | |
| 139 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 140 | + a.abstract = 'Abstract edited';a.save | |
| 141 | + a.finish | |
| 142 | + | |
| 143 | + assert_equal 'Abstract edited', article.class.last.abstract | |
| 144 | + end | |
| 145 | + | |
| 146 | + should 'copy body from original article' do | |
| 147 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 148 | + a.finish | |
| 149 | + | |
| 150 | + assert_equal 'This is my article', article.class.last.body | |
| 151 | + end | |
| 152 | + | |
| 153 | + should 'be able to edit body of generated article' do | |
| 154 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 155 | + a.body = 'Body edited';a.save | |
| 156 | + a.finish | |
| 157 | + | |
| 158 | + assert_equal 'Body edited', article.class.last.body | |
| 159 | + end | |
| 160 | + | |
| 161 | + should 'not be created in blog if community does not have a blog' do | |
| 162 | + profile_blog = fast_create(Blog, :profile_id => profile.id) | |
| 163 | + article.parent = profile_blog | |
| 164 | + article.save | |
| 165 | + | |
| 166 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 167 | + a.finish | |
| 168 | + | |
| 169 | + assert !community.has_blog? | |
| 170 | + assert_nil article.class.last.parent | |
| 171 | + end | |
| 172 | + | |
| 173 | + should 'be created in community blog if came from a blog' do | |
| 174 | + profile_blog = fast_create(Blog, :profile_id => profile.id) | |
| 175 | + article.parent = profile_blog | |
| 176 | + article.save | |
| 177 | + | |
| 178 | + community.articles << Blog.new(:profile => community) | |
| 179 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 180 | + a.finish | |
| 181 | + | |
| 182 | + assert_equal community.blog, article.class.last.parent | |
| 183 | + end | |
| 184 | + | |
| 185 | + should 'not be created in community blog if did not come from a blog' do | |
| 186 | + profile_folder = fast_create(Folder, :profile_id => profile.id) | |
| 187 | + article.parent = profile_folder | |
| 188 | + article.save | |
| 189 | + | |
| 190 | + blog = fast_create(Blog, :profile_id => community.id) | |
| 191 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 192 | + a.finish | |
| 193 | + | |
| 194 | + assert_nil article.class.last.parent | |
| 195 | + end | |
| 196 | + | |
| 197 | + should 'overwrite blog if parent was choosen on published' do | |
| 198 | + profile_blog = fast_create(Blog, :profile_id => profile.id) | |
| 199 | + article.parent = profile_blog | |
| 200 | + article.save | |
| 201 | + | |
| 202 | + community.articles << Blog.new(:profile => community) | |
| 203 | + community_folder = fast_create(Folder, :profile_id => profile.id) | |
| 204 | + | |
| 205 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile, :article_parent => community_folder) | |
| 206 | + a.finish | |
| 207 | + | |
| 208 | + assert_equal community_folder, article.class.last.parent | |
| 209 | + end | |
| 210 | + | |
| 211 | + should 'use author from original article on published' do | |
| 212 | + article.stubs(:last_changed_by_id).returns(profile) | |
| 213 | + | |
| 214 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => community, :requestor => profile) | |
| 215 | + a.finish | |
| 216 | + | |
| 217 | + assert_equal profile, article.class.last.author | |
| 218 | + end | |
| 219 | + | |
| 220 | + | |
| 221 | + should 'use owning profile as author when there is no referenced article' do | |
| 222 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 223 | + a.finish | |
| 224 | + | |
| 225 | + article.destroy | |
| 226 | + | |
| 227 | + assert_equal community, article.class.last.author | |
| 228 | + end | |
| 229 | + | |
| 230 | + should 'the published article have parent if defined' do | |
| 231 | + folder = fast_create(Folder, :profile_id => community.id) | |
| 232 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile, :article_parent => folder) | |
| 233 | + a.finish | |
| 234 | + | |
| 235 | + assert_equal folder, article.class.last.parent | |
| 236 | + end | |
| 237 | + | |
| 238 | + should 'copy to_html from reference_article' do | |
| 239 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 240 | + a.finish | |
| 241 | + | |
| 242 | + assert_equal article.to_html, article.class.last.to_html | |
| 243 | + end | |
| 244 | + | |
| 245 | + should 'notify activity on creating published' do | |
| 246 | + ActionTracker::Record.delete_all | |
| 247 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 248 | + a.finish | |
| 249 | + | |
| 250 | + assert_equal 1, ActionTracker::Record.count | |
| 251 | + end | |
| 252 | + | |
| 253 | + should 'notify with different trackers activity create with different targets' do | |
| 254 | + ActionTracker::Record.delete_all | |
| 255 | + | |
| 256 | + article = fast_create(TextileArticle) | |
| 257 | + a = ApproveArticle.create!(:name => 'bar', :article => article, :target => community, :requestor => profile) | |
| 258 | + a.finish | |
| 259 | + | |
| 260 | + article = fast_create(TextileArticle) | |
| 261 | + a = ApproveArticle.create!(:name => 'another bar', :article => article, :target => community, :requestor => profile) | |
| 262 | + a.finish | |
| 263 | + assert_equal 1, ActionTracker::Record.count | |
| 264 | + | |
| 265 | + article = fast_create(TextileArticle) | |
| 266 | + other_community = fast_create(Community) | |
| 267 | + a = ApproveArticle.create!(:name => 'another bar', :article => article, :target => other_community, :requestor => profile) | |
| 268 | + a.finish | |
| 269 | + assert_equal 2, ActionTracker::Record.count | |
| 270 | + end | |
| 271 | + | |
| 272 | + should 'notify activity on update' do | |
| 273 | + ActionTracker::Record.delete_all | |
| 274 | + a = ApproveArticle.create!(:name => 'bar', :article => article, :target => community, :requestor => profile) | |
| 275 | + a.finish | |
| 276 | + assert_equal 1, ActionTracker::Record.count | |
| 277 | + | |
| 278 | + published = article.class.last | |
| 279 | + published.name = 'foo' | |
| 280 | + published.save! | |
| 281 | + assert_equal 2, ActionTracker::Record.count | |
| 282 | + end | |
| 283 | + | |
| 284 | + should 'notify with different trackers activity update with different targets' do | |
| 285 | + ActionTracker::Record.delete_all | |
| 286 | + article1 = fast_create(TextileArticle) | |
| 287 | + a = ApproveArticle.create!(:name => 'bar', :article => article1, :target => community, :requestor => profile) | |
| 288 | + a.finish | |
| 289 | + | |
| 290 | + article2 = fast_create(TinyMceArticle) | |
| 291 | + other_community = fast_create(Community) | |
| 292 | + a = ApproveArticle.create!(:name => 'another bar', :article => article2, :target => other_community, :requestor => profile) | |
| 293 | + a.finish | |
| 294 | + assert_equal 2, ActionTracker::Record.count | |
| 295 | + | |
| 296 | + published = article1.class.last | |
| 297 | + published.name = 'foo';published.save! | |
| 298 | + assert_equal 3, ActionTracker::Record.count | |
| 299 | + | |
| 300 | + published = article2.class.last | |
| 301 | + published.name = 'another foo';published.save! | |
| 302 | + assert_equal 4, ActionTracker::Record.count | |
| 303 | + end | |
| 304 | + | |
| 305 | + should "the tracker action target be defined as Community by custom_target method on articles'creation in communities" do | |
| 306 | + ActionTracker::Record.delete_all | |
| 307 | + person = fast_create(Person) | |
| 308 | + community.add_member(person) | |
| 309 | + | |
| 310 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 311 | + a.finish | |
| 312 | + | |
| 313 | + assert_equal Community, ActionTracker::Record.last.target.class | |
| 314 | + end | |
| 315 | + | |
| 316 | + should "the tracker action target be defined as person by custom_target method on articles'creation in profile" do | |
| 317 | + ActionTracker::Record.delete_all | |
| 318 | + person = fast_create(Person) | |
| 319 | + | |
| 320 | + a = ApproveArticle.create!(:article => article, :target => person, :requestor => profile) | |
| 321 | + a.finish | |
| 322 | + | |
| 323 | + assert_equal Person, ActionTracker::Record.last.target.class | |
| 324 | + end | |
| 325 | + | |
| 326 | + should "have the same is_trackable method as original article" do | |
| 327 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 328 | + a.finish | |
| 329 | + | |
| 330 | + assert_equal article.is_trackable?, article.class.last.is_trackable? | |
| 331 | + end | |
| 332 | + | |
| 333 | + | |
| 110 | 334 | end | ... | ... |
test/unit/article_test.rb
| ... | ... | @@ -866,13 +866,16 @@ class ArticleTest < Test::Unit::TestCase |
| 866 | 866 | end |
| 867 | 867 | |
| 868 | 868 | should 'not doubly escape quotes in the name' do |
| 869 | - profile = fast_create(Profile) | |
| 870 | - a = fast_create(Article, :profile_id => profile.id) | |
| 871 | - p = PublishedArticle.create!(:reference_article => a, :profile => fast_create(Community)) | |
| 872 | - | |
| 873 | - p.name = 'title with "quotes"' | |
| 874 | - p.save | |
| 875 | - assert_equal 'title with "quotes"', p.name | |
| 869 | + person = fast_create(Person) | |
| 870 | + community = fast_create(Community) | |
| 871 | + article = fast_create(Article, :name => 'article name', :profile_id => person.id) | |
| 872 | + a = ApproveArticle.create!(:article => article, :target => community, :requestor => profile) | |
| 873 | + a.finish | |
| 874 | + | |
| 875 | + published = community.articles.find_by_name('article name') | |
| 876 | + published.name = 'title with "quotes"' | |
| 877 | + published.save | |
| 878 | + assert_equal 'title with "quotes"', published.name | |
| 876 | 879 | end |
| 877 | 880 | |
| 878 | 881 | should 'remove script tags from name' do | ... | ... |
test/unit/folder_test.rb
| ... | ... | @@ -89,14 +89,15 @@ class FolderTest < ActiveSupport::TestCase |
| 89 | 89 | end |
| 90 | 90 | |
| 91 | 91 | should 'return published images as images' do |
| 92 | - p = create_user('test_user').person | |
| 93 | - i = UploadedFile.create!(:profile => p, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 92 | + person = create_user('test_user').person | |
| 93 | + image = UploadedFile.create!(:profile => person, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | |
| 94 | 94 | |
| 95 | - c = fast_create(Community) | |
| 96 | - folder = fast_create(Folder, :profile_id => c.id) | |
| 97 | - pi = PublishedArticle.create!(:profile => c, :reference_article => i, :parent => folder) | |
| 95 | + community = fast_create(Community) | |
| 96 | + folder = fast_create(Folder, :profile_id => community.id) | |
| 97 | + a = ApproveArticle.create!(:article => image, :target => community, :requestor => person, :article_parent => folder) | |
| 98 | + a.finish | |
| 98 | 99 | |
| 99 | - assert_includes folder.images(true), pi | |
| 100 | + assert_includes folder.images(true), community.articles.find_by_name('rails.png') | |
| 100 | 101 | end |
| 101 | 102 | |
| 102 | 103 | should 'not let pass javascript in the body' do | ... | ... |
test/unit/gallery_test.rb
| ... | ... | @@ -98,9 +98,11 @@ class GalleryTest < ActiveSupport::TestCase |
| 98 | 98 | |
| 99 | 99 | c = fast_create(Community) |
| 100 | 100 | gallery = fast_create(Gallery, :profile_id => c.id) |
| 101 | - pi = PublishedArticle.create!(:profile => c, :reference_article => i, :parent => gallery) | |
| 102 | 101 | |
| 103 | - assert_includes gallery.images(true), pi | |
| 102 | + a = ApproveArticle.create!(:article => i, :target => c, :requestor => p, :article_parent => gallery) | |
| 103 | + a.finish | |
| 104 | + | |
| 105 | + assert_includes gallery.images(true), c.articles.find_by_name('rails.png') | |
| 104 | 106 | end |
| 105 | 107 | |
| 106 | 108 | should 'not let pass javascript in the body' do | ... | ... |
test/unit/published_article_test.rb
| ... | ... | @@ -1,272 +0,0 @@ |
| 1 | -require File.dirname(__FILE__) + '/../test_helper' | |
| 2 | - | |
| 3 | -class PublishedArticleTest < ActiveSupport::TestCase | |
| 4 | - | |
| 5 | - def setup | |
| 6 | - @profile = create_user('test_user').person | |
| 7 | - @article = fast_create(Article, :profile_id => @profile.id, :name => 'test_article', :body => 'some trivial body') | |
| 8 | - end | |
| 9 | - | |
| 10 | - should 'have a reference article and profile' do | |
| 11 | - prof = fast_create(Community) | |
| 12 | - p = PublishedArticle.create(:reference_article => @article, :profile => prof) | |
| 13 | - | |
| 14 | - assert p | |
| 15 | - assert_equal prof, p.profile | |
| 16 | - assert_equal @article, p.reference_article | |
| 17 | - end | |
| 18 | - | |
| 19 | - should 'have a different name than reference article' do | |
| 20 | - prof = fast_create(Community) | |
| 21 | - p = PublishedArticle.create(:reference_article => @article, :profile => prof, :name => 'other title') | |
| 22 | - | |
| 23 | - assert_equal 'other title', p.name | |
| 24 | - assert_not_equal @article.name, p.name | |
| 25 | - | |
| 26 | - end | |
| 27 | - | |
| 28 | - should 'use name of reference article a default name' do | |
| 29 | - prof = fast_create(Community) | |
| 30 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof) | |
| 31 | - | |
| 32 | - assert_equal @article.name, p.name | |
| 33 | - end | |
| 34 | - | |
| 35 | - should 'not be created in blog if community does not have a blog' do | |
| 36 | - parent = mock | |
| 37 | - @article.expects(:parent).returns(parent) | |
| 38 | - parent.expects(:blog?).returns(true) | |
| 39 | - prof = fast_create(Community) | |
| 40 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof) | |
| 41 | - | |
| 42 | - assert !prof.has_blog? | |
| 43 | - assert_nil p.parent | |
| 44 | - end | |
| 45 | - | |
| 46 | - should 'be created in community blog if came from a blog' do | |
| 47 | - parent = mock | |
| 48 | - @article.expects(:parent).returns(parent) | |
| 49 | - parent.expects(:blog?).returns(true) | |
| 50 | - prof = fast_create(Community) | |
| 51 | - prof.articles << Blog.new(:profile => prof, :name => 'Blog test') | |
| 52 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof) | |
| 53 | - | |
| 54 | - assert_equal p.parent, prof.blog | |
| 55 | - end | |
| 56 | - | |
| 57 | - should 'not be created in community blog if did not come from a blog' do | |
| 58 | - parent = mock | |
| 59 | - @article.expects(:parent).returns(parent) | |
| 60 | - parent.expects(:blog?).returns(false) | |
| 61 | - prof = fast_create(Community) | |
| 62 | - blog = fast_create(Blog, :profile_id => prof.id, :name => 'Blog test') | |
| 63 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof) | |
| 64 | - | |
| 65 | - assert_nil p.parent | |
| 66 | - end | |
| 67 | - | |
| 68 | - should "use author of original article as its author" do | |
| 69 | - original = Article.new(:last_changed_by => @profile) | |
| 70 | - community = Community.new | |
| 71 | - published = PublishedArticle.new(:reference_article => original, :profile => community) | |
| 72 | - assert_equal @profile, published.author | |
| 73 | - end | |
| 74 | - | |
| 75 | - should 'use owning profile as author when there is no referenced article yet' do | |
| 76 | - assert_equal @profile, PublishedArticle.new(:profile => @profile).author | |
| 77 | - end | |
| 78 | - | |
| 79 | - should 'have parent if defined' do | |
| 80 | - prof = fast_create(Community) | |
| 81 | - folder = fast_create(Folder, :name => 'folder test', :profile_id => prof.id) | |
| 82 | - p = PublishedArticle.create(:reference_article => @article, :profile => prof, :parent => folder) | |
| 83 | - | |
| 84 | - assert p | |
| 85 | - assert_equal folder, p.parent | |
| 86 | - end | |
| 87 | - | |
| 88 | - should 'use to_html from reference_article' do | |
| 89 | - prof = fast_create(Community) | |
| 90 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof) | |
| 91 | - | |
| 92 | - assert_equal @article.to_html, p.to_html | |
| 93 | - end | |
| 94 | - | |
| 95 | - should 'use to_html from reference_article when is Textile' do | |
| 96 | - prof = fast_create(Community) | |
| 97 | - textile_article = fast_create(TextileArticle, :name => 'textile_article', :body => '*my text*', :profile_id => prof.id) | |
| 98 | - p = PublishedArticle.create!(:reference_article => textile_article, :profile => prof) | |
| 99 | - | |
| 100 | - assert_equal textile_article.to_html, p.to_html | |
| 101 | - end | |
| 102 | - | |
| 103 | - should 'display message when reference_article does not exist' do | |
| 104 | - prof = fast_create(Community) | |
| 105 | - textile_article = fast_create(TextileArticle, :name => 'textile_article', :body => '*my text*', :profile_id => prof.id) | |
| 106 | - p = PublishedArticle.create!(:reference_article => textile_article, :profile => prof) | |
| 107 | - textile_article.destroy | |
| 108 | - p.reload | |
| 109 | - | |
| 110 | - assert_match /removed/, p.to_html | |
| 111 | - end | |
| 112 | - | |
| 113 | - should 'use abstract from referenced article' do | |
| 114 | - original = Article.new(:abstract => 'this is the abstract') | |
| 115 | - published = PublishedArticle.new | |
| 116 | - published.stubs(:reference_article).returns(original) | |
| 117 | - | |
| 118 | - assert_equal 'this is the abstract', published.abstract | |
| 119 | - end | |
| 120 | - | |
| 121 | - should 'return no abstract when reference_article does not exist' do | |
| 122 | - published = PublishedArticle.new | |
| 123 | - published.stubs(:reference_article).returns(nil) | |
| 124 | - | |
| 125 | - assert_nil published.abstract | |
| 126 | - end | |
| 127 | - | |
| 128 | - should 'specified parent overwrite blog' do | |
| 129 | - parent = mock | |
| 130 | - @article.stubs(:parent).returns(parent) | |
| 131 | - parent.stubs(:blog?).returns(true) | |
| 132 | - prof = fast_create(Community) | |
| 133 | - prof.articles << Blog.new(:profile => prof, :name => 'Blog test') | |
| 134 | - new_parent = fast_create(Folder, :profile_id => prof.id, :name => 'Folder test') | |
| 135 | - p = PublishedArticle.create!(:reference_article => @article, :profile => prof, :parent => new_parent) | |
| 136 | - | |
| 137 | - assert_equal p.parent, new_parent | |
| 138 | - end | |
| 139 | - | |
| 140 | - should 'notifiable be true' do | |
| 141 | - a = fast_create(PublishedArticle) | |
| 142 | - assert a.notifiable? | |
| 143 | - end | |
| 144 | - | |
| 145 | - should 'notify activity on create' do | |
| 146 | - ActionTracker::Record.delete_all | |
| 147 | - a = fast_create(Article) | |
| 148 | - PublishedArticle.create! :reference_article => a, :name => 'test', :profile_id => fast_create(Profile).id, :published => true | |
| 149 | - assert_equal 1, ActionTracker::Record.count | |
| 150 | - end | |
| 151 | - | |
| 152 | - should 'notify with different trackers activity create with different targets' do | |
| 153 | - ActionTracker::Record.delete_all | |
| 154 | - profile = fast_create(Profile) | |
| 155 | - a = fast_create(Article) | |
| 156 | - PublishedArticle.create! :reference_article => a, :name => 'bar', :profile_id => profile.id, :published => true | |
| 157 | - a = fast_create(Article) | |
| 158 | - PublishedArticle.create! :reference_article => a, :name => 'another bar', :profile_id => profile.id, :published => true | |
| 159 | - assert_equal 1, ActionTracker::Record.count | |
| 160 | - a = fast_create(Article) | |
| 161 | - PublishedArticle.create! :reference_article => a, :name => 'another bar', :profile_id => fast_create(Profile).id, :published => true | |
| 162 | - assert_equal 2, ActionTracker::Record.count | |
| 163 | - end | |
| 164 | - | |
| 165 | - should 'notify activity on update' do | |
| 166 | - ActionTracker::Record.delete_all | |
| 167 | - a = fast_create(Article) | |
| 168 | - a = PublishedArticle.create! :reference_article => a, :name => 'bar', :profile_id => fast_create(Profile).id, :published => true | |
| 169 | - assert_equal 1, ActionTracker::Record.count | |
| 170 | - a.name = 'foo' | |
| 171 | - a.save! | |
| 172 | - assert_equal 2, ActionTracker::Record.count | |
| 173 | - end | |
| 174 | - | |
| 175 | - should 'notify with different trackers activity update with different targets' do | |
| 176 | - ActionTracker::Record.delete_all | |
| 177 | - a = fast_create(Article) | |
| 178 | - a1 = PublishedArticle.create! :reference_article => a, :name => 'bar', :profile_id => fast_create(Profile).id, :published => true | |
| 179 | - a = fast_create(Article) | |
| 180 | - a2 = PublishedArticle.create! :reference_article => a, :name => 'another bar', :profile_id => fast_create(Profile).id, :published => true | |
| 181 | - assert_equal 2, ActionTracker::Record.count | |
| 182 | - a1.name = 'foo' | |
| 183 | - a1.save! | |
| 184 | - assert_equal 3, ActionTracker::Record.count | |
| 185 | - a2.name = 'another foo' | |
| 186 | - a2.save! | |
| 187 | - assert_equal 4, ActionTracker::Record.count | |
| 188 | - end | |
| 189 | - | |
| 190 | - should 'notify activity on destroy' do | |
| 191 | - ActionTracker::Record.delete_all | |
| 192 | - a = fast_create(Article) | |
| 193 | - a = PublishedArticle.create! :reference_article => a, :name => 'bar', :profile_id => fast_create(Profile).id, :published => true | |
| 194 | - assert_equal 1, ActionTracker::Record.count | |
| 195 | - a.destroy | |
| 196 | - assert_equal 2, ActionTracker::Record.count | |
| 197 | - end | |
| 198 | - | |
| 199 | - should 'notify different activities when destroy articles with diferrents targets' do | |
| 200 | - ActionTracker::Record.delete_all | |
| 201 | - a = fast_create(Article) | |
| 202 | - a1 = PublishedArticle.create! :reference_article => a, :name => 'bar', :profile_id => fast_create(Profile).id, :published => true | |
| 203 | - a = fast_create(Article) | |
| 204 | - a2 = PublishedArticle.create! :reference_article => a, :name => 'another bar', :profile_id => fast_create(Profile).id, :published => true | |
| 205 | - assert_equal 2, ActionTracker::Record.count | |
| 206 | - a1.destroy | |
| 207 | - assert_equal 3, ActionTracker::Record.count | |
| 208 | - a2.destroy | |
| 209 | - assert_equal 4, ActionTracker::Record.count | |
| 210 | - end | |
| 211 | - | |
| 212 | - should "the tracker action target be defined as Community by custom_target method on articles'creation in communities" do | |
| 213 | - ActionTracker::Record.delete_all | |
| 214 | - community = fast_create(Community) | |
| 215 | - p1 = Person.first | |
| 216 | - community.add_member(p1) | |
| 217 | - assert p1.is_member_of?(community) | |
| 218 | - a = fast_create(Article) | |
| 219 | - article = PublishedArticle.create! :reference_article => a, :name => 'test', :profile_id => community.id | |
| 220 | - assert_equal true, article.published? | |
| 221 | - assert_equal true, article.notifiable? | |
| 222 | - assert_equal false, article.image? | |
| 223 | - assert_equal Community, article.profile.class | |
| 224 | - assert_equal Community, ActionTracker::Record.last.target.class | |
| 225 | - end | |
| 226 | - | |
| 227 | - should "the tracker action target be defined as person by custom_target method on articles'creation in profile" do | |
| 228 | - ActionTracker::Record.delete_all | |
| 229 | - person = Person.first | |
| 230 | - a = fast_create(Article) | |
| 231 | - article = PublishedArticle.create! :reference_article => a, :name => 'test', :profile_id => person.id | |
| 232 | - assert_equal true, article.published? | |
| 233 | - assert_equal true, article.notifiable? | |
| 234 | - assert_equal false, article.image? | |
| 235 | - assert_equal Person, article.profile.class | |
| 236 | - assert_equal person, ActionTracker::Record.last.target | |
| 237 | - end | |
| 238 | - | |
| 239 | - should 'not notify activity if the article is not advertise' do | |
| 240 | - ActionTracker::Record.delete_all | |
| 241 | - article = fast_create(Article) | |
| 242 | - a = PublishedArticle.create! :reference_article => article, :name => 'bar', :profile_id => fast_create(Profile).id, :published => true, :advertise => false | |
| 243 | - assert_equal true, a.published? | |
| 244 | - assert_equal true, a.notifiable? | |
| 245 | - assert_equal false, a.image? | |
| 246 | - assert_equal false, a.profile.is_a?(Community) | |
| 247 | - assert_equal 0, ActionTracker::Record.count | |
| 248 | - end | |
| 249 | - | |
| 250 | - should "have defined the is_trackable method defined" do | |
| 251 | - assert PublishedArticle.method_defined?(:is_trackable?) | |
| 252 | - end | |
| 253 | - | |
| 254 | - should "the common trackable conditions return the correct value" do | |
| 255 | - a = PublishedArticle.new | |
| 256 | - a.published = a.advertise = true | |
| 257 | - assert_equal true, a.published? | |
| 258 | - assert_equal true, a.notifiable? | |
| 259 | - assert_equal true, a.advertise? | |
| 260 | - assert_equal true, a.is_trackable? | |
| 261 | - | |
| 262 | - a.published=false | |
| 263 | - assert_equal false, a.published? | |
| 264 | - assert_equal false, a.is_trackable? | |
| 265 | - | |
| 266 | - a.published=true | |
| 267 | - a.advertise=false | |
| 268 | - assert_equal false, a.advertise? | |
| 269 | - assert_equal false, a.is_trackable? | |
| 270 | - end | |
| 271 | - | |
| 272 | -end |
test/unit/rss_feed_test.rb
| ... | ... | @@ -123,7 +123,7 @@ class RssFeedTest < Test::Unit::TestCase |
| 123 | 123 | feed.profile = profile |
| 124 | 124 | feed.save! |
| 125 | 125 | |
| 126 | - assert_match "<link>http://colivre.net/testuser</link>", feed.data | |
| 126 | + assert_match "<link>http://#{profile.environment.default_hostname}/testuser</link>", feed.data | |
| 127 | 127 | end |
| 128 | 128 | |
| 129 | 129 | should 'provide link to each article' do |
| ... | ... | @@ -205,15 +205,17 @@ class RssFeedTest < Test::Unit::TestCase |
| 205 | 205 | assert_equal false, a.can_display_hits? |
| 206 | 206 | end |
| 207 | 207 | |
| 208 | - should 'display the referenced body of a PublishedArticle' do | |
| 209 | - article = fast_create(Article, :body => 'This is the content of the Sample Article.') | |
| 208 | + should 'display the referenced body of a article published' do | |
| 209 | + article = fast_create(TextileArticle, :body => 'This is the content of the Sample Article.') | |
| 210 | 210 | profile = fast_create(Profile) |
| 211 | 211 | blog = fast_create(Blog, :profile_id => profile.id) |
| 212 | - published_article = PublishedArticle.create!(:reference_article => article, :profile => profile) | |
| 213 | - blog.posts << published_article | |
| 212 | + a = ApproveArticle.create!(:name => 'test name', :article => article, :target => profile, :requestor => fast_create(Person)) | |
| 213 | + a.finish | |
| 214 | + | |
| 215 | + blog.posts << published_article = article.class.last | |
| 214 | 216 | feed = RssFeed.new(:parent => blog, :profile => profile) |
| 215 | 217 | |
| 216 | - assert_match published_article.to_html, feed.data | |
| 218 | + assert_match "This is the content of the Sample Article", feed.data | |
| 217 | 219 | end |
| 218 | 220 | |
| 219 | 221 | should 'display articles even within a private profile' do | ... | ... |