Commit c7af3905f1be7f4ce2104f0110417c9a633708ea

Authored by Victor Costa
1 parent 6a3b50fc

Refactor SuggestArticle to accept other article types

app/models/article.rb
@@ -5,7 +5,7 @@ class Article < ActiveRecord::Base @@ -5,7 +5,7 @@ class Article < ActiveRecord::Base
5 :allow_members_to_edit, :translation_of_id, :language, 5 :allow_members_to_edit, :translation_of_id, :language,
6 :license_id, :parent_id, :display_posts_in_current_language, 6 :license_id, :parent_id, :display_posts_in_current_language,
7 :category_ids, :posts_per_page, :moderate_comments, 7 :category_ids, :posts_per_page, :moderate_comments,
8 - :accept_comments, :feed, :published, :source, 8 + :accept_comments, :feed, :published, :source, :source_name,
9 :highlighted, :notify_comments, :display_hits, :slug, 9 :highlighted, :notify_comments, :display_hits, :slug,
10 :external_feed_builder, :display_versions, :external_link, 10 :external_feed_builder, :display_versions, :external_link,
11 :image_builder, :show_to_followers 11 :image_builder, :show_to_followers
app/models/suggest_article.rb
1 class SuggestArticle < Task 1 class SuggestArticle < Task
2 2
3 - validates_presence_of :target_id, :article_name, :article_body 3 + validates_presence_of :target_id
4 validates_presence_of :email, :name, :if => Proc.new { |task| task.requestor.blank? } 4 validates_presence_of :email, :name, :if => Proc.new { |task| task.requestor.blank? }
  5 + validates_associated :article_object
5 6
6 settings_items :email, :type => String 7 settings_items :email, :type => String
7 settings_items :name, :type => String 8 settings_items :name, :type => String
8 - settings_items :article_name, :type => String  
9 - settings_items :article_body, :type => String  
10 - settings_items :article_abstract, :type => String  
11 - settings_items :article_parent_id, :type => String  
12 - settings_items :source, :type => String  
13 - settings_items :source_name, :type => String  
14 - settings_items :highlighted, :type => :boolean, :default => false  
15 settings_items :ip_address, :type => String 9 settings_items :ip_address, :type => String
16 settings_items :user_agent, :type => String 10 settings_items :user_agent, :type => String
17 settings_items :referrer, :type => String 11 settings_items :referrer, :type => String
  12 + settings_items :article, :type => Hash, :default => {}
18 13
19 after_create :schedule_spam_checking 14 after_create :schedule_spam_checking
20 15
@@ -28,24 +23,34 @@ class SuggestArticle &lt; Task @@ -28,24 +23,34 @@ class SuggestArticle &lt; Task
28 requestor ? "#{requestor.name}" : "#{name} (#{email})" 23 requestor ? "#{requestor.name}" : "#{name} (#{email})"
29 end 24 end
30 25
  26 + def article_object
  27 + if @article_object.nil?
  28 + @article_object = article_type.new(article.merge({:profile => target}).except(:type))
  29 + if requestor.present?
  30 + @article_object.author = requestor
  31 + else
  32 + @article_object.author_name = name
  33 + end
  34 + end
  35 + @article_object
  36 + end
  37 +
  38 + def article_type
  39 + (article[:type] || 'TinyMceArticle').constantize
  40 + end
  41 +
31 def perform 42 def perform
32 - task = TinyMceArticle.new  
33 - task.profile = target  
34 - task.name = article_name  
35 - task.author_name = name  
36 - task.body = article_body  
37 - task.abstract = article_abstract  
38 - task.parent_id = article_parent_id  
39 - task.source = source  
40 - task.source_name = source_name  
41 - task.highlighted = highlighted  
42 - task.save! 43 + article_object.save!
43 end 44 end
44 45
45 def title 46 def title
46 _("Article suggestion") 47 _("Article suggestion")
47 end 48 end
48 49
  50 + def article_name
  51 + article[:name]
  52 + end
  53 +
