view test/functional/issue_moves_controller_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children
line wrap: on
line source
require File.expand_path('../../test_helper', __FILE__)

class IssueMovesControllerTest < ActionController::TestCase
  fixtures :projects, :trackers, :issue_statuses, :issues,
           :enumerations, :users, :issue_categories,
           :projects_trackers,
           :roles,
           :member_roles,
           :members,
           :enabled_modules,
           :workflows,
           :journals, :journal_details

  def setup
    User.current = nil
  end

  def test_get_issue_moves_new
    @request.session[:user_id] = 2
    get :new, :id => 1

    assert_tag :tag => 'option', :content => 'eCookbook',
                                 :attributes => { :value => '1', :selected => 'selected' }
    %w(new_tracker_id status_id priority_id assigned_to_id).each do |field|
      assert_tag :tag => 'option', :content => '(No change)', :attributes => { :value => '' },
                                   :parent => {:tag => 'select', :attributes => {:id => field}}
      assert_no_tag :tag => 'option', :attributes => {:selected => 'selected'},
                                      :parent => {:tag => 'select', :attributes => {:id => field}}
    end

    # Be sure we don't include inactive enumerations
    assert ! IssuePriority.find(15).active?
    assert_no_tag :option, :attributes => {:value => '15'},
                           :parent => {:tag => 'select', :attributes => {:id => 'priority_id'} }
  end

  def test_create_one_issue_to_another_project
    @request.session[:user_id] = 2
    post :create, :id => 1, :new_project_id => 2, :tracker_id => '', :assigned_to_id => '', :status_id => '', :start_date => '', :due_date => ''
    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
    assert_equal 2, Issue.find(1).project_id
  end

  def test_create_one_issue_to_another_project_should_follow_when_needed
    @request.session[:user_id] = 2
    post :create, :id => 1, :new_project_id => 2, :follow => '1'
    assert_redirected_to '/issues/1'
  end

  def test_bulk_create_to_another_project
    @request.session[:user_id] = 2
    post :create, :ids => [1, 2], :new_project_id => 2
    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
    # Issues moved to project 2
    assert_equal 2, Issue.find(1).project_id
    assert_equal 2, Issue.find(2).project_id
    # No tracker change
    assert_equal 1, Issue.find(1).tracker_id
    assert_equal 2, Issue.find(2).tracker_id
  end

  def test_bulk_create_to_another_tracker
    @request.session[:user_id] = 2
    post :create, :ids => [1, 2], :new_tracker_id => 2
    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
    assert_equal 2, Issue.find(1).tracker_id
    assert_equal 2, Issue.find(2).tracker_id
  end

  context "#create via bulk move" do
    setup do
      @request.session[:user_id] = 2
    end

    should "allow changing the issue priority" do
      post :create, :ids => [1, 2], :priority_id => 6

      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
      assert_equal 6, Issue.find(1).priority_id
      assert_equal 6, Issue.find(2).priority_id

    end

    should "allow adding a note when moving" do
      post :create, :ids => [1, 2], :notes => 'Moving two issues'

      assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook'
      assert_equal 'Moving two issues', Issue.find(1).journals.sort_by(&:id).last.notes
      assert_equal 'Moving two issues', Issue.find(2).journals.sort_by(&:id).last.notes

    end

  end

  def test_bulk_copy_to_another_project
    @request.session[:user_id] = 2
    assert_difference 'Issue.count', 2 do
      assert_no_difference 'Project.find(1).issues.count' do
        post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'}
      end
    end
    assert_redirected_to '/projects/ecookbook/issues'
  end

  context "#create via bulk copy" do
    should "allow not changing the issue's attributes" do
      @request.session[:user_id] = 2
      issue_before_move = Issue.find(1)
      assert_difference 'Issue.count', 1 do
        assert_no_difference 'Project.find(1).issues.count' do
          post :create, :ids => [1], :new_project_id => 2,
               :copy_options => {:copy => '1'}, :new_tracker_id => '',
               :assigned_to_id => '', :status_id => '',
               :start_date => '', :due_date => ''
        end
      end
      issue_after_move = Issue.first(:order => 'id desc', :conditions => {:project_id => 2})
      assert_equal issue_before_move.tracker_id, issue_after_move.tracker_id
      assert_equal issue_before_move.status_id, issue_after_move.status_id
      assert_equal issue_before_move.assigned_to_id, issue_after_move.assigned_to_id
    end

    should "allow changing the issue's attributes" do
      # Fixes random test failure with Mysql
      # where Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
      # doesn't return the expected results
      Issue.delete_all("project_id=2")

      @request.session[:user_id] = 2
      assert_difference 'Issue.count', 2 do
        assert_no_difference 'Project.find(1).issues.count' do
          post :create, :ids => [1, 2], :new_project_id => 2,
               :copy_options => {:copy => '1'}, :new_tracker_id => '',
               :assigned_to_id => 4, :status_id => 3,
               :start_date => '2009-12-01', :due_date => '2009-12-31'
        end
      end

      copied_issues = Issue.all(:limit => 2, :order => 'id desc', :conditions => {:project_id => 2})
      assert_equal 2, copied_issues.size
      copied_issues.each do |issue|
        assert_equal 2, issue.project_id, "Project is incorrect"
        assert_equal 4, issue.assigned_to_id, "Assigned to is incorrect"
        assert_equal 3, issue.status_id, "Status is incorrect"
        assert_equal '2009-12-01', issue.start_date.to_s, "Start date is incorrect"
        assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
      end
    end

    should "allow adding a note when copying" do
      @request.session[:user_id] = 2
      assert_difference 'Issue.count', 1 do
        post :create, :ids => [1], :copy_options => {:copy => '1'},
             :notes => 'Copying one issue', :new_tracker_id => '',
             :assigned_to_id => 4, :status_id => 3,
             :start_date => '2009-12-01', :due_date => '2009-12-31'
      end

      issue = Issue.first(:order => 'id DESC')
      assert_equal 1, issue.journals.size
      journal = issue.journals.first
      assert_equal 0, journal.details.size
      assert_equal 'Copying one issue', journal.notes
    end
  end

  def test_copy_to_another_project_should_follow_when_needed
    @request.session[:user_id] = 2
    post :create, :ids => [1], :new_project_id => 2, :copy_options => {:copy => '1'}, :follow => '1'
    issue = Issue.first(:order => 'id DESC')
    assert_redirected_to :controller => 'issues', :action => 'show', :id => issue
  end

end