proposal_task_test.rb 5 KB
# encoding: UTF-8
require_relative '../test_helper'

class ProposalTaskTest < ActiveSupport::TestCase

  attr_reader :profile, :person, :discussion

  def setup
    @person = fast_create(Person)
    @profile = fast_create(Community)
    @discussion = ProposalsDiscussionPlugin::Discussion.create!(:name => 'discussion', :profile => person, :allow_topics => false)
  end

  should 'check the source of a proposal in a task' do
    topic = fast_create(ProposalsDiscussionPlugin::Topic, :parent_id => discussion.id)
    task = ProposalsDiscussionPlugin::ProposalTask.new(:article_parent_id => topic.id)
    assert_equal topic.name, task.proposal_source
  end

  should 'assign proposal task to member with view_task permission' do
    role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
    role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)

    person1 = fast_create(Person)
    person1.define_roles([role1], profile)
    person2 = fast_create(Person)
    person2.define_roles([role2], profile)

    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'})
    assert_equal person2, task.responsible
  end

  should 'assign proposal task to member with perform_task permission after flag as accepted' do
    role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
    role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)

    person1 = fast_create(Person)
    person1.define_roles([role1], profile)
    person2 = fast_create(Person)
    person2.define_roles([role2], profile)

    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'})
    task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)]
    task.flag_accept_proposal(person2)
    assert_equal person1, task.responsible
  end

  should 'assign proposal task to member with perform_task permission after flag as rejected' do
    role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
    role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)

    person1 = fast_create(Person)
    person1.define_roles([role1], profile)
    person2 = fast_create(Person)
    person2.define_roles([role2], profile)

    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'})
    task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)]
    task.flag_reject_proposal(person2)
    assert_equal person1, task.responsible
  end

  should 'not change assignment when update the task responsible' do
    role1 = Role.create!(:name => 'profile_role2', :permissions => ['perform_task'], :environment => Environment.default)
    role2 = Role.create!(:name => 'profile_role', :permissions => ['view_tasks'], :environment => Environment.default)

    person1 = fast_create(Person)
    person1.define_roles([role1], profile)
    person2 = fast_create(Person)
    person2.define_roles([role2], profile)

    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'proposal 1'})
    task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)]
    task.flag_accept_proposal(person2)
    assert_equal person1, task.responsible
    task.responsible = person2
    task.save!
    assert_equal person2, task.responsible
  end

  should 'do not fail on task information with integer as abstract' do
    task = ProposalsDiscussionPlugin::ProposalTask.new
    task.expects(:abstract).returns(49)
    assert task.information.present?
  end

  should 'not register duplicate task' do
    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => ' é Á  e  ef KDsk we32UiIÍ?!.  '})
    assert task.valid?
    task = ProposalsDiscussionPlugin::ProposalTask.new(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'e a e ef kdsk we32uiii '})
    assert !task.valid?, 'duplicated proposal is not valid'
  end

  should 'allow edition' do
    task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => ' é Á  e  ef KDsk we32UiIÍ?!.  '})
    task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)]
    task.save!
    assert task.valid?, "Allow proposal to be edited"
  end

  should 'simplify abstract' do
    assert_equal  ProposalsDiscussionPlugin::ProposalTask.simplify(' é Á  e  ef KDsk we32UiIÍ?!.   '), "e a e ef kdsk we32uiii"
  end

end