diff --git a/lib/proposals_discussion_plugin/proposal_helper.rb b/lib/proposals_discussion_plugin/proposal_helper.rb new file mode 100644 index 0000000..7546ea7 --- /dev/null +++ b/lib/proposals_discussion_plugin/proposal_helper.rb @@ -0,0 +1,20 @@ +module ProposalsDiscussionPlugin::ProposalHelper + + def proposal_score(proposal) + return '' unless proposal.published? + normalized_score = proposal.normalized_score + pos = 26 * (normalized_score*4 - 1).round + content_tag 'span', ' ', :title => "#{normalized_score}", :style => "background-position-y: -#{pos}px" + end + + def proposal_locations(proposal) + proposal.locations.map do |location| + content_tag 'span', location.name, :class => "location" + end.join(', ') + end + + def proposal_tags(proposal) + proposal.tags.map { |t| link_to(t, :controller => 'profile', :profile => proposal.profile.identifier, :action => 'tags', :id => t.name ) }.join("\n") + end + +end diff --git a/test/unit/proposal_helper_test.rb b/test/unit/proposal_helper_test.rb new file mode 100644 index 0000000..ea74c6d --- /dev/null +++ b/test/unit/proposal_helper_test.rb @@ -0,0 +1,44 @@ +require_relative '../test_helper' + +class ProposalHelperTest < ActionView::TestCase + + def setup + @proposal = ProposalsDiscussionPlugin::Proposal.new(:name => 'test', :abstract => 'abstract') + end + + include ProposalsDiscussionPlugin::ProposalHelper + + attr_reader :proposal + + should 'display proposal score' do + proposal.expects(:normalized_score).returns(1) + assert proposal_score(proposal).present? + end + + should 'not display score for unpublished proposals' do + proposal.expects(:published?).returns(false) + assert proposal_score(proposal).blank? + end + + should 'display proposal locations' do + proposal.expects(:locations).returns([Region.new]) + assert proposal_locations(proposal).present? + end + + should 'return blank if a proposal has no locations' do + proposal.expects(:locations).returns([]) + assert proposal_locations(proposal).blank? + end + + should 'display proposal tags' do + proposal.expects(:tags).returns([ActsAsTaggableOn::Tag.new]) + proposal.expects(:profile).returns(fast_create(Profile)) + assert proposal_tags(proposal).present? + end + + should 'return blank if a proposal has no tags' do + proposal.expects(:tags).returns([]) + assert proposal_tags(proposal).blank? + end + +end diff --git a/views/content_viewer/_proposal_card.html.erb b/views/content_viewer/_proposal_card.html.erb index a6b1719..e0ed27d 100644 --- a/views/content_viewer/_proposal_card.html.erb +++ b/views/content_viewer/_proposal_card.html.erb @@ -1,3 +1,4 @@ +<% extend ProposalsDiscussionPlugin::ProposalHelper %>