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
|
... | ... | |
696 |
696 |
assert_response :success
|
697 |
697 |
end
|
698 |
698 |
end
|
699 |
|
|
|
699 |
|
700 |
700 |
def test_index_sort_by_assigned_to
|
701 |
701 |
get :index, :sort => 'assigned_to'
|
702 |
702 |
assert_response :success
|
703 |
|
|
|
703 |
|
704 |
704 |
assignees = issues_in_list.map(&:assigned_to).compact
|
705 |
705 |
assert_equal assignees.sort, assignees
|
706 |
706 |
assert_select 'table.issues.sort-by-assigned-to.sort-asc'
|
707 |
707 |
end
|
708 |
|
|
|
708 |
|
709 |
709 |
def test_index_sort_by_assigned_to_desc
|
710 |
710 |
get :index, :sort => 'assigned_to:desc'
|
711 |
711 |
assert_response :success
|
712 |
|
|
|
712 |
|
713 |
713 |
assignees = issues_in_list.map(&:assigned_to).compact
|
714 |
714 |
assert_equal assignees.sort.reverse, assignees
|
715 |
715 |
assert_select 'table.issues.sort-by-assigned-to.sort-desc'
|
716 |
716 |
end
|
717 |
|
|
|
717 |
|
718 |
718 |
def test_index_group_by_assigned_to
|
719 |
719 |
get :index, :group_by => 'assigned_to', :sort => 'priority'
|
720 |
720 |
assert_response :success
|
721 |
721 |
end
|
722 |
|
|
|
722 |
|
723 |
723 |
def test_index_sort_by_author
|
724 |
724 |
get :index, :sort => 'author', :c => ['author']
|
725 |
725 |
assert_response :success
|
726 |
|
|
|
726 |
|
727 |
727 |
authors = issues_in_list.map(&:author)
|
728 |
728 |
assert_equal authors.sort, authors
|
729 |
729 |
end
|
... | ... | |
731 |
731 |
def test_index_sort_by_author_desc
|
732 |
732 |
get :index, :sort => 'author:desc'
|
733 |
733 |
assert_response :success
|
734 |
|
|
|
734 |
|
735 |
735 |
authors = issues_in_list.map(&:author)
|
736 |
736 |
assert_equal authors.sort.reverse, authors
|
737 |
737 |
end
|
738 |
|
|
|
738 |
|
739 |
739 |
def test_index_group_by_author
|
740 |
740 |
get :index, :group_by => 'author', :sort => 'priority'
|
741 |
741 |
assert_response :success
|
742 |
742 |
end
|
743 |
|
|
|
743 |
|
744 |
744 |
def test_index_sort_by_spent_hours
|
745 |
745 |
get :index, :sort => 'spent_hours:desc'
|
746 |
746 |
assert_response :success
|
747 |
747 |
hours = issues_in_list.map(&:spent_hours)
|
748 |
748 |
assert_equal hours.sort.reverse, hours
|
749 |
749 |
end
|
750 |
|
|
|
750 |
|
751 |
751 |
def test_index_sort_by_total_spent_hours
|
752 |
752 |
get :index, :sort => 'total_spent_hours:desc'
|
753 |
753 |
assert_response :success
|
754 |
754 |
hours = issues_in_list.map(&:total_spent_hours)
|
755 |
755 |
assert_equal hours.sort.reverse, hours
|
756 |
756 |
end
|
757 |
|
|
|
757 |
|
758 |
758 |
def test_index_sort_by_total_estimated_hours
|
759 |
759 |
get :index, :sort => 'total_estimated_hours:desc'
|
760 |
760 |
assert_response :success
|
... | ... | |
769 |
769 |
CustomValue.create!(:custom_field => cf, :customized => Issue.find(3), :value => '3')
|
770 |
770 |
CustomValue.create!(:custom_field => cf, :customized => Issue.find(5), :value => '')
|
771 |
771 |
|
772 |
|
get :index, :project_id => 1, :set_filter => 1, :sort => "cf_#{cf.id},id"
|
|
772 |
get :index, :project_id => 1, :c => ["id"], :set_filter => 1, :sort => "cf_#{cf.id},id"
|
773 |
773 |
assert_response :success
|
774 |
774 |
|
775 |
775 |
assert_equal [2, 3, 1], issues_in_list.select {|issue| issue.custom_field_value(cf).present?}.map(&:id)
|
... | ... | |
780 |
780 |
get :index, :set_filter => 1, :c => columns
|
781 |
781 |
assert_response :success
|
782 |
782 |
|
783 |
|
# query should use specified columns + id and checkbox
|
784 |
|
assert_select 'table.issues thead th', columns.size + 2
|
|
783 |
# query should use specified columns + checkbox
|
|
784 |
assert_select 'table.issues thead th', columns.size + 1
|
785 |
785 |
|
786 |
786 |
# columns should be stored in session
|
787 |
787 |
assert_kind_of Hash, session[:issue_query]
|
... | ... | |
802 |
802 |
end
|
803 |
803 |
|
804 |
804 |
# query should use specified columns
|
805 |
|
assert_equal ["#", "Project", "Tracker", "Subject", "Assignee"], columns_in_issues_list
|
|
805 |
assert_equal ["Project", "Tracker", "Subject", "Assignee"], columns_in_issues_list
|
806 |
806 |
end
|
807 |
807 |
|
808 |
808 |
def test_index_without_project_and_explicit_default_columns_should_not_add_project_column
|
... | ... | |
820 |
820 |
with_settings :issue_list_default_columns => columns do
|
821 |
821 |
get :index, :project_id => 1, :set_filter => 1
|
822 |
822 |
|
823 |
|
assert_equal ["#", "Assignee", "Subject", "Status", "Tracker"], columns_in_issues_list
|
|
823 |
assert_equal ["Assignee", "Subject", "Status", "Tracker"], columns_in_issues_list
|
824 |
824 |
end
|
825 |
825 |
end
|
826 |
826 |
|
827 |
827 |
def test_index_with_custom_field_column
|
828 |
|
columns = %w(tracker subject cf_2)
|
|
828 |
columns = %w(id tracker subject cf_2)
|
829 |
829 |
get :index, :set_filter => 1, :c => columns
|
830 |
830 |
assert_response :success
|
831 |
831 |
|
... | ... | |
919 |
919 |
IssueRelation.create!(:relation_type => "blocks", :issue_from => Issue.find(1), :issue_to => Issue.find(11))
|
920 |
920 |
IssueRelation.create!(:relation_type => "blocks", :issue_from => Issue.find(12), :issue_to => Issue.find(2))
|
921 |
921 |
|
922 |
|
get :index, :set_filter => 1, :c => %w(subject relations)
|
|
922 |
get :index, :set_filter => 1, :c => %w(id subject relations)
|
923 |
923 |
assert_response :success
|
924 |
924 |
assert_select "tr#issue-1 td.relations" do
|
925 |
925 |
assert_select "span", 3
|
... | ... | |
935 |
935 |
assert_select "span", 0
|
936 |
936 |
end
|
937 |
937 |
|
938 |
|
get :index, :set_filter => 1, :c => %w(relations), :format => 'csv'
|
|
938 |
get :index, :set_filter => 1, :c => %w(id relations), :format => 'csv'
|
939 |
939 |
assert_response :success
|
940 |
940 |
assert_equal 'text/csv; header=present', response.content_type
|
941 |
941 |
lines = response.body.chomp.split("\n")
|
... | ... | |
943 |
943 |
assert_include '2,Blocked by #12', lines
|
944 |
944 |
assert_include '3,""', lines
|
945 |
945 |
|
946 |
|
get :index, :set_filter => 1, :c => %w(subject relations), :format => 'pdf'
|
|
946 |
get :index, :set_filter => 1, :c => %w(id subject relations), :format => 'pdf'
|
947 |
947 |
assert_response :success
|
948 |
948 |
assert_equal 'application/pdf', response.content_type
|
949 |
949 |
end
|
... | ... | |
951 |
951 |
def test_index_with_description_column
|
952 |
952 |
get :index, :set_filter => 1, :c => %w(subject description)
|
953 |
953 |
|
954 |
|
assert_select 'table.issues thead th', 3 # columns: chekbox + id + subject
|
955 |
|
assert_select 'td.description[colspan="3"]', :text => 'Unable to print recipes'
|
|
954 |
assert_select 'table.issues thead th', 2 # columns: chekbox subject
|
|
955 |
assert_select 'td.description[colspan="2"]', :text => 'Unable to print recipes'
|
956 |
956 |
|
957 |
957 |
get :index, :set_filter => 1, :c => %w(subject description), :format => 'pdf'
|
958 |
958 |
assert_response :success
|
... | ... | |
1093 |
1093 |
def test_index_should_not_include_new_issue_tab_for_project_without_trackers
|
1094 |
1094 |
with_settings :new_item_menu_tab => '1' do
|
1095 |
1095 |
Project.find(1).trackers.clear
|
1096 |
|
|
|
1096 |
|
1097 |
1097 |
@request.session[:user_id] = 2
|
1098 |
1098 |
get :index, :project_id => 1
|
1099 |
1099 |
assert_select '#main-menu a.new-issue', 0
|
... | ... | |
1105 |
1105 |
role = Role.find(1)
|
1106 |
1106 |
role.remove_permission! :add_issues
|
1107 |
1107 |
role.add_permission! :copy_issues
|
1108 |
|
|
|
1108 |
|
1109 |
1109 |
@request.session[:user_id] = 2
|
1110 |
1110 |
get :index, :project_id => 1
|
1111 |
1111 |
assert_select '#main-menu a.new-issue', 0
|
... | ... | |
1614 |
1614 |
end
|
1615 |
1615 |
|
1616 |
1616 |
def test_show_export_to_pdf
|
1617 |
|
issue = Issue.find(3)
|
|
1617 |
issue = Issue.find(3)
|
1618 |
1618 |
assert issue.relations.select{|r| r.other_issue(issue).visible?}.present?
|
1619 |
1619 |
get :show, :id => 3, :format => 'pdf'
|
1620 |
1620 |
assert_response :success
|
... | ... | |
2062 |
2062 |
get :new, :project_id => 'invalid'
|
2063 |
2063 |
assert_response 404
|
2064 |
2064 |
end
|
2065 |
|
|
|
2065 |
|
2066 |
2066 |
def test_new_with_parent_id_should_only_propose_valid_trackers
|
2067 |
2067 |
@request.session[:user_id] = 2
|
2068 |
2068 |
t = Tracker.find(3)
|
... | ... | |
2611 |
2611 |
:custom_field_values => {'2' => 'Value for field 2'}}
|
2612 |
2612 |
end
|
2613 |
2613 |
assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
|
2614 |
|
|
|
2614 |
|
2615 |
2615 |
assert_equal 1, ActionMailer::Base.deliveries.size
|
2616 |
2616 |
end
|
2617 |
2617 |
end
|
... | ... | |
2885 |
2885 |
assert_select 'option[value="1"][selected=selected]', :text => 'eCookbook'
|
2886 |
2886 |
assert_select 'option[value="2"]:not([selected])', :text => 'OnlineStore'
|
2887 |
2887 |
end
|
2888 |
|
assert_select 'input[name=?][value=?]', 'issue[subject]', orig.subject
|
|
2888 |
assert_select 'input[name=?][value=?]', 'issue[subject]', orig.subject
|
2889 |
2889 |
assert_select 'input[name=copy_from][value="1"]'
|
2890 |
2890 |
end
|
2891 |
2891 |
end
|
... | ... | |
3180 |
3180 |
def test_get_edit_should_display_the_time_entry_form_with_log_time_permission
|
3181 |
3181 |
@request.session[:user_id] = 2
|
3182 |
3182 |
Role.find_by_name('Manager').update_attribute :permissions, [:view_issues, :edit_issues, :log_time]
|
3183 |
|
|
|
3183 |
|
3184 |
3184 |
get :edit, :id => 1
|
3185 |
3185 |
assert_select 'input[name=?]', 'time_entry[hours]'
|
3186 |
3186 |
end
|
... | ... | |
3188 |
3188 |
def test_get_edit_should_not_display_the_time_entry_form_without_log_time_permission
|
3189 |
3189 |
@request.session[:user_id] = 2
|
3190 |
3190 |
Role.find_by_name('Manager').remove_permission! :log_time
|
3191 |
|
|
|
3191 |
|
3192 |
3192 |
get :edit, :id => 1
|
3193 |
3193 |
assert_select 'input[name=?]', 'time_entry[hours]', 0
|
3194 |
3194 |
end
|
... | ... | |
3833 |
3833 |
assert_response :redirect
|
3834 |
3834 |
assert_redirected_to :controller => 'issues', :action => 'show', :id => issue.id
|
3835 |
3835 |
end
|
3836 |
|
|
|
3836 |
|
3837 |
3837 |
def test_put_update_should_redirect_with_previous_and_next_issue_ids_params
|
3838 |
3838 |
@request.session[:user_id] = 2
|
3839 |
3839 |
|
... | ... | |
3887 |
3887 |
|
3888 |
3888 |
assert_select 'select[name=?]', 'issue[project_id]'
|
3889 |
3889 |
assert_select 'input[name=?]', 'issue[parent_issue_id]'
|
3890 |
|
|
|
3890 |
|
3891 |
3891 |
# Project specific custom field, date type
|
3892 |
3892 |
field = CustomField.find(9)
|
3893 |
3893 |
assert !field.is_for_all?
|
3894 |
3894 |
assert_equal 'date', field.field_format
|
3895 |
3895 |
assert_select 'input[name=?]', 'issue[custom_field_values][9]'
|
3896 |
|
|
|
3896 |
|
3897 |
3897 |
# System wide custom field
|
3898 |
3898 |
assert CustomField.find(1).is_for_all?
|
3899 |
3899 |
assert_select 'select[name=?]', 'issue[custom_field_values][1]'
|
3900 |
|
|
|
3900 |
|
3901 |
3901 |
# Be sure we don't display inactive IssuePriorities
|
3902 |
3902 |
assert ! IssuePriority.find(15).active?
|
3903 |
3903 |
assert_select 'select[name=?]', 'issue[priority_id]' do
|
... | ... | |
4084 |
4084 |
:issue => {:priority_id => '',
|
4085 |
4085 |
:assigned_to_id => group.id,
|
4086 |
4086 |
:custom_field_values => {'2' => ''}}
|
4087 |
|
|
|
4087 |
|
4088 |
4088 |
assert_response 302
|
4089 |
4089 |
assert_equal [group, group], Issue.where(:id => [1, 2]).collect {|i| i.assigned_to}
|
4090 |
4090 |
end
|
... | ... | |
4390 |
4390 |
assert_select 'option[value="2"]'
|
4391 |
4391 |
end
|
4392 |
4392 |
end
|
4393 |
|
|
|
4393 |
|
4394 |
4394 |
def test_bulk_copy_to_another_project
|
4395 |
4395 |
@request.session[:user_id] = 2
|
4396 |
4396 |
assert_difference 'Issue.count', 2 do
|
... | ... | |
4443 |
4443 |
:assigned_to_id => 3)
|
4444 |
4444 |
]
|
4445 |
4445 |
assert_difference 'Issue.count', issues.size do
|
4446 |
|
post :bulk_update, :ids => issues.map(&:id), :copy => '1',
|
|
4446 |
post :bulk_update, :ids => issues.map(&:id), :copy => '1',
|
4447 |
4447 |
:issue => {
|
4448 |
4448 |
:project_id => '', :tracker_id => '', :assigned_to_id => '',
|
4449 |
4449 |
:status_id => '', :start_date => '', :due_date => ''
|
... | ... | |
4471 |
4471 |
@request.session[:user_id] = 2
|
4472 |
4472 |
assert_difference 'Issue.count', 2 do
|
4473 |
4473 |
assert_no_difference 'Project.find(1).issues.count' do
|
4474 |
|
post :bulk_update, :ids => [1, 2], :copy => '1',
|
|
4474 |
post :bulk_update, :ids => [1, 2], :copy => '1',
|
4475 |
4475 |
:issue => {
|
4476 |
4476 |
:project_id => '2', :tracker_id => '', :assigned_to_id => '2',
|
4477 |
4477 |
:status_id => '1', :start_date => '2009-12-01', :due_date => '2009-12-31'
|