| 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'
|