Commit 067cda04f5e1cf8201191563c03f28175c8b910d

Authored by Leandro Santos
1 parent 8c783480

fixing unit tests and put article[parent_id] parameter as an option

lib/proposals_discussion_plugin.rb
@@ -15,7 +15,7 @@ class ProposalsDiscussionPlugin < Noosfero::Plugin @@ -15,7 +15,7 @@ class ProposalsDiscussionPlugin < Noosfero::Plugin
15 def content_types 15 def content_types
16 if context.respond_to?(:params) && context.params.kind_of?(Hash) && context.params[:controller] == 'cms' && context.params[:action] == 'new' 16 if context.respond_to?(:params) && context.params.kind_of?(Hash) && context.params[:controller] == 'cms' && context.params[:action] == 'new'
17 types = [] 17 types = []
18 - parent_id = context.params[:parent_id] 18 + parent_id = context.params[:parent_id] || (context.params[:article][:parent_id] unless context.params[:article].nil?)
19 parent = parent_id ? context.profile.articles.find(parent_id) : nil 19 parent = parent_id ? context.profile.articles.find(parent_id) : nil
20 types << ProposalsDiscussionPlugin::Discussion 20 types << ProposalsDiscussionPlugin::Discussion
21 types << ProposalsDiscussionPlugin::Topic if parent.kind_of?(ProposalsDiscussionPlugin::Discussion) 21 types << ProposalsDiscussionPlugin::Topic if parent.kind_of?(ProposalsDiscussionPlugin::Discussion)
test/unit/discussion_test.rb
@@ -36,8 +36,8 @@ class DiscussionTest &lt; ActiveSupport::TestCase @@ -36,8 +36,8 @@ class DiscussionTest &lt; ActiveSupport::TestCase
36 topic4.add_category c2 36 topic4.add_category c2
37 37
38 random_topics = discussion.random_topics_one_by_category 38 random_topics = discussion.random_topics_one_by_category
39 -  
40 - random_topics_categories = random_topics.map {|t| t.category.name } 39 +
  40 + random_topics_categories = random_topics.map {|t| t.categories.map{|c|c.name}}.flatten
41 41
42 assert_equal ["Category 1", "Category 2"],random_topics_categories 42 assert_equal ["Category 1", "Category 2"],random_topics_categories
43 end 43 end
test/unit/proposals_discussion_plugin_test.rb
@@ -20,26 +20,49 @@ class ProposalsDiscussionPluginTest &lt; ActiveSupport::TestCase @@ -20,26 +20,49 @@ class ProposalsDiscussionPluginTest &lt; ActiveSupport::TestCase
20 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Discussion 20 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Discussion
21 end 21 end
22 22
23 - should 'return Topic as a content type if parent is a Discussion' do 23 + should 'return Topic as a content type if parent_id parameter is a Discussion' do
24 parent = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => @profile.id) 24 parent = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => @profile.id)
25 @params[:parent_id] = parent.id 25 @params[:parent_id] = parent.id
26 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Topic 26 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Topic
27 end 27 end
28 28
29 - should 'return Proposal as a content type if parent is a Topic' do 29 + should 'return Topic as a content type if article parent_id is a Discussion' do
  30 + parent = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => @profile.id)
  31 + @params[:article] = {}
  32 + @params[:article][:parent_id] = parent.id
  33 + assert_includes plugin.content_types, ProposalsDiscussionPlugin::Topic
  34 + end
  35 +
  36 + should 'return Proposal as a content type if parent_id parameter is a Topic' do
30 parent = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => @profile.id) 37 parent = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => @profile.id)
31 @params[:parent_id] = parent.id 38 @params[:parent_id] = parent.id
32 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal 39 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal
33 end 40 end
34 41
35 - should 'return Proposal as a content type if parent is a Discussion and allow_topic is false' do 42 + should 'return Proposal as a content type if article parent is a Topic' do
  43 + parent = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => @profile.id)
  44 + @params[:article] = {}
  45 + @params[:article][:parent_id] = parent.id
  46 + assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal
  47 + end
  48 +
  49 + should 'return Proposal as a content type if parent_id parameter is a Discussion and allow_topic is false' do
36 parent = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :name => 'discussion', :allow_topics => false) 50 parent = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :name => 'discussion', :allow_topics => false)
37 @params[:parent_id] = parent.id 51 @params[:parent_id] = parent.id
38 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal 52 assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal
39 end 53 end
40 54
41 - should 'do not return Proposal as a content type if parent is nil' do 55 + should 'return Proposal as a content type if article parent is a Discussion and allow_topic is false' do
  56 + parent = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :name => 'discussion', :allow_topics => false)
  57 + @params[:article] = {}
  58 + @params[:article][:parent_id] = parent.id
  59 + assert_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal
  60 + end
  61 +
  62 + should 'do not return Proposal as a content type if parent and article parent is nil' do
42 @params[:parent_id] = nil 63 @params[:parent_id] = nil
  64 + @params[:article] = {}
  65 + @params[:article][:parent_id] = nil
43 assert_not_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal 66 assert_not_includes plugin.content_types, ProposalsDiscussionPlugin::Proposal
44 end 67 end
45 68
views/cms/proposals_discussion_plugin/_proposal.html.erb
@@ -23,6 +23,8 @@ @@ -23,6 +23,8 @@
23 <% editor_type = 'mceEditor' %> 23 <% editor_type = 'mceEditor' %>
24 <%= labelled_form_field(strip_tags(@article.discussion.custom_body_label), text_area(:article, :body, :class => editor_type)) %> 24 <%= labelled_form_field(strip_tags(@article.discussion.custom_body_label), text_area(:article, :body, :class => editor_type)) %>
25 </div> 25 </div>
  26 +
  27 + <%= hidden_field(:article, :parent_id) %>
26 </div> 28 </div>
27 29
28 <script> 30 <script>