49 def subject 54 def subject
50 article_name 55 article_name
51 end 56 end
app/views/cms/suggest_an_article.html.erb
@@ -6,18 +6,18 @@ @@ -6,18 +6,18 @@
6 6
7 <%= labelled_form_for 'task' do |f| %> 7 <%= labelled_form_for 'task' do |f| %>
8 8
9 - <%= required labelled_form_field(_('Title'), text_field(:task, 'article_name', :size => 50)) %> 9 + <%= required labelled_form_field(_('Title'), text_field('task[article]', 'name', :size => 50)) %>
10 10
11 - <%= labelled_form_field(_('Source'), text_field(:task, 'source_name')) %> 11 + <%= labelled_form_field(_('Source'), text_field('task[article]', 'source_name')) %>
12 12
13 - <%= labelled_form_field(_('Source URL'), text_field(:task, 'source')) %> 13 + <%= labelled_form_field(_('Source URL'), text_field('task[article]', 'source')) %>
14 14
15 <% unless logged_in? %> 15 <% unless logged_in? %>
16 <%= required labelled_form_field(_('Your name'), text_field(:task, 'name')) %> 16 <%= required labelled_form_field(_('Your name'), text_field(:task, 'name')) %>
17 <%= required labelled_form_field(_('Email'), text_field(:task, 'email')) %> 17 <%= required labelled_form_field(_('Email'), text_field(:task, 'email')) %>
18 <% end %> 18 <% end %>
19 19
20 - <%= render :partial => 'shared/lead_and_body', :locals => {:tiny_mce => true, :object => :task, :abstract_method => 'article_abstract', :body_method => 'article_body'} %> 20 + <%= render :partial => 'shared/lead_and_body', :locals => {:tiny_mce => true, :object => 'task[article]'} %>
21 21
22 <%= hidden_field_tag('back_to', @back_to) %> 22 <%= hidden_field_tag('back_to', @back_to) %>
23 23
app/views/spam/_suggest_article.html.erb
@@ -7,13 +7,13 @@ @@ -7,13 +7,13 @@
7 <ul class="suggest-article-details" style="display: none"> 7 <ul class="suggest-article-details" style="display: none">
8 <li><strong><%=_('Sent by')%></strong>: <%=task.name%> </li> 8 <li><strong><%=_('Sent by')%></strong>: <%=task.name%> </li>
9 <li><strong><%=_('Email')%></strong>: <%=task.email%> </li> 9 <li><strong><%=_('Email')%></strong>: <%=task.email%> </li>
10 - <li><strong><%=_('Source')%></strong>: <%=task.source_name%> </li>  
11 - <li><strong><%=_('Source URL')%></strong>: <%=task.source%> </li>  
12 - <li><strong><%=_('Folder')%></strong>: <%=(a = Article.find_by_id(task.article_parent_id))?a.name : '<em>' + s_('Folder|none') + '</em>'%> </li>  
13 - <li><strong><%=_('Lead')%></strong>: <%=task.article_abstract.blank? ? '<em>' + s_('Abstract|empty') + '</em>' : task.article_abstract%> </li> 10 + <li><strong><%=_('Source')%></strong>: <%=task.article_object.source_name%> </li>
  11 + <li><strong><%=_('Source URL')%></strong>: <%=task.article_object.source%> </li>
  12 + <li><strong><%=_('Folder')%></strong>: <%=(a = Article.find_by_id(task.article_object.parent_id))?a.name : '<em>' + s_('Folder|none') + '</em>'%> </li>
  13 + <li><strong><%=_('Lead')%></strong>: <%=task.article_object.abstract.blank? ? '<em>' + s_('Abstract|empty') + '</em>' : task.article_object.abstract%> </li>
14 <li><strong><%=_('Body')%></strong>: 14 <li><strong><%=_('Body')%></strong>:
15 <div class='suggest-article-body'> 15 <div class='suggest-article-body'>
16 - <%= task.article_body %> 16 + <%= task.article_object.body %>
17 </div> 17 </div>
18 </li> 18 </li>
19 </ul> 19 </ul>
app/views/tasks/_suggest_article_accept_details.html.erb
@@ -4,11 +4,14 @@ @@ -4,11 +4,14 @@
4 <%= labelled_form_field(_("Sent by: "), f.text_field(:name)) %> 4 <%= labelled_form_field(_("Sent by: "), f.text_field(:name)) %>
5 <p><%= label_tag(_("Email: %s") % task.email) %> </p> 5 <p><%= label_tag(_("Email: %s") % task.email) %> </p>
6 <% end %> 6 <% end %>
7 -<%= required labelled_form_field(_('Title'), f.text_field(:article_name, :size => 50)) %>  
8 -<%= labelled_form_field(_('Source'), f.text_field(:source_name)) %>  
9 -<%= labelled_form_field(_("Source URL"), f.text_field(:source)) %>  
10 7
11 -<%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article_parent_id]", task.target) %>  
12 -<%= labelled_form_field(_('Highlight this article'), f.check_box(:highlighted)) %> 8 +<%= f.fields_for 'article', OpenStruct.new(task.article) do |a| %>
  9 + <%= required labelled_form_field(_('Title'), a.text_field(:name, :size => 50)) %>
  10 + <%= labelled_form_field(_('Source'), a.text_field(:source_name)) %>
  11 + <%= labelled_form_field(_("Source URL"), a.text_field(:source)) %>
