proposals_discussion_plugin_myprofile_controller_test.rb 2.7 KB
require_relative '../test_helper'

class ProposalsDiscussionPluginMyprofileControllerTest < ActionController::TestCase

  def setup
    @profile = fast_create(Community)
    @discussion = ProposalsDiscussionPlugin::Discussion.create!(:profile => @profile, :name => "Discussion")
    @topic = ProposalsDiscussionPlugin::Topic.create!(:parent => @discussion, :profile => @profile, :name => 'Topic')
    @person = create_user_with_permission('testinguser', 'post_content')
    login_as :testinguser
  end

  attr_reader :profile, :discussion, :topic, :person

  should 'list topics for selection' do
    3.times {fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id, :profile_id => profile.id)}
    get :select_topic, :profile => profile.identifier, :discussion_id => discussion.id
    assert_equal discussion, assigns(:discussion)
    assert_select 'div#topics' do
      assert_select 'div.content', discussion.topics.count
      assert_select "input[name='parent_id']", discussion.topics.count
    end
    assert_tag :form, :attributes => {:action => "/myprofile/#{profile.identifier}/plugin/proposals_discussion/myprofile/new_proposal_with_topic?discussion_id=#{discussion.id}"}
  end

  should 'new_proposal redirect to cms controller' do
    get :new_proposal, :profile => profile.identifier,:parent_id => topic.id, :discussion_id => discussion.id
    assert_redirected_to :controller => 'cms', :action => 'new', :type => "ProposalsDiscussionPlugin::Proposal", :parent_id => topic.id
  end

  should 'new_proposal with moderated discussion redirect to suggest action in cms controller' do
    discussion.moderate_proposals = true
    discussion.save!
    get :new_proposal, :profile => profile.identifier,:parent_id => topic.id, :discussion_id => discussion.id
    assert_match /suggest_an_article/, @response.location.inspect
  end

  should 'publish a proposal' do
    proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id, :profile_id => profile.id, :published => false, :created_by_id => person.id)
    get :publish_proposal, :proposal_id => proposal.id, :profile => profile.identifier
    assert proposal.reload.published
  end

  should 'do not publish if the logged user do not have edition permission' do
    proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :parent_id => topic.id, :profile_id => profile.id, :published => false)
    get :publish_proposal, :proposal_id => proposal.id, :profile => profile.identifier
    assert_response 403
    assert !proposal.reload.published
  end

  should 'new_proposal without a topic redirect to select_topic' do
    get :new_proposal_with_topic, :profile => profile.identifier, :discussion_id => discussion.id
    assert_template 'select_topic'
  end

end