| 530 | 
  530 | 
  
          str_big5  = "\xa4@\xa4\xeb".force_encoding('Big5')
   | 
  | 531 | 
  531 | 
  
          issue = Issue.generate!(:subject => str_utf8) 
   | 
  | 532 | 
  532 | 
  
    
   | 
  | 533 | 
   | 
  
          get :index, :project_id => 1,  
   | 
  | 534 | 
   | 
  
                      :f => ['subject'],  
   | 
   | 
  533 | 
  
          get :index, :project_id => 1, 
   | 
   | 
  534 | 
  
                      :f => ['subject'], 
   | 
  | 535 | 
  535 | 
  
                      :op => '=', :values => [str_utf8], 
   | 
  | 536 | 
  536 | 
  
                      :format => 'csv' 
   | 
  | 537 | 
  537 | 
  
          assert_equal 'text/csv; header=present', @response.content_type 
   | 
  | ... | ... |  | 
  | 549 | 
  549 | 
  
          str_utf8  = "\xe4\xbb\xa5\xe5\x86\x85".force_encoding('UTF-8')
   | 
  | 550 | 
  550 | 
  
          issue = Issue.generate!(:subject => str_utf8) 
   | 
  | 551 | 
  551 | 
  
    
   | 
  | 552 | 
   | 
  
          get :index, :project_id => 1,  
   | 
  | 553 | 
   | 
  
                      :f => ['subject'],  
   | 
   | 
  552 | 
  
          get :index, :project_id => 1, 
   | 
   | 
  553 | 
  
                      :f => ['subject'], 
   | 
  | 554 | 
  554 | 
  
                      :op => '=', :values => [str_utf8], 
   | 
  | 555 | 
  555 | 
  
                      :c => ['status', 'subject'], 
   | 
  | 556 | 
  556 | 
  
                      :format => 'csv', 
   | 
  | ... | ... |  | 
  | 572 | 
  572 | 
  
          str1  = "test_index_csv_tw" 
   | 
  | 573 | 
  573 | 
  
          issue = Issue.generate!(:subject => str1, :estimated_hours => '1234.5') 
   | 
  | 574 | 
  574 | 
  
    
   | 
  | 575 | 
   | 
  
          get :index, :project_id => 1,  
   | 
  | 576 | 
   | 
  
                      :f => ['subject'],  
   | 
   | 
  575 | 
  
          get :index, :project_id => 1, 
   | 
   | 
  576 | 
  
                      :f => ['subject'], 
   | 
  | 577 | 
  577 | 
  
                      :op => '=', :values => [str1], 
   | 
  | 578 | 
  578 | 
  
                      :c => ['estimated_hours', 'subject'], 
   | 
  | 579 | 
  579 | 
  
                      :format => 'csv', 
   | 
  | ... | ... |  | 
  | 589 | 
  589 | 
  
          str1  = "test_index_csv_fr" 
   | 
  | 590 | 
  590 | 
  
          issue = Issue.generate!(:subject => str1, :estimated_hours => '1234.5') 
   | 
  | 591 | 
  591 | 
  
    
   | 
  | 592 | 
   | 
  
          get :index, :project_id => 1,  
   | 
  | 593 | 
   | 
  
                      :f => ['subject'],  
   | 
   | 
  592 | 
  
          get :index, :project_id => 1, 
   | 
   | 
  593 | 
  
                      :f => ['subject'], 
   | 
  | 594 | 
  594 | 
  
                      :op => '=', :values => [str1], 
   | 
  | 595 | 
  595 | 
  
                      :c => ['estimated_hours', 'subject'], 
   | 
  | 596 | 
  596 | 
  
                      :format => 'csv', 
   | 
  | ... | ... |  | 
  | 667 | 
  667 | 
  
        Setting.issue_list_default_columns = %w(subject author) 
   | 
  | 668 | 
  668 | 
  
        get :index, :sort => 'tracker' 
   | 
  | 669 | 
  669 | 
  
      end 
   | 
  | 670 | 
   | 
  
       
   | 
   | 
  670 | 
  
    
   | 
  | 671 | 
  671 | 
  
      def test_index_sort_by_assigned_to 
   | 
  | 672 | 
  672 | 
  
        get :index, :sort => 'assigned_to' 
   | 
  | 673 | 
  673 | 
  
        assert_response :success 
   | 
  | ... | ... |  | 
  | 675 | 
  675 | 
  
        assert_equal assignees.sort, assignees 
   | 
  | 676 | 
  676 | 
  
        assert_select 'table.issues.sort-by-assigned-to.sort-asc' 
   | 
  | 677 | 
  677 | 
  
      end 
   | 
  | 678 | 
   | 
  
       
   | 
   | 
  678 | 
  
    
   | 
  | 679 | 
  679 | 
  
      def test_index_sort_by_assigned_to_desc 
   | 
  | 680 | 
  680 | 
  
        get :index, :sort => 'assigned_to:desc' 
   | 
  | 681 | 
  681 | 
  
        assert_response :success 
   | 
  | ... | ... |  | 
  | 683 | 
  683 | 
  
        assert_equal assignees.sort.reverse, assignees 
   | 
  | 684 | 
  684 | 
  
        assert_select 'table.issues.sort-by-assigned-to.sort-desc' 
   | 
  | 685 | 
  685 | 
  
      end 
   | 
  | 686 | 
   | 
  
       
   | 
   | 
  686 | 
  
    
   | 
  | 687 | 
  687 | 
  
      def test_index_group_by_assigned_to 
   | 
  | 688 | 
  688 | 
  
        get :index, :group_by => 'assigned_to', :sort => 'priority' 
   | 
  | 689 | 
  689 | 
  
        assert_response :success 
   | 
  | 690 | 
  690 | 
  
      end 
   | 
  | 691 | 
   | 
  
       
   | 
   | 
  691 | 
  
    
   | 
  | 692 | 
  692 | 
  
      def test_index_sort_by_author 
   | 
  | 693 | 
  693 | 
  
        get :index, :sort => 'author' 
   | 
  | 694 | 
  694 | 
  
        assert_response :success 
   | 
  | 695 | 
  695 | 
  
        authors = assigns(:issues).collect(&:author) 
   | 
  | 696 | 
  696 | 
  
        assert_equal authors.sort, authors 
   | 
  | 697 | 
  697 | 
  
      end 
   | 
  | 698 | 
   | 
  
       
   | 
   | 
  698 | 
  
    
   | 
  | 699 | 
  699 | 
  
      def test_index_sort_by_author_desc 
   | 
  | 700 | 
  700 | 
  
        get :index, :sort => 'author:desc' 
   | 
  | 701 | 
  701 | 
  
        assert_response :success 
   | 
  | 702 | 
  702 | 
  
        authors = assigns(:issues).collect(&:author) 
   | 
  | 703 | 
  703 | 
  
        assert_equal authors.sort.reverse, authors 
   | 
  | 704 | 
  704 | 
  
      end 
   | 
  | 705 | 
   | 
  
       
   | 
   | 
  705 | 
  
    
   | 
  | 706 | 
  706 | 
  
      def test_index_group_by_author 
   | 
  | 707 | 
  707 | 
  
        get :index, :group_by => 'author', :sort => 'priority' 
   | 
  | 708 | 
  708 | 
  
        assert_response :success 
   | 
  | 709 | 
  709 | 
  
      end 
   | 
  | 710 | 
   | 
  
       
   | 
   | 
  710 | 
  
    
   | 
  | 711 | 
  711 | 
  
      def test_index_sort_by_spent_hours 
   | 
  | 712 | 
  712 | 
  
        get :index, :sort => 'spent_hours:desc' 
   | 
  | 713 | 
  713 | 
  
        assert_response :success 
   | 
  | 714 | 
  714 | 
  
        hours = assigns(:issues).collect(&:spent_hours) 
   | 
  | 715 | 
  715 | 
  
        assert_equal hours.sort.reverse, hours 
   | 
  | 716 | 
  716 | 
  
      end 
   | 
  | 717 | 
   | 
  
       
   | 
   | 
  717 | 
  
    
   | 
  | 718 | 
  718 | 
  
      def test_index_sort_by_total_spent_hours 
   | 
  | 719 | 
  719 | 
  
        get :index, :sort => 'total_spent_hours:desc' 
   | 
  | 720 | 
  720 | 
  
        assert_response :success 
   | 
  | ... | ... |  | 
  | 1224 | 
  1224 | 
  
    
   | 
  | 1225 | 
  1225 | 
  
      def test_show_should_display_prev_next_links_with_query_and_sort_on_association 
   | 
  | 1226 | 
  1226 | 
  
        @request.session[:query] = {:filters => {'status_id' => {:values => [''], :operator => 'o'}}, :project_id => nil}
   | 
  | 1227 | 
   | 
  
         
   | 
   | 
  1227 | 
  
    
   | 
  | 1228 | 
  1228 | 
  
        %w(project tracker status priority author assigned_to category fixed_version).each do |assoc_sort| 
   | 
  | 1229 | 
  1229 | 
  
          @request.session['issues_index_sort'] = assoc_sort 
   | 
  | 1230 | 
  1230 | 
  
    
   | 
  | ... | ... |  | 
  | 1442 | 
  1442 | 
  
      end 
   | 
  | 1443 | 
  1443 | 
  
    
   | 
  | 1444 | 
  1444 | 
  
      def test_show_export_to_pdf 
   | 
  | 1445 | 
   | 
  
        issue = Issue.find(3)  
   | 
   | 
  1445 | 
  
        issue = Issue.find(3) 
   | 
  | 1446 | 
  1446 | 
  
        assert issue.relations.select{|r| r.other_issue(issue).visible?}.present?
   | 
  | 1447 | 
  1447 | 
  
        get :show, :id => 3, :format => 'pdf' 
   | 
  | 1448 | 
  1448 | 
  
        assert_response :success 
   | 
  | ... | ... |  | 
  | 2103 | 
  2103 | 
  
        assert_select_error /Bar cannot be blank/i 
   | 
  | 2104 | 
  2104 | 
  
      end 
   | 
  | 2105 | 
  2105 | 
  
    
   | 
   | 
  2106 | 
  
      def test_create_should_validate_required_list_fields 
   | 
   | 
  2107 | 
  
        cf1 = IssueCustomField.create!(:name => 'Foo', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => false, :possible_values => ['a', 'b']) 
   | 
   | 
  2108 | 
  
        cf2 = IssueCustomField.create!(:name => 'Bar', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => true, :possible_values => ['a', 'b']) 
   | 
   | 
  2109 | 
  
        WorkflowPermission.delete_all 
   | 
   | 
  2110 | 
  
        WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf1.id.to_s, :rule => 'required') 
   | 
   | 
  2111 | 
  
        WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf2.id.to_s, :rule => 'required') 
   | 
   | 
  2112 | 
  
        @request.session[:user_id] = 2 
   | 
   | 
  2113 | 
  
    
   | 
   | 
  2114 | 
  
        assert_no_difference 'Issue.count' do 
   | 
   | 
  2115 | 
  
          post :create, :project_id => 1, :issue => {
   | 
   | 
  2116 | 
  
            :tracker_id => 2, 
   | 
   | 
  2117 | 
  
            :status_id => 1, 
   | 
   | 
  2118 | 
  
            :subject => 'Test', 
   | 
   | 
  2119 | 
  
            :start_date => '', 
   | 
   | 
  2120 | 
  
            :due_date => '', 
   | 
   | 
  2121 | 
  
            :custom_field_values => {cf1.id.to_s => '', cf2.id.to_s => ['']}
   | 
   | 
  2122 | 
  
          } 
   | 
   | 
  2123 | 
  
          assert_response :success 
   | 
   | 
  2124 | 
  
          assert_template 'new' 
   | 
   | 
  2125 | 
  
        end 
   | 
   | 
  2126 | 
  
    
   | 
   | 
  2127 | 
  
        assert_select_error /Foo cannot be blank/i 
   | 
   | 
  2128 | 
  
        assert_select_error /Bar cannot be blank/i 
   | 
   | 
  2129 | 
  
      end 
   | 
   | 
  2130 | 
  
    
   | 
  | 2106 | 
  2131 | 
  
      def test_create_should_ignore_readonly_fields 
   | 
  | 2107 | 
  2132 | 
  
        cf1 = IssueCustomField.create!(:name => 'Foo', :field_format => 'string', :is_for_all => true, :tracker_ids => [1, 2]) 
   | 
  | 2108 | 
  2133 | 
  
        cf2 = IssueCustomField.create!(:name => 'Bar', :field_format => 'string', :is_for_all => true, :tracker_ids => [1, 2]) 
   | 
  | ... | ... |  | 
  | 2130 | 
  2155 | 
  
        assert_nil issue.custom_field_value(cf2) 
   | 
  | 2131 | 
  2156 | 
  
      end 
   | 
  | 2132 | 
  2157 | 
  
    
   | 
   | 
  2158 | 
  
      def test_create_should_ignore_readonly_list_fields 
   | 
   | 
  2159 | 
  
        cf1 = IssueCustomField.create!(:name => 'Foo', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => false, :possible_values => ['a', 'b']) 
   | 
   | 
  2160 | 
  
        cf2 = IssueCustomField.create!(:name => 'Bar', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => true, :possible_values => ['a', 'b']) 
   | 
   | 
  2161 | 
  
        WorkflowPermission.delete_all 
   | 
   | 
  2162 | 
  
        WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf1.id.to_s, :rule => 'readonly') 
   | 
   | 
  2163 | 
  
        WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf2.id.to_s, :rule => 'readonly') 
   | 
   | 
  2164 | 
  
        @request.session[:user_id] = 2 
   | 
   | 
  2165 | 
  
    
   | 
   | 
  2166 | 
  
        assert_difference 'Issue.count' do 
   | 
   | 
  2167 | 
  
          post :create, :project_id => 1, :issue => {
   | 
   | 
  2168 | 
  
            :tracker_id => 2, 
   | 
   | 
  2169 | 
  
            :status_id => 1, 
   | 
   | 
  2170 | 
  
            :subject => 'Test', 
   | 
   | 
  2171 | 
  
            :start_date => '2012-07-14', 
   | 
   | 
  2172 | 
  
            :due_date => '2012-07-16', 
   | 
   | 
  2173 | 
  
            :custom_field_values => {cf1.id.to_s => 'value1', cf2.id.to_s => ['value2']}
   | 
   | 
  2174 | 
  
          } 
   | 
   | 
  2175 | 
  
          assert_response 302 
   | 
   | 
  2176 | 
  
        end 
   | 
   | 
  2177 | 
  
    
   | 
   | 
  2178 | 
  
        issue = Issue.order('id DESC').first
   | 
   | 
  2179 | 
  
        assert_equal nil, issue.custom_field_value(cf1) 
   | 
   | 
  2180 | 
  
        assert_equal [nil], issue.custom_field_value(cf2) 
   | 
   | 
  2181 | 
  
      end 
   | 
   | 
  2182 | 
  
    
   | 
  | 2133 | 
  2183 | 
  
      def test_post_create_with_watchers 
   | 
  | 2134 | 
  2184 | 
  
        @request.session[:user_id] = 2 
   | 
  | 2135 | 
  2185 | 
  
        ActionMailer::Base.deliveries.clear 
   | 
  | ... | ... |  | 
  | 2312 | 
  2362 | 
  
                                  :custom_field_values => {'2' => 'Value for field 2'}}
   | 
  | 2313 | 
  2363 | 
  
          end 
   | 
  | 2314 | 
  2364 | 
  
          assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id 
   | 
  | 2315 | 
   | 
  
       
   | 
   | 
  2365 | 
  
    
   | 
  | 2316 | 
  2366 | 
  
          assert_equal 1, ActionMailer::Base.deliveries.size 
   | 
  | 2317 | 
  2367 | 
  
        end 
   | 
  | 2318 | 
  2368 | 
  
      end 
   | 
  | ... | ... |  | 
  | 2482 | 
  2532 | 
  
        get :new, :project_id => 1 
   | 
  | 2483 | 
  2533 | 
  
        assert_response :success 
   | 
  | 2484 | 
  2534 | 
  
        assert_template 'new' 
   | 
  | 2485 | 
   | 
  
         
   | 
   | 
  2535 | 
  
    
   | 
  | 2486 | 
  2536 | 
  
        issue = assigns(:issue) 
   | 
  | 2487 | 
  2537 | 
  
        assert_not_nil issue.default_status 
   | 
  | 2488 | 
  2538 | 
  
    
   | 
  | ... | ... |  | 
  | 2862 | 
  2912 | 
  
      def test_get_edit_should_display_the_time_entry_form_with_log_time_permission 
   | 
  | 2863 | 
  2913 | 
  
        @request.session[:user_id] = 2 
   | 
  | 2864 | 
  2914 | 
  
        Role.find_by_name('Manager').update_attribute :permissions, [:view_issues, :edit_issues, :log_time]
   | 
  | 2865 | 
   | 
  
         
   | 
   | 
  2915 | 
  
    
   | 
  | 2866 | 
  2916 | 
  
        get :edit, :id => 1 
   | 
  | 2867 | 
  2917 | 
  
        assert_select 'input[name=?]', 'time_entry[hours]' 
   | 
  | 2868 | 
  2918 | 
  
      end 
   | 
  | ... | ... |  | 
  | 2870 | 
  2920 | 
  
      def test_get_edit_should_not_display_the_time_entry_form_without_log_time_permission 
   | 
  | 2871 | 
  2921 | 
  
        @request.session[:user_id] = 2 
   | 
  | 2872 | 
  2922 | 
  
        Role.find_by_name('Manager').remove_permission! :log_time
   | 
  | 2873 | 
   | 
  
         
   | 
   | 
  2923 | 
  
    
   | 
  | 2874 | 
  2924 | 
  
        get :edit, :id => 1 
   | 
  | 2875 | 
  2925 | 
  
        assert_select 'input[name=?]', 'time_entry[hours]', 0 
   | 
  | 2876 | 
  2926 | 
  
      end 
   | 
  | ... | ... |  | 
  | 3483 | 
  3533 | 
  
    
   | 
  | 3484 | 
  3534 | 
  
          assert_select 'select[name=?]', 'issue[project_id]' 
   | 
  | 3485 | 
  3535 | 
  
          assert_select 'input[name=?]', 'issue[parent_issue_id]' 
   | 
  | 3486 | 
   | 
  
       
   | 
   | 
  3536 | 
  
    
   | 
  | 3487 | 
  3537 | 
  
          # Project specific custom field, date type 
   | 
  | 3488 | 
  3538 | 
  
          field = CustomField.find(9) 
   | 
  | 3489 | 
  3539 | 
  
          assert !field.is_for_all? 
   | 
  | 3490 | 
  3540 | 
  
          assert_equal 'date', field.field_format 
   | 
  | 3491 | 
  3541 | 
  
          assert_select 'input[name=?]', 'issue[custom_field_values][9]' 
   | 
  | 3492 | 
   | 
  
       
   | 
   | 
  3542 | 
  
    
   | 
  | 3493 | 
  3543 | 
  
          # System wide custom field 
   | 
  | 3494 | 
  3544 | 
  
          assert CustomField.find(1).is_for_all? 
   | 
  | 3495 | 
  3545 | 
  
          assert_select 'select[name=?]', 'issue[custom_field_values][1]' 
   | 
  | 3496 | 
   | 
  
       
   | 
   | 
  3546 | 
  
    
   | 
  | 3497 | 
  3547 | 
  
          # Be sure we don't display inactive IssuePriorities 
   | 
  | 3498 | 
  3548 | 
  
          assert ! IssuePriority.find(15).active? 
   | 
  | 3499 | 
  3549 | 
  
          assert_select 'select[name=?]', 'issue[priority_id]' do 
   | 
  | ... | ... |  | 
  | 3959 | 
  4009 | 
  
          assert_select 'option[value="2"]' 
   | 
  | 3960 | 
  4010 | 
  
        end 
   | 
  | 3961 | 
  4011 | 
  
      end 
   | 
  | 3962 | 
   | 
  
       
   | 
   | 
  4012 | 
  
    
   | 
  | 3963 | 
  4013 | 
  
      def test_bulk_copy_to_another_project 
   | 
  | 3964 | 
  4014 | 
  
        @request.session[:user_id] = 2 
   | 
  | 3965 | 
  4015 | 
  
        assert_difference 'Issue.count', 2 do 
   | 
  | ... | ... |  | 
  | 4012 | 
  4062 | 
  
                        :assigned_to_id => 3) 
   | 
  | 4013 | 
  4063 | 
  
        ] 
   | 
  | 4014 | 
  4064 | 
  
        assert_difference 'Issue.count', issues.size do 
   | 
  | 4015 | 
   | 
  
          post :bulk_update, :ids => issues.map(&:id), :copy => '1',  
   | 
   | 
  4065 | 
  
          post :bulk_update, :ids => issues.map(&:id), :copy => '1', 
   | 
  | 4016 | 
  4066 | 
  
               :issue => {
   | 
  | 4017 | 
  4067 | 
  
                 :project_id => '', :tracker_id => '', :assigned_to_id => '', 
   | 
  | 4018 | 
  4068 | 
  
                 :status_id => '', :start_date => '', :due_date => '' 
   | 
  | ... | ... |  | 
  | 4040 | 
  4090 | 
  
        @request.session[:user_id] = 2 
   | 
  | 4041 | 
  4091 | 
  
        assert_difference 'Issue.count', 2 do 
   | 
  | 4042 | 
  4092 | 
  
          assert_no_difference 'Project.find(1).issues.count' do 
   | 
  | 4043 | 
   | 
  
            post :bulk_update, :ids => [1, 2], :copy => '1',  
   | 
   | 
  4093 | 
  
            post :bulk_update, :ids => [1, 2], :copy => '1', 
   | 
  | 4044 | 
  4094 | 
  
                 :issue => {
   | 
  | 4045 | 
  4095 | 
  
                   :project_id => '2', :tracker_id => '', :assigned_to_id => '4', 
   | 
  | 4046 | 
  4096 | 
  
                   :status_id => '1', :start_date => '2009-12-01', :due_date => '2009-12-31' 
   |