13 12
14 -<%= render :partial => 'shared/lead_and_body', :locals => {:tiny_mce => true, :f => f, :abstract_method => 'article_abstract', :body_method => 'article_body', :lead_id => task.id} %> 13 + <%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article][parent_id]", task.target) %>
  14 + <%= labelled_form_field(_('Highlight this article'), a.check_box(:highlighted)) %>
  15 +
  16 + <%= render :partial => 'shared/lead_and_body', :locals => {:tiny_mce => true, :f => a, :lead_id => task.id} %>
  17 +<% end %>
test/factories.rb
@@ -454,7 +454,7 @@ module Noosfero::Factory @@ -454,7 +454,7 @@ module Noosfero::Factory
454 end 454 end
455 455
456 def defaults_for_suggest_article 456 def defaults_for_suggest_article
457 - { :name => 'Sender', :email => 'sender@example.com', :article_name => 'Some title', :article_body => 'some body text', :article_abstract => 'some abstract text'} 457 + { :name => 'Sender', :email => 'sender@example.com', :article => {:name => 'Some title', :body => 'some body text', :abstract => 'some abstract text'}}
458 end 458 end
459 459
460 def defaults_for_comment(params = {}) 460 def defaults_for_comment(params = {})
test/functional/cms_controller_test.rb
@@ -1439,22 +1439,22 @@ class CmsControllerTest &lt; ActionController::TestCase @@ -1439,22 +1439,22 @@ class CmsControllerTest &lt; ActionController::TestCase
1439 logout 1439 logout
1440 get :suggest_an_article, :profile => profile.identifier 1440 get :suggest_an_article, :profile => profile.identifier
1441 1441
1442 - assert_tag :tag => 'textarea', :attributes => { :name => /article_abstract/, :class => 'mceEditor' }  
1443 - assert_tag :tag => 'textarea', :attributes => { :name => /article_body/, :class => 'mceEditor' } 1442 + assert_tag :tag => 'textarea', :attributes => { :name => /task\[article\]\[abstract\]/, :class => 'mceEditor' }
  1443 + assert_tag :tag => 'textarea', :attributes => { :name => /task\[article\]\[body\]/, :class => 'mceEditor' }
