@@ -16,7 +16,6 | |||||
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 |
|
17 | |||
18 | class IssuesController < ApplicationController |
|
18 | class IssuesController < ApplicationController | |
19 | menu_item :new_issue, :only => [:new, :create] |
|
|||
20 | default_search_scope :issues |
|
19 | default_search_scope :issues | |
21 |
|
20 | |||
22 | before_filter :find_issue, :only => [:show, :edit, :update] |
|
21 | before_filter :find_issue, :only => [:show, :edit, :update] |
@@ -1,8 +1,7 | |||||
1 | <div class="contextual"> |
|
1 | <div class="contextual"> | |
2 | <% if !@query.new_record? && @query.editable_by?(User.current) %> |
|
2 | <% if @project && User.current.allowed_to?(:add_issues, @project) && @project.trackers.any? %> | |
3 |
<%= link_to l(: |
|
3 | <%= link_to l(:label_issue_new), new_project_issue_path(@project), :class => 'icon icon-add new-issue' %> | |
4 | <%= delete_link query_path(@query) %> |
|
4 | <% end %> | |
5 | <% end %> |
|
|||
6 | </div> |
|
5 | </div> | |
7 |
|
6 | |||
8 | <h2><%= @query.new_record? ? l(:label_issue_plural) : @query.name %></h2> |
|
7 | <h2><%= @query.new_record? ? l(:label_issue_plural) : @query.name %></h2> | |
@@ -50,10 +49,17 | |||||
50 | <p class="buttons"> |
|
49 | <p class="buttons"> | |
51 | <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %> |
|
50 | <%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %> | |
52 | <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> |
|
51 | <%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %> | |
53 | <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> |
|
52 | <% if @query.new_record? %> | |
|
53 | <% if User.current.allowed_to?(:save_queries, @project, :global => true) %> | |||
54 | <%= link_to_function l(:button_save), |
|
54 | <%= link_to_function l(:button_save), | |
55 | "$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit()", |
|
55 | "$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit()", | |
56 | :class => 'icon icon-save' %> |
|
56 | :class => 'icon icon-save' %> | |
|
57 | <% end %> | |||
|
58 | <% else %> | |||
|
59 | <% if @query.editable_by?(User.current) %> | |||
|
60 | <%= link_to l(:button_edit), edit_query_path(@query), :class => 'icon icon-edit' %> | |||
|
61 | <%= delete_link query_path(@query) %> | |||
|
62 | <% end %> | |||
57 | <% end %> |
|
63 | <% end %> | |
58 | </p> |
|
64 | </p> | |
59 | </div> |
|
65 | </div> |
@@ -231,10 +231,6 Redmine::MenuManager.map :project_menu do |menu| | |||||
231 | menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id, |
|
231 | menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id, | |
232 | :if => Proc.new { |p| p.shared_versions.any? } |
|
232 | :if => Proc.new { |p| p.shared_versions.any? } | |
233 | menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural |
|
233 | menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural | |
234 | menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new, |
|
|||
235 | :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }, |
|
|||
236 | :if => Proc.new { |p| p.trackers.any? }, |
|
|||
237 | :permission => :add_issues |
|
|||
238 | menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt |
|
234 | menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt | |
239 | menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar |
|
235 | menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar | |
240 | menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural |
|
236 | menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural |
@@ -1057,6 +1057,30 class IssuesControllerTest < ActionController::TestCase | |||||
1057 | assert @response.body.blank? |
|
1057 | assert @response.body.blank? | |
1058 | end |
|
1058 | end | |
1059 |
|
1059 | |||
|
1060 | def test_index_should_include_new_issue_link | |||
|
1061 | @request.session[:user_id] = 2 | |||
|
1062 | get :index, :project_id => 1 | |||
|
1063 | assert_select 'a.new-issue[href="/projects/ecookbook/issues/new"]', :text => 'New issue' | |||
|
1064 | end | |||
|
1065 | ||||
|
1066 | def test_index_should_not_include_new_issue_link_for_project_without_trackers | |||
|
1067 | Project.find(1).trackers.clear | |||
|
1068 | ||||
|
1069 | @request.session[:user_id] = 2 | |||
|
1070 | get :index, :project_id => 1 | |||
|
1071 | assert_select 'a.new-issue', 0 | |||
|
1072 | end | |||
|
1073 | ||||
|
1074 | def test_index_should_not_include_new_issue_link_for_users_with_copy_issues_permission_only | |||
|
1075 | role = Role.find(1) | |||
|
1076 | role.remove_permission! :add_issues | |||
|
1077 | role.add_permission! :copy_issues | |||
|
1078 | ||||
|
1079 | @request.session[:user_id] = 2 | |||
|
1080 | get :index, :project_id => 1 | |||
|
1081 | assert_select 'a.new-issue', 0 | |||
|
1082 | end | |||
|
1083 | ||||
1060 | def test_show_by_anonymous |
|
1084 | def test_show_by_anonymous | |
1061 | get :show, :id => 1 |
|
1085 | get :show, :id => 1 | |
1062 | assert_response :success |
|
1086 | assert_response :success | |
@@ -2795,9 +2819,6 class IssuesControllerTest < ActionController::TestCase | |||||
2795 | end |
|
2819 | end | |
2796 | assert_select 'input[name=copy_from][value="1"]' |
|
2820 | assert_select 'input[name=copy_from][value="1"]' | |
2797 | end |
|
2821 | end | |
2798 |
|
||||
2799 | # "New issue" menu item should not link to copy |
|
|||
2800 | assert_select '#main-menu a.new-issue[href="/projects/ecookbook/issues/new"]' |
|
|||
2801 | end |
|
2822 | end | |
2802 |
|
2823 | |||
2803 | def test_new_as_copy_without_add_issues_permission_should_not_propose_current_project_as_target |
|
2824 | def test_new_as_copy_without_add_issues_permission_should_not_propose_current_project_as_target |
@@ -691,28 +691,4 class ProjectsControllerTest < ActionController::TestCase | |||||
691 | get :show, :id => 1 |
|
691 | get :show, :id => 1 | |
692 | assert_select 'body.project-ecookbook' |
|
692 | assert_select 'body.project-ecookbook' | |
693 | end |
|
693 | end | |
694 |
|
||||
695 | def test_project_menu_should_include_new_issue_link |
|
|||
696 | @request.session[:user_id] = 2 |
|
|||
697 | get :show, :id => 1 |
|
|||
698 | assert_select '#main-menu a.new-issue[href="/projects/ecookbook/issues/new"]', :text => 'New issue' |
|
|||
699 | end |
|
|||
700 |
|
||||
701 | def test_project_menu_should_not_include_new_issue_link_for_project_without_trackers |
|
|||
702 | Project.find(1).trackers.clear |
|
|||
703 |
|
||||
704 | @request.session[:user_id] = 2 |
|
|||
705 | get :show, :id => 1 |
|
|||
706 | assert_select '#main-menu a.new-issue', 0 |
|
|||
707 | end |
|
|||
708 |
|
||||
709 | def test_project_menu_should_not_include_new_issue_link_for_users_with_copy_issues_permission_only |
|
|||
710 | role = Role.find(1) |
|
|||
711 | role.remove_permission! :add_issues |
|
|||
712 | role.add_permission! :copy_issues |
|
|||
713 |
|
||||
714 | @request.session[:user_id] = 2 |
|
|||
715 | get :show, :id => 1 |
|
|||
716 | assert_select '#main-menu a.new-issue', 0 |
|
|||
717 | end |
|
|||
718 | end |
|
694 | end |
@@ -62,12 +62,11 class RedmineTest < ActiveSupport::TestCase | |||||
62 | end |
|
62 | end | |
63 |
|
63 | |||
64 | def test_project_menu |
|
64 | def test_project_menu | |
65 |
assert_number_of_items_in_menu :project_menu, 1 |
|
65 | assert_number_of_items_in_menu :project_menu, 13 | |
66 | assert_menu_contains_item_named :project_menu, :overview |
|
66 | assert_menu_contains_item_named :project_menu, :overview | |
67 | assert_menu_contains_item_named :project_menu, :activity |
|
67 | assert_menu_contains_item_named :project_menu, :activity | |
68 | assert_menu_contains_item_named :project_menu, :roadmap |
|
68 | assert_menu_contains_item_named :project_menu, :roadmap | |
69 | assert_menu_contains_item_named :project_menu, :issues |
|
69 | assert_menu_contains_item_named :project_menu, :issues | |
70 | assert_menu_contains_item_named :project_menu, :new_issue |
|
|||
71 | assert_menu_contains_item_named :project_menu, :calendar |
|
70 | assert_menu_contains_item_named :project_menu, :calendar | |
72 | assert_menu_contains_item_named :project_menu, :gantt |
|
71 | assert_menu_contains_item_named :project_menu, :gantt | |
73 | assert_menu_contains_item_named :project_menu, :news |
|
72 | assert_menu_contains_item_named :project_menu, :news | |
@@ -78,9 +77,4 class RedmineTest < ActiveSupport::TestCase | |||||
78 | assert_menu_contains_item_named :project_menu, :repository |
|
77 | assert_menu_contains_item_named :project_menu, :repository | |
79 | assert_menu_contains_item_named :project_menu, :settings |
|
78 | assert_menu_contains_item_named :project_menu, :settings | |
80 | end |
|
79 | end | |
81 |
|
||||
82 | def test_new_issue_should_have_root_as_a_parent |
|
|||
83 | new_issue = get_menu_item(:project_menu, :new_issue) |
|
|||
84 | assert_equal :root, new_issue.parent.name |
|
|||
85 | end |
|
|||
86 | end |
|
80 | end |
General Comments 0
You need to be logged in to leave comments.
Login now