217 |
217 |
:f => [filter_name],
|
218 |
218 |
:op => {filter_name => '='},
|
219 |
219 |
:v => {filter_name => ['Foo']},
|
220 |
|
:c => ['project']
|
|
220 |
:c => ['id', 'project']
|
221 |
221 |
assert_response :success
|
222 |
222 |
|
223 |
223 |
assert_equal [3, 5], issues_in_list.map(&:project_id).uniq.sort
|
... | ... | |
455 |
455 |
assert_response :success
|
456 |
456 |
|
457 |
457 |
assert_equal 'text/csv; header=present', @response.content_type
|
458 |
|
assert response.body.starts_with?("#,")
|
|
458 |
assert response.body.starts_with?("Project,")
|
459 |
459 |
lines = response.body.chomp.split("\n")
|
460 |
|
# default columns + id and project
|
461 |
|
assert_equal Setting.issue_list_default_columns.size + 2, lines[0].split(',').size
|
|
460 |
# default columns + project
|
|
461 |
assert_equal Setting.issue_list_default_columns.size + 1, lines[0].split(',').size
|
462 |
462 |
end
|
463 |
463 |
|
464 |
464 |
def test_index_csv_with_project
|
... | ... | |
495 |
495 |
issue = Issue.create!(:project_id => 1, :tracker_id => 1, :subject => 'test_index_csv_with_spent_time_column', :author_id => 2)
|
496 |
496 |
TimeEntry.create!(:project => issue.project, :issue => issue, :hours => 7.33, :user => User.find(2), :spent_on => Date.today)
|
497 |
497 |
|
498 |
|
get :index, :format => 'csv', :set_filter => '1', :c => %w(subject spent_hours)
|
|
498 |
get :index, :format => 'csv', :set_filter => '1', :c => %w(id subject spent_hours)
|
499 |
499 |
assert_response :success
|
500 |
500 |
assert_equal 'text/csv; header=present', @response.content_type
|
501 |
501 |
lines = @response.body.chomp.split("\n")
|
... | ... | |
549 |
549 |
child = Issue.generate!(:parent_issue_id => parent.id)
|
550 |
550 |
|
551 |
551 |
with_settings :default_language => 'en' do
|
552 |
|
get :index, :format => 'csv', :c => %w(parent)
|
|
552 |
get :index, :format => 'csv', :c => %w(id parent)
|
553 |
553 |
end
|
554 |
554 |
lines = response.body.split("\n")
|
555 |
555 |
assert_include "#{child.id},#{parent.id}", lines
|
... | ... | |
561 |
561 |
str_big5 = "\xa4@\xa4\xeb".force_encoding('Big5')
|
562 |
562 |
issue = Issue.generate!(:subject => str_utf8)
|
563 |
563 |
|
564 |
|
get :index, :project_id => 1,
|
565 |
|
:f => ['subject'],
|
|
564 |
get :index, :project_id => 1,
|
|
565 |
:f => ['subject'],
|
566 |
566 |
:op => '=', :values => [str_utf8],
|
567 |
567 |
:format => 'csv'
|
568 |
568 |
assert_equal 'text/csv; header=present', @response.content_type
|
... | ... | |
580 |
580 |
str_utf8 = "\xe4\xbb\xa5\xe5\x86\x85".force_encoding('UTF-8')
|
581 |
581 |
issue = Issue.generate!(:subject => str_utf8)
|
582 |
582 |
|
583 |
|
get :index, :project_id => 1,
|
584 |
|
:f => ['subject'],
|
|
583 |
get :index, :project_id => 1,
|
|
584 |
:f => ['subject'],
|
585 |
585 |
:op => '=', :values => [str_utf8],
|
586 |
|
:c => ['status', 'subject'],
|
|
586 |
:c => ['id', 'status', 'subject'],
|
587 |
587 |
:format => 'csv',
|
588 |
588 |
:set_filter => 1
|
589 |
589 |
assert_equal 'text/csv; header=present', @response.content_type
|
... | ... | |
603 |
603 |
str1 = "test_index_csv_tw"
|
604 |
604 |
issue = Issue.generate!(:subject => str1, :estimated_hours => '1234.5')
|
605 |
605 |
|
606 |
|
get :index, :project_id => 1,
|
607 |
|
:f => ['subject'],
|
|
606 |
get :index, :project_id => 1,
|
|
607 |
:f => ['subject'],
|
608 |
608 |
:op => '=', :values => [str1],
|
609 |
|
:c => ['estimated_hours', 'subject'],
|
|
609 |
:c => ['id', 'estimated_hours', 'subject'],
|
610 |
610 |
:format => 'csv',
|
611 |
611 |
:set_filter => 1
|
612 |
612 |
assert_equal 'text/csv; header=present', @response.content_type
|
... | ... | |
620 |
620 |
str1 = "test_index_csv_fr"
|
621 |
621 |
issue = Issue.generate!(:subject => str1, :estimated_hours => '1234.5')
|
622 |
622 |
|
623 |
|
get :index, :project_id => 1,
|
624 |
|
:f => ['subject'],
|
|
623 |
get :index, :project_id => 1,
|
|
624 |
:f => ['subject'],
|
625 |
625 |
:op => '=', :values => [str1],
|
626 |
|
:c => ['estimated_hours', 'subject'],
|
|
626 |
:c => ['id', 'estimated_hours', 'subject'],
|
627 |
627 |
:format => 'csv',
|
628 |
628 |
:set_filter => 1
|
629 |
629 |
assert_equal 'text/csv; header=present', @response.content_type
|
... | ... | |
694 |
694 |
Setting.issue_list_default_columns = %w(subject author)
|
695 |
695 |
get :index, :sort => 'tracker'
|
696 |
696 |
end
|
697 |
|
|
|
697 |
|
698 |
698 |
def test_index_sort_by_assigned_to
|
699 |
699 |
get :index, :sort => 'assigned_to'
|
700 |
700 |
assert_response :success
|
701 |
|
|
|
701 |
|
702 |
702 |
assignees = issues_in_list.map(&:assigned_to).compact
|
703 |
703 |
assert_equal assignees.sort, assignees
|
704 |
704 |
assert_select 'table.issues.sort-by-assigned-to.sort-asc'
|
705 |
705 |
end
|
706 |
|
|
|
706 |
|
707 |
707 |
def test_index_sort_by_assigned_to_desc
|
708 |
708 |
get :index, :sort => 'assigned_to:desc'
|
709 |
709 |
assert_response :success
|
710 |
|
|
|
710 |
|
711 |
711 |
assignees = issues_in_list.map(&:assigned_to).compact
|
712 |
712 |
assert_equal assignees.sort.reverse, assignees
|
713 |
713 |
assert_select 'table.issues.sort-by-assigned-to.sort-desc'
|
714 |
714 |
end
|
715 |
|
|
|
715 |
|
716 |
716 |
def test_index_group_by_assigned_to
|
717 |
717 |
get :index, :group_by => 'assigned_to', :sort => 'priority'
|
718 |
718 |
assert_response :success
|
719 |
719 |
end
|
720 |
|
|
|
720 |
|
721 |
721 |
def test_index_sort_by_author
|
722 |
722 |
get :index, :sort => 'author', :c => ['author']
|
723 |
723 |
assert_response :success
|
724 |
|
|
|
724 |
|
725 |
725 |
authors = issues_in_list.map(&:author)
|
726 |
726 |
assert_equal authors.sort, authors
|
727 |
727 |
end
|
... | ... | |
729 |
729 |
def test_index_sort_by_author_desc
|
730 |
730 |
get :index, :sort => 'author:desc'
|
731 |
731 |
assert_response :success
|
732 |
|
|
|
732 |
|
733 |
733 |
authors = issues_in_list.map(&:author)
|
734 |
734 |
assert_equal authors.sort.reverse, authors
|
735 |
735 |
end
|
736 |
|
|
|
736 |
|
737 |
737 |
def test_index_group_by_author
|
738 |
738 |
get :index, :group_by => 'author', :sort => 'priority'
|
739 |
739 |
assert_response :success
|
740 |
740 |
end
|
741 |
|
|
|
741 |
|
742 |
742 |
def test_index_sort_by_spent_hours
|
743 |
743 |
get :index, :sort => 'spent_hours:desc'
|
744 |
744 |
assert_response :success
|
745 |
745 |
hours = issues_in_list.map(&:spent_hours)
|
746 |
746 |
assert_equal hours.sort.reverse, hours
|
747 |
747 |
end
|
748 |
|
|
|
748 |
|
749 |
749 |
def test_index_sort_by_total_spent_hours
|
750 |
750 |
get :index, :sort => 'total_spent_hours:desc'
|
751 |
751 |
assert_response :success
|
752 |
752 |
hours = issues_in_list.map(&:total_spent_hours)
|
753 |
753 |
assert_equal hours.sort.reverse, hours
|
754 |
754 |
end
|
755 |
|
|
|
755 |
|
756 |
756 |
def test_index_sort_by_total_estimated_hours
|
757 |
757 |
get :index, :sort => 'total_estimated_hours:desc'
|
758 |
758 |
assert_response :success
|
... | ... | |
767 |
767 |
CustomValue.create!(:custom_field => cf, :customized => Issue.find(3), :value => '3')
|
768 |
768 |
CustomValue.create!(:custom_field => cf, :customized => Issue.find(5), :value => '')
|
769 |
769 |
|
770 |
|
get :index, :project_id => 1, :set_filter => 1, :sort => "cf_#{cf.id},id"
|
|
770 |
get :index, :project_id => 1, :c => ["id"], :set_filter => 1, :sort => "cf_#{cf.id},id"
|
771 |
771 |
assert_response :success
|
772 |
772 |
|
773 |
773 |
assert_equal [2, 3, 1], issues_in_list.select {|issue| issue.custom_field_value(cf).present?}.map(&:id)
|
... | ... | |
778 |
778 |
get :index, :set_filter => 1, :c => columns
|
779 |
779 |
assert_response :success
|
780 |
780 |
|
781 |
|
# query should use specified columns + id and checkbox
|
782 |
|
assert_select 'table.issues thead th', columns.size + 2
|
|
781 |
# query should use specified columns + checkbox
|
|
782 |
assert_select 'table.issues thead th', columns.size + 1
|
783 |
783 |
|
784 |
784 |
# columns should be stored in session
|
785 |
785 |
assert_kind_of Hash, session[:issue_query]
|
... | ... | |
799 |
799 |
get :index, :set_filter => 1
|
800 |
800 |
|
801 |
801 |
# query should use specified columns
|
802 |
|
assert_equal ["#", "Project", "Tracker", "Subject", "Assignee"], columns_in_issues_list
|
|
802 |
assert_equal ["Project", "Tracker", "Subject", "Assignee"], columns_in_issues_list
|
803 |
803 |
end
|
804 |
804 |
|
805 |
805 |
def test_index_without_project_and_explicit_default_columns_should_not_add_project_column
|
... | ... | |
816 |
816 |
with_settings :issue_list_default_columns => columns do
|
817 |
817 |
get :index, :project_id => 1, :set_filter => 1
|
818 |
818 |
|
819 |
|
assert_equal ["#", "Assignee", "Subject", "Status", "Tracker"], columns_in_issues_list
|
|
819 |
assert_equal ["Assignee", "Subject", "Status", "Tracker"], columns_in_issues_list
|
820 |
820 |
end
|
821 |
821 |
end
|
822 |
822 |
|
823 |
823 |
def test_index_with_custom_field_column
|
824 |
|
columns = %w(tracker subject cf_2)
|
|
824 |
columns = %w(id tracker subject cf_2)
|
825 |
825 |
get :index, :set_filter => 1, :c => columns
|
826 |
826 |
assert_response :success
|
827 |
827 |
|
... | ... | |
915 |
915 |
IssueRelation.create!(:relation_type => "blocks", :issue_from => Issue.find(1), :issue_to => Issue.find(11))
|
916 |
916 |
IssueRelation.create!(:relation_type => "blocks", :issue_from => Issue.find(12), :issue_to => Issue.find(2))
|
917 |
917 |
|
918 |
|
get :index, :set_filter => 1, :c => %w(subject relations)
|
|
918 |
get :index, :set_filter => 1, :c => %w(id subject relations)
|
919 |
919 |
assert_response :success
|
920 |
920 |
assert_select "tr#issue-1 td.relations" do
|
921 |
921 |
assert_select "span", 3
|
... | ... | |
931 |
931 |
assert_select "span", 0
|
932 |
932 |
end
|
933 |
933 |
|
934 |
|
get :index, :set_filter => 1, :c => %w(relations), :format => 'csv'
|
|
934 |
get :index, :set_filter => 1, :c => %w(id relations), :format => 'csv'
|
935 |
935 |
assert_response :success
|
936 |
936 |
assert_equal 'text/csv; header=present', response.content_type
|
937 |
937 |
lines = response.body.chomp.split("\n")
|
... | ... | |
939 |
939 |
assert_include '2,Blocked by #12', lines
|
940 |
940 |
assert_include '3,""', lines
|
941 |
941 |
|
942 |
|
get :index, :set_filter => 1, :c => %w(subject relations), :format => 'pdf'
|
|
942 |
get :index, :set_filter => 1, :c => %w(id subject relations), :format => 'pdf'
|
943 |
943 |
assert_response :success
|
944 |
944 |
assert_equal 'application/pdf', response.content_type
|
945 |
945 |
end
|
... | ... | |
947 |
947 |
def test_index_with_description_column
|
948 |
948 |
get :index, :set_filter => 1, :c => %w(subject description)
|
949 |
949 |
|
950 |
|
assert_select 'table.issues thead th', 3 # columns: chekbox + id + subject
|
951 |
|
assert_select 'td.description[colspan="3"]', :text => 'Unable to print recipes'
|
|
950 |
assert_select 'table.issues thead th', 2 # columns: chekbox subject
|
|
951 |
assert_select 'td.description[colspan="2"]', :text => 'Unable to print recipes'
|
952 |
952 |
|
953 |
953 |
get :index, :set_filter => 1, :c => %w(subject description), :format => 'pdf'
|
954 |
954 |
assert_response :success
|
... | ... | |
1089 |
1089 |
def test_index_should_not_include_new_issue_tab_for_project_without_trackers
|
1090 |
1090 |
with_settings :new_item_menu_tab => '1' do
|
1091 |
1091 |
Project.find(1).trackers.clear
|
1092 |
|
|
|
1092 |
|
1093 |
1093 |
@request.session[:user_id] = 2
|
1094 |
1094 |
get :index, :project_id => 1
|
1095 |
1095 |
assert_select '#main-menu a.new-issue', 0
|
... | ... | |
1101 |
1101 |
role = Role.find(1)
|
1102 |
1102 |
role.remove_permission! :add_issues
|
1103 |
1103 |
role.add_permission! :copy_issues
|
1104 |
|
|
|
1104 |
|
1105 |
1105 |
@request.session[:user_id] = 2
|
1106 |
1106 |
get :index, :project_id => 1
|
1107 |
1107 |
assert_select '#main-menu a.new-issue', 0
|
... | ... | |
1377 |
1377 |
|
1378 |
1378 |
def test_show_should_display_prev_next_links_with_query_and_sort_on_association
|
1379 |
1379 |
@request.session[:query] = {:filters => {'status_id' => {:values => [''], :operator => 'o'}}, :project_id => nil}
|
1380 |
|
|
|
1380 |
|
1381 |
1381 |
%w(project tracker status priority author assigned_to category fixed_version).each do |assoc_sort|
|
1382 |
1382 |
@request.session['issues_index_sort'] = assoc_sort
|
1383 |
1383 |
|
... | ... | |
1610 |
1610 |
end
|
1611 |
1611 |
|
1612 |
1612 |
def test_show_export_to_pdf
|
1613 |
|
issue = Issue.find(3)
|
|
1613 |
issue = Issue.find(3)
|
1614 |
1614 |
assert issue.relations.select{|r| r.other_issue(issue).visible?}.present?
|
1615 |
1615 |
get :show, :id => 3, :format => 'pdf'
|
1616 |
1616 |
assert_response :success
|
... | ... | |
2039 |
2039 |
get :new, :project_id => 'invalid'
|
2040 |
2040 |
assert_response 404
|
2041 |
2041 |
end
|
2042 |
|
|
|
2042 |
|
2043 |
2043 |
def test_new_with_parent_id_should_only_propose_valid_trackers
|
2044 |
2044 |
@request.session[:user_id] = 2
|
2045 |
2045 |
t = Tracker.find(3)
|
... | ... | |
2588 |
2588 |
:custom_field_values => {'2' => 'Value for field 2'}}
|
2589 |
2589 |
end
|
2590 |
2590 |
assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
|
2591 |
|
|
|
2591 |
|
2592 |
2592 |
assert_equal 1, ActionMailer::Base.deliveries.size
|
2593 |
2593 |
end
|
2594 |
2594 |
end
|
... | ... | |
2862 |
2862 |
assert_select 'option[value="1"][selected=selected]', :text => 'eCookbook'
|
2863 |
2863 |
assert_select 'option[value="2"]:not([selected])', :text => 'OnlineStore'
|
2864 |
2864 |
end
|
2865 |
|
assert_select 'input[name=?][value=?]', 'issue[subject]', orig.subject
|
|
2865 |
assert_select 'input[name=?][value=?]', 'issue[subject]', orig.subject
|
2866 |
2866 |
assert_select 'input[name=copy_from][value="1"]'
|
2867 |
2867 |
end
|
2868 |
2868 |
end
|
... | ... | |
3137 |
3137 |
def test_get_edit_should_display_the_time_entry_form_with_log_time_permission
|
3138 |
3138 |
@request.session[:user_id] = 2
|
3139 |
3139 |
Role.find_by_name('Manager').update_attribute :permissions, [:view_issues, :edit_issues, :log_time]
|
3140 |
|
|
|
3140 |
|
3141 |
3141 |
get :edit, :id => 1
|
3142 |
3142 |
assert_select 'input[name=?]', 'time_entry[hours]'
|
3143 |
3143 |
end
|
... | ... | |
3145 |
3145 |
def test_get_edit_should_not_display_the_time_entry_form_without_log_time_permission
|
3146 |
3146 |
@request.session[:user_id] = 2
|
3147 |
3147 |
Role.find_by_name('Manager').remove_permission! :log_time
|
3148 |
|
|
|
3148 |
|
3149 |
3149 |
get :edit, :id => 1
|
3150 |
3150 |
assert_select 'input[name=?]', 'time_entry[hours]', 0
|
3151 |
3151 |
end
|
... | ... | |
3790 |
3790 |
assert_response :redirect
|
3791 |
3791 |
assert_redirected_to :controller => 'issues', :action => 'show', :id => issue.id
|
3792 |
3792 |
end
|
3793 |
|
|
|
3793 |
|
3794 |
3794 |
def test_put_update_should_redirect_with_previous_and_next_issue_ids_params
|
3795 |
3795 |
@request.session[:user_id] = 2
|
3796 |
3796 |
|
... | ... | |
3844 |
3844 |
|
3845 |
3845 |
assert_select 'select[name=?]', 'issue[project_id]'
|
3846 |
3846 |
assert_select 'input[name=?]', 'issue[parent_issue_id]'
|
3847 |
|
|
|
3847 |
|
3848 |
3848 |
# Project specific custom field, date type
|
3849 |
3849 |
field = CustomField.find(9)
|
3850 |
3850 |
assert !field.is_for_all?
|
3851 |
3851 |
assert_equal 'date', field.field_format
|
3852 |
3852 |
assert_select 'input[name=?]', 'issue[custom_field_values][9]'
|
3853 |
|
|
|
3853 |
|
3854 |
3854 |
# System wide custom field
|
3855 |
3855 |
assert CustomField.find(1).is_for_all?
|
3856 |
3856 |
assert_select 'select[name=?]', 'issue[custom_field_values][1]'
|
3857 |
|
|
|
3857 |
|
3858 |
3858 |
# Be sure we don't display inactive IssuePriorities
|
3859 |
3859 |
assert ! IssuePriority.find(15).active?
|
3860 |
3860 |
assert_select 'select[name=?]', 'issue[priority_id]' do
|
... | ... | |
4027 |
4027 |
:issue => {:priority_id => '',
|
4028 |
4028 |
:assigned_to_id => group.id,
|
4029 |
4029 |
:custom_field_values => {'2' => ''}}
|
4030 |
|
|
|
4030 |
|
4031 |
4031 |
assert_response 302
|
4032 |
4032 |
assert_equal [group, group], Issue.where(:id => [1, 2]).collect {|i| i.assigned_to}
|
4033 |
4033 |
end
|
... | ... | |
4333 |
4333 |
assert_select 'option[value="2"]'
|
4334 |
4334 |
end
|
4335 |
4335 |
end
|
4336 |
|
|
|
4336 |
|
4337 |
4337 |
def test_bulk_copy_to_another_project
|
4338 |
4338 |
@request.session[:user_id] = 2
|
4339 |
4339 |
assert_difference 'Issue.count', 2 do
|
... | ... | |
4386 |
4386 |
:assigned_to_id => 3)
|
4387 |
4387 |
]
|
4388 |
4388 |
assert_difference 'Issue.count', issues.size do
|
4389 |
|
post :bulk_update, :ids => issues.map(&:id), :copy => '1',
|
|
4389 |
post :bulk_update, :ids => issues.map(&:id), :copy => '1',
|
4390 |
4390 |
:issue => {
|
4391 |
4391 |
:project_id => '', :tracker_id => '', :assigned_to_id => '',
|
4392 |
4392 |
:status_id => '', :start_date => '', :due_date => ''
|
... | ... | |
4414 |
4414 |
@request.session[:user_id] = 2
|
4415 |
4415 |
assert_difference 'Issue.count', 2 do
|
4416 |
4416 |
assert_no_difference 'Project.find(1).issues.count' do
|
4417 |
|
post :bulk_update, :ids => [1, 2], :copy => '1',
|
|
4417 |
post :bulk_update, :ids => [1, 2], :copy => '1',
|
4418 |
4418 |
:issue => {
|
4419 |
4419 |
:project_id => '2', :tracker_id => '', :assigned_to_id => '2',
|
4420 |
4420 |
:status_id => '1', :start_date => '2009-12-01', :due_date => '2009-12-31'
|