1444 end 1444 end
1445 1445
1446 should 'create a task suggest task to a profile' do 1446 should 'create a task suggest task to a profile' do
1447 c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => true) 1447 c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => true)
1448 1448
1449 assert_difference 'SuggestArticle.count' do 1449 assert_difference 'SuggestArticle.count' do
1450 - post :suggest_an_article, :profile => c.identifier, :back_to => 'action_view', :task => {:article_name => 'some name', :article_body => 'some body', :email => 'some@localhost.com', :name => 'some name'} 1450 + post :suggest_an_article, :profile => c.identifier, :back_to => 'action_view', :task => {:article => {:name => 'some name', :body => 'some body'}, :email => 'some@localhost.com', :name => 'some name'}
1451 end 1451 end
1452 end 1452 end
1453 1453
1454 should 'create suggest task with logged in user as the article author' do 1454 should 'create suggest task with logged in user as the article author' do
1455 c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => true) 1455 c = Community.create!(:name => 'test comm', :identifier => 'test_comm', :moderated_articles => true)
1456 1456
1457 - post :suggest_an_article, :profile => c.identifier, :back_to => 'action_view', :task => {:article_name => 'some name', :article_body => 'some body'} 1457 + post :suggest_an_article, :profile => c.identifier, :back_to => 'action_view', :task => {:article => {:name => 'some name', :body => 'some body'}}
1458 assert_equal profile, SuggestArticle.last.requestor 1458 assert_equal profile, SuggestArticle.last.requestor
1459 end 1459 end
1460 1460
test/functional/spam_controller_test.rb
@@ -10,7 +10,7 @@ class SpamControllerTest &lt; ActionController::TestCase @@ -10,7 +10,7 @@ class SpamControllerTest &lt; ActionController::TestCase
10 @article = fast_create(TextileArticle, :profile_id => @community.id) 10 @article = fast_create(TextileArticle, :profile_id => @community.id)
11 @spam_comment = fast_create(Comment, :source_id => @article.id, :spam => true, :name => 'foo', :email => 'foo@example.com') 11 @spam_comment = fast_create(Comment, :source_id => @article.id, :spam => true, :name => 'foo', :email => 'foo@example.com')
12 12
13 - @spam_suggest_article = SuggestArticle.create!(:name => 'spammer', :article_name => 'Spam article', :email => 'spammer@shady.place', :article_body => "Something you don't need", :target => @community, :spam => true) 13 + @spam_suggest_article = SuggestArticle.create!(:name => 'spammer', :article => {:name => 'Spam article', :body => "Something you don't need"}, :email => 'spammer@shady.place', :target => @community, :spam => true)
14 login_as @profile.identifier 14 login_as @profile.identifier
15 end 15 end
16 16
test/functional/tasks_controller_test.rb
@@ -264,11 +264,11 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -264,11 +264,11 @@ class TasksControllerTest &lt; ActionController::TestCase
264 c = fast_create(Community) 264 c = fast_create(Community)
265 c.add_admin profile 265 c.add_admin profile
266 @controller.stubs(:profile).returns(c) 266 @controller.stubs(:profile).returns(c)
267 - t = SuggestArticle.create!(:article_name => 'test name', :article_abstract => 'test abstract', :article_body => 'test body', :name => 'some name', :email => 'test@localhost.com', :target => c) 267 + t = SuggestArticle.create!(:article => {:name => 'test name', :abstract => 'test abstract', :body => 'test body'}, :name => 'some name', :email => 'test@localhost.com', :target => c)
268 268
269 get :index 269 get :index
270 - assert_tag :tag => 'textarea', :content => /test abstract/, :attributes => { :name => /article_abstract/, :class => 'mceEditor' }  
271 - assert_tag :tag => 'textarea', :content => /test body/, :attributes => { :name => /article_body/, :class => 'mceEditor' } 270 + assert_tag :tag => 'textarea', :content => /test abstract/, :attributes => { :name => /tasks\[#{t.id}\]\[task\]\[article\]\[abstract\]/, :class => 'mceEditor' }
  271 + assert_tag :tag => 'textarea', :content => /test body/, :attributes => { :name => /tasks\[#{t.id}\]\[task\]\[article\]\[body\]/, :class => 'mceEditor' }
272 end 272 end
273 273
274 should 'create TinyMceArticle article after finish approve suggested article task' do 274 should 'create TinyMceArticle article after finish approve suggested article task' do
@@ -276,7 +276,7 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -276,7 +276,7 @@ class TasksControllerTest &lt; ActionController::TestCase
276 c = fast_create(Community) 276 c = fast_create(Community)
277 c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) 277 c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id))
278 @controller.stubs(:profile).returns(c) 278 @controller.stubs(:profile).returns(c)
279 - t = SuggestArticle.create!(:article_name => 'test name', :article_body => 'test body', :name => 'some name', :email => 'test@localhost.com', :target => c) 279 + t = SuggestArticle.create!(:article => {:name => 'test name', :body => 'test body'}, :name => 'some name', :email => 'test@localhost.com', :target => c)
280 280
281 post :close, :tasks => {t.id => { :task => {}, :decision => "finish"}} 281 post :close, :tasks => {t.id => { :task => {}, :decision => "finish"}}
282 assert_not_nil TinyMceArticle.find(:first) 282 assert_not_nil TinyMceArticle.find(:first)
@@ -288,16 +288,13 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -288,16 +288,13 @@ class TasksControllerTest &lt; ActionController::TestCase
288 c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id)) 288 c.affiliate(profile, Profile::Roles.all_roles(profile.environment.id))
289 @controller.stubs(:profile).returns(c) 289 @controller.stubs(:profile).returns(c)
290 t = SuggestArticle.new 290 t = SuggestArticle.new
291 - t.article_name = 'test name'  
292 - t.article_body = 'test body' 291 + t.article = {:name => 'test name', :body => 'test body', :source => 'http://test.com', :source_name => 'some source name'}
293 t.name = 'some name' 292 t.name = 'some name'
294 - t.source = 'http://test.com'  
295 - t.source_name = 'some source name'  
296 t.email = 'test@localhost.com' 293 t.email = 'test@localhost.com'
297 t.target = c 294 t.target = c
298 t.save! 295 t.save!
299 296
300 - post :close, :tasks => {t.id => { :task => {:article_name => 'new article name', :article_body => 'new body', :source => 'http://www.noosfero.com', :source_name => 'new source', :name => 'new name'}, :decision => "finish"}} 297 + post :close, :tasks => {t.id => { :task => {:article => {:name => 'new article name', :body => 'new body', :source => 'http://www.noosfero.com', :source_name => 'new source'}, :name => 'new name'}, :decision => "finish"}}
301 assert_equal 'new article name', TinyMceArticle.find(:first).name 298 assert_equal 'new article name', TinyMceArticle.find(:first).name
302 assert_equal 'new name', TinyMceArticle.find(:first).author_name 299 assert_equal 'new name', TinyMceArticle.find(:first).author_name
303 assert_equal 'new body', TinyMceArticle.find(:first).body 300 assert_equal 'new body', TinyMceArticle.find(:first).body
@@ -310,7 +307,7 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -310,7 +307,7 @@ class TasksControllerTest &lt; ActionController::TestCase
310 c = fast_create(Community) 307 c = fast_create(Community)
311 c.add_admin profile 308 c.add_admin profile
312 @controller.stubs(:profile).returns(c) 309 @controller.stubs(:profile).returns(c)
313 - t = SuggestArticle.create!(:article_name => 'test name', :article_abstract => 'test abstract', :article_body => 'test body', :name => 'some name', :email => 'test@localhost.com', :target => c) 310 + t = SuggestArticle.create!(:article => {:name => 'test name', :abstract => 'test abstract', :body => 'test body'}, :name => 'some name', :email => 'test@localhost.com', :target => c)
314 311
315 get :index 312 get :index
316 assert_select "#tasks_#{t.id}_task_name" 313 assert_select "#tasks_#{t.id}_task_name"
@@ -321,7 +318,7 @@ class TasksControllerTest &lt; ActionController::TestCase @@ -321,7 +318,7 @@ class TasksControllerTest &lt; ActionController::TestCase
321 c = fast_create(Community) 318 c = fast_create(Community)
322 c.add_admin profile 319 c.add_admin profile
323 @controller.stubs(:profile).returns(c) 320 @controller.stubs(:profile).returns(c)
324 - t = SuggestArticle.create!(:article_name => 'test name', :article_abstract => 'test abstract', :article_body => 'test body', :requestor => fast_create(Person), :target => c) 321 + t = SuggestArticle.create!(:article => {:name => 'test name', :abstract => 'test abstract', :body => 'test body'}, :requestor => fast_create(Person), :target => c)
325 322
326 get :index 323 get :index
327 assert_select "#tasks_#{t.id}_task_name", 0 324 assert_select "#tasks_#{t.id}_task_name", 0
test/unit/suggest_article_test.rb
@@ -13,16 +13,9 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -13,16 +13,9 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
13 13
14 should 'have the article_name' do 14 should 'have the article_name' do
15 t = SuggestArticle.new 15 t = SuggestArticle.new
16 - assert !t.errors[:article_name.to_s].present?  
17 - t.valid?  
18 - assert t.errors[:article_name.to_s].present?  
19 - end  
20 -  
21 - should 'have the article_body' do  
22 - t = SuggestArticle.new  
23 - assert !t.errors[:article_body.to_s].present?  
24 - t.valid?  
25 - assert t.errors[:article_body.to_s].present? 16 + assert !t.article_object.errors[:name].present?
  17 + t.article_object.valid?
  18 + assert t.article_object.errors[:name].present?
26 end 19 end
27 20
28 should 'have the email' do 21 should 'have the email' do
@@ -46,19 +39,12 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -46,19 +39,12 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
46 assert t.errors[:target_id.to_s].present? 39 assert t.errors[:target_id.to_s].present?
47 end 40 end
48 41
49 - should 'have the article_abstract' do 42 + should 'have the article' do
50 t = SuggestArticle.new 43 t = SuggestArticle.new
51 - assert t.respond_to?(:article_abstract)  
52 - end  
53 -  
54 - should 'have the article_parent_id' do  
55 - t = SuggestArticle.new  
56 - assert t.respond_to?(:article_parent_id)  
57 - end  
58 -  
59 - should 'source be defined' do  
60 - t = SuggestArticle.new  
61 - assert t.respond_to?(:source) 44 + assert t.respond_to?(:article_object)
  45 + assert !t.errors[:article_object].present?
  46 + t.valid?
  47 + assert t.errors[:article_object].present?
62 end 48 end
63 49
64 should 'create an article on with perfom method' do 50 should 'create an article on with perfom method' do
@@ -66,9 +52,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -66,9 +52,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
66 name = 'some name' 52 name = 'some name'
67 body = 'some body' 53 body = 'some body'
68 abstract = 'some abstract' 54 abstract = 'some abstract'
69 - t.article_name = name  
70 - t.article_body = body  
71 - t.article_abstract = abstract 55 + t.article = {:name => name, :body => body, :abstract => abstract}
72 t.target = @profile 56 t.target = @profile
73 count = TinyMceArticle.count 57 count = TinyMceArticle.count
74 t.perform 58 t.perform
@@ -77,8 +61,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -77,8 +61,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
77 61
78 should 'fill source name and URL into created article' do 62 should 'fill source name and URL into created article' do
79 t = build(SuggestArticle, :target => @profile) 63 t = build(SuggestArticle, :target => @profile)
80 - t.source_name = 'GNU project'  
81 - t.source = 'http://www.gnu.org/' 64 + t.article.merge!({:source_name => 'GNU project', :source => 'http://www.gnu.org/'})
82 t.perform 65 t.perform
83 66
84 article = TinyMceArticle.last 67 article = TinyMceArticle.last
@@ -95,7 +78,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -95,7 +78,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
95 78
96 should 'highlight created article' do 79 should 'highlight created article' do
97 t = build(SuggestArticle, :target => @profile) 80 t = build(SuggestArticle, :target => @profile)
98 - t.highlighted = true 81 + t.article[:highlighted] = true
99 t.perform 82 t.perform
100 83
101 article = TinyMceArticle.last(:conditions => { :name => t.article_name}) # just to be sure 84 article = TinyMceArticle.last(:conditions => { :name => t.article_name}) # just to be sure
@@ -132,19 +115,19 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -132,19 +115,19 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
132 end 115 end
133 116
134 should 'have target notification message' do 117 should 'have target notification message' do
135 - task = build(SuggestArticle, :target => @profile, :article_name => 'suggested article', :name => 'johndoe') 118 + task = build(SuggestArticle, :target => @profile, :article => {:name => 'suggested article'}, :name => 'johndoe')
136 119
137 assert_match(/#{task.name}.*suggested the publication of the article: #{task.subject}.*[\n]*.*to approve or reject/, task.target_notification_message) 120 assert_match(/#{task.name}.*suggested the publication of the article: #{task.subject}.*[\n]*.*to approve or reject/, task.target_notification_message)
138 end 121 end
139 122
140 should 'have target notification description' do 123 should 'have target notification description' do
141 - task = build(SuggestArticle,:target => @profile, :article_name => 'suggested article', :name => 'johndoe') 124 + task = build(SuggestArticle,:target => @profile, :article => {:name => 'suggested article'}, :name => 'johndoe')
142 125
143 assert_match(/#{task.name}.*suggested the publication of the article: #{task.subject}/, task.target_notification_description) 126 assert_match(/#{task.name}.*suggested the publication of the article: #{task.subject}/, task.target_notification_description)
144 end 127 end
145 128
146 should 'deliver target notification message' do 129 should 'deliver target notification message' do
147 - task = build(SuggestArticle, :target => @profile, :article_name => 'suggested article', :name => 'johndoe', :email => 'johndoe@example.com') 130 + task = build(SuggestArticle, :target => @profile, :article => {:name => 'suggested article'}, :name => 'johndoe', :email => 'johndoe@example.com')
148 131
149 email = TaskMailer.target_notification(task, task.target_notification_message).deliver 132 email = TaskMailer.target_notification(task, task.target_notification_message).deliver
150 133
@@ -160,7 +143,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -160,7 +143,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
160 should 'delegate spam detection to plugins' do 143 should 'delegate spam detection to plugins' do
161 Environment.default.enable_plugin(EverythingIsSpam) 144 Environment.default.enable_plugin(EverythingIsSpam)
162 145
163 - t1 = build(SuggestArticle, :target => @profile, :article_name => 'suggested article', :name => 'johndoe', :email => 'johndoe@example.com') 146 + t1 = build(SuggestArticle, :target => @profile, :article => {:name => 'suggested article'}, :name => 'johndoe', :email => 'johndoe@example.com')
164 147
165 EverythingIsSpam.any_instance.expects(:check_for_spam) 148 EverythingIsSpam.any_instance.expects(:check_for_spam)
166 149
@@ -189,7 +172,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -189,7 +172,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
189 should 'notify plugins of suggest_articles being marked as spam' do 172 should 'notify plugins of suggest_articles being marked as spam' do
190 Environment.default.enable_plugin(SpamNotification) 173 Environment.default.enable_plugin(SpamNotification)
191 174
192 - t = SuggestArticle.create!(:target => @profile, :article_name => 'suggested article', :name => 'johndoe', :article_body => 'wanna feel my body? my body baaaby', :email => 'johndoe@example.com') 175 + t = SuggestArticle.create!(:target => @profile, :article => {:name => 'suggested article', :body => 'wanna feel my body? my body baaaby'}, :name => 'johndoe', :email => 'johndoe@example.com')
193 176
194 t.spam! 177 t.spam!
195 process_delayed_job_queue 178 process_delayed_job_queue
@@ -200,7 +183,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -200,7 +183,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
200 should 'notify plugins of suggest_articles being marked as ham' do 183 should 'notify plugins of suggest_articles being marked as ham' do
201 Environment.default.enable_plugin(SpamNotification) 184 Environment.default.enable_plugin(SpamNotification)
202 185
203 - t = SuggestArticle.create!(:target => @profile, :article_name => 'suggested article', :name => 'johndoe', :article_body => 'wanna feel my body? my body baaaby', :email => 'johndoe@example.com') 186 + t = SuggestArticle.create!(:target => @profile, :article => {:name => 'suggested article', :body => 'wanna feel my body? my body baaaby'}, :name => 'johndoe', :email => 'johndoe@example.com')
204 187
205 t.ham! 188 t.ham!
206 process_delayed_job_queue 189 process_delayed_job_queue
@@ -219,7 +202,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -219,7 +202,7 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
219 end 202 end
220 203
221 should 'log spammer ip after marking comment as spam' do 204 should 'log spammer ip after marking comment as spam' do
222 - t = SuggestArticle.create!(:target => @profile, :article_name => 'suggested article', :name => 'johndoe', :article_body => 'wanna feel my body? my body baaaby', :email => 'johndoe@example.com', :ip_address => '192.168.0.1') 205 + t = SuggestArticle.create!(:target => @profile, :article => {:name => 'suggested article', :body => 'wanna feel my body? my body baaaby'}, :name => 'johndoe', :email => 'johndoe@example.com', :ip_address => '192.168.0.1')
223 t.spam! 206 t.spam!
224 log = File.open('log/test_spammers.log') 207 log = File.open('log/test_spammers.log')
225 assert_match "SuggestArticle-id: #{t.id} IP: 192.168.0.1", log.read 208 assert_match "SuggestArticle-id: #{t.id} IP: 192.168.0.1", log.read
@@ -238,4 +221,13 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase @@ -238,4 +221,13 @@ class SuggestArticleTest &lt; ActiveSupport::TestCase
238 assert_equal person.name, t.sender 221 assert_equal person.name, t.sender
239 end 222 end
240 223
  224 + should 'create an event on perfom method' do
  225 + t = SuggestArticle.new
  226 + t.article = {:name => 'name', :body => 'body', :type => 'Event'}
  227 + t.target = @profile
  228 + assert_difference "Event.count" do
  229 + t.perform
  230 + end
  231 + end
  232 +
241 end 233 end