Revision 11405
Added by Jean-Philippe Lang over 12 years ago
trunk/app/controllers/issues_controller.rb | ||
---|---|---|
21 | 21 |
|
22 | 22 |
before_filter :find_issue, :only => [:show, :edit, :update] |
23 | 23 |
before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :destroy] |
24 |
before_filter :find_project, :only => [:new, :create] |
|
24 |
before_filter :find_project, :only => [:new, :create, :update_form]
|
|
25 | 25 |
before_filter :authorize, :except => [:index] |
26 | 26 |
before_filter :find_optional_project, :only => [:index] |
27 | 27 |
before_filter :check_for_default_issue_status, :only => [:new, :create] |
28 |
before_filter :build_new_issue_from_params, :only => [:new, :create] |
|
28 |
before_filter :build_new_issue_from_params, :only => [:new, :create, :update_form]
|
|
29 | 29 |
accept_rss_auth :index, :show |
30 | 30 |
accept_api_auth :index, :show, :create, :update, :destroy |
31 | 31 |
|
... | ... | |
132 | 132 |
def new |
133 | 133 |
respond_to do |format| |
134 | 134 |
format.html { render :action => 'new', :layout => !request.xhr? } |
135 |
format.js { render :partial => 'update_form' } |
|
136 | 135 |
end |
137 | 136 |
end |
138 | 137 |
|
... | ... | |
202 | 201 |
end |
203 | 202 |
end |
204 | 203 |
|
204 |
# Updates the issue form when changing the project, status or tracker |
|
205 |
# on issue creation/update |
|
206 |
def update_form |
|
207 |
end |
|
208 |
|
|
205 | 209 |
# Bulk edit/copy a set of issues |
206 | 210 |
def bulk_edit |
207 | 211 |
@issues.sort! |
trunk/app/views/issues/_update_form.js.erb | ||
---|---|---|
1 |
$('#all_attributes').html('<%= escape_javascript(render :partial => 'form') %>'); |
|
2 |
|
|
3 |
<% if User.current.allowed_to?(:log_time, @issue.project) %> |
|
4 |
$('#log_time').show(); |
|
5 |
<% else %> |
|
6 |
$('#log_time').hide(); |
|
7 |
<% end %> |
|
8 | 0 |
trunk/app/views/issues/update_form.js.erb | ||
---|---|---|
1 |
$('#all_attributes').html('<%= escape_javascript(render :partial => 'form') %>'); |
|
2 |
|
|
3 |
<% if User.current.allowed_to?(:log_time, @issue.project) %> |
|
4 |
$('#log_time').show(); |
|
5 |
<% else %> |
|
6 |
$('#log_time').hide(); |
|
7 |
<% end %> |
|
0 | 8 |
trunk/config/routes.rb | ||
---|---|---|
116 | 116 |
end |
117 | 117 |
end |
118 | 118 |
# issue form update |
119 |
match 'issues/new', :controller => 'issues', :action => 'new', :via => [:put, :post], :as => 'issue_form'
|
|
119 |
match 'issues/update_form', :controller => 'issues', :action => 'update_form', :via => [:put, :post], :as => 'issue_form'
|
|
120 | 120 |
|
121 | 121 |
resources :files, :only => [:index, :new, :create] |
122 | 122 |
|
trunk/lib/redmine.rb | ||
---|---|---|
115 | 115 |
map.permission :manage_subtasks, {} |
116 | 116 |
map.permission :set_issues_private, {} |
117 | 117 |
map.permission :set_own_issues_private, {}, :require => :loggedin |
118 |
map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new], :attachments => :upload} |
|
118 |
map.permission :add_issue_notes, {:issues => [:edit, :update, :update_form], :journals => [:new], :attachments => :upload}
|
|
119 | 119 |
map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin |
120 | 120 |
map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin |
121 | 121 |
map.permission :view_private_notes, {}, :read => true, :require => :member |
trunk/test/fixtures/users.yml | ||
---|---|---|
105 | 105 |
login: '' |
106 | 106 |
type: AnonymousUser |
107 | 107 |
users_007: |
108 |
# A user who does not belong to any project |
|
108 | 109 |
id: 7 |
109 | 110 |
created_on: 2006-07-19 19:33:19 +02:00 |
110 | 111 |
status: 1 |
111 | 112 |
last_login_on: |
112 |
language: '' |
|
113 |
hashed_password: 1 |
|
113 |
language: 'en' |
|
114 |
# password = foo |
|
115 |
salt: 7599f9963ec07b5a3b55b354407120c0 |
|
116 |
hashed_password: 8f659c8d7c072f189374edacfa90d6abbc26d8ed |
|
114 | 117 |
updated_on: 2006-07-19 19:33:19 +02:00 |
115 | 118 |
admin: false |
116 | 119 |
mail: [email protected] |
trunk/test/functional/issues_controller_test.rb | ||
---|---|---|
1671 | 1671 |
assert_error_tag :content => /No tracker/ |
1672 | 1672 |
end |
1673 | 1673 |
|
1674 |
def test_update_new_form
|
|
1674 |
def test_update_form_for_new_issue
|
|
1675 | 1675 |
@request.session[:user_id] = 2 |
1676 |
xhr :post, :new, :project_id => 1,
|
|
1676 |
xhr :post, :update_form, :project_id => 1,
|
|
1677 | 1677 |
:issue => {:tracker_id => 2, |
1678 | 1678 |
:subject => 'This is the test_new issue', |
1679 | 1679 |
:description => 'This is the description', |
... | ... | |
1690 | 1690 |
assert_equal 'This is the test_new issue', issue.subject |
1691 | 1691 |
end |
1692 | 1692 |
|
1693 |
def test_update_new_form_should_propose_transitions_based_on_initial_status
|
|
1693 |
def test_update_form_for_new_issue_should_propose_transitions_based_on_initial_status
|
|
1694 | 1694 |
@request.session[:user_id] = 2 |
1695 | 1695 |
WorkflowTransition.delete_all |
1696 | 1696 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2) |
1697 | 1697 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5) |
1698 | 1698 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4) |
1699 | 1699 |
|
1700 |
xhr :post, :new, :project_id => 1,
|
|
1700 |
xhr :post, :update_form, :project_id => 1,
|
|
1701 | 1701 |
:issue => {:tracker_id => 1, |
1702 | 1702 |
:status_id => 5, |
1703 | 1703 |
:subject => 'This is an issue'} |
... | ... | |
2626 | 2626 |
end |
2627 | 2627 |
end |
2628 | 2628 |
|
2629 |
def test_update_edit_form
|
|
2629 |
def test_update_form_for_existing_issue
|
|
2630 | 2630 |
@request.session[:user_id] = 2 |
2631 |
xhr :put, :new, :project_id => 1,
|
|
2631 |
xhr :put, :update_form, :project_id => 1,
|
|
2632 | 2632 |
:id => 1, |
2633 | 2633 |
:issue => {:tracker_id => 2, |
2634 | 2634 |
:subject => 'This is the test_new issue', |
... | ... | |
2647 | 2647 |
assert_equal 'This is the test_new issue', issue.subject |
2648 | 2648 |
end |
2649 | 2649 |
|
2650 |
def test_update_edit_form_should_keep_issue_author
|
|
2650 |
def test_update_form_for_existing_issue_should_keep_issue_author
|
|
2651 | 2651 |
@request.session[:user_id] = 3 |
2652 |
xhr :put, :new, :project_id => 1, :id => 1, :issue => {:subject => 'Changed'}
|
|
2652 |
xhr :put, :update_form, :project_id => 1, :id => 1, :issue => {:subject => 'Changed'}
|
|
2653 | 2653 |
assert_response :success |
2654 | 2654 |
assert_equal 'text/javascript', response.content_type |
2655 | 2655 |
|
... | ... | |
2659 | 2659 |
assert_not_equal User.current, issue.author |
2660 | 2660 |
end |
2661 | 2661 |
|
2662 |
def test_update_edit_form_should_propose_transitions_based_on_initial_status
|
|
2662 |
def test_update_form_for_existing_issue_should_propose_transitions_based_on_initial_status
|
|
2663 | 2663 |
@request.session[:user_id] = 2 |
2664 | 2664 |
WorkflowTransition.delete_all |
2665 | 2665 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 2, :new_status_id => 1) |
2666 | 2666 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 2, :new_status_id => 5) |
2667 | 2667 |
WorkflowTransition.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 5, :new_status_id => 4) |
2668 | 2668 |
|
2669 |
xhr :put, :new, :project_id => 1,
|
|
2669 |
xhr :put, :update_form, :project_id => 1,
|
|
2670 | 2670 |
:id => 2, |
2671 | 2671 |
:issue => {:tracker_id => 2, |
2672 | 2672 |
:status_id => 5, |
... | ... | |
2676 | 2676 |
assert_equal [1,2,5], assigns(:allowed_statuses).map(&:id).sort |
2677 | 2677 |
end |
2678 | 2678 |
|
2679 |
def test_update_edit_form_with_project_change
|
|
2679 |
def test_update_form_for_existing_issue_with_project_change
|
|
2680 | 2680 |
@request.session[:user_id] = 2 |
2681 |
xhr :put, :new, :project_id => 1,
|
|
2681 |
xhr :put, :update_form, :project_id => 1,
|
|
2682 | 2682 |
:id => 1, |
2683 | 2683 |
:issue => {:project_id => 2, |
2684 | 2684 |
:tracker_id => 2, |
trunk/test/integration/issues_test.rb | ||
---|---|---|
65 | 65 |
assert_equal 1, issue.status.id |
66 | 66 |
end |
67 | 67 |
|
68 |
def test_update_issue_form |
|
69 |
log_user('jsmith', 'jsmith') |
|
70 |
post 'projects/ecookbook/issues/new', :issue => { :tracker_id => "2"} |
|
71 |
assert_response :success |
|
72 |
assert_tag 'select', |
|
73 |
:attributes => {:name => 'issue[tracker_id]'}, |
|
74 |
:child => {:tag => 'option', :attributes => {:value => '2', :selected => 'selected'}} |
|
75 |
end |
|
76 |
|
|
77 | 68 |
# add then remove 2 attachments to an issue |
78 | 69 |
def test_issue_attachments |
79 | 70 |
log_user('jsmith', 'jsmith') |
trunk/test/integration/routing/issues_test.rb | ||
---|---|---|
107 | 107 |
def test_issues_form_update |
108 | 108 |
["post", "put"].each do |method| |
109 | 109 |
assert_routing( |
110 |
{ :method => method, :path => "/projects/23/issues/new" },
|
|
111 |
{ :controller => 'issues', :action => 'new', :project_id => '23' }
|
|
110 |
{ :method => method, :path => "/projects/23/issues/update_form" },
|
|
111 |
{ :controller => 'issues', :action => 'update_form', :project_id => '23' }
|
|
112 | 112 |
) |
113 | 113 |
end |
114 | 114 |
end |
trunk/test/ui/issues_test.rb | ||
---|---|---|
56 | 56 |
assert_equal 'Value for field 2', issue.custom_field_value(CustomField.find_by_name('Searchable field')) |
57 | 57 |
end |
58 | 58 |
|
59 |
def test_create_issue_with_form_update |
|
60 |
field = IssueCustomField.create!( |
|
61 |
:field_format => 'string', |
|
62 |
:name => 'Form update CF', |
|
63 |
:is_for_all => true, |
|
64 |
:trackers => Tracker.find_all_by_name('Feature request') |
|
65 |
) |
|
66 |
|
|
67 |
Role.non_member.add_permission! :add_issues |
|
68 |
Role.non_member.remove_permission! :edit_issues, :add_issue_notes |
|
69 |
|
|
70 |
log_user('someone', 'foo') |
|
71 |
visit '/projects/ecookbook/issues/new' |
|
72 |
assert page.has_no_content?('Form update CF') |
|
73 |
|
|
74 |
fill_in 'Subject', :with => 'new test issue' |
|
75 |
# the custom field should show up when changing tracker |
|
76 |
select 'Feature request', :from => 'Tracker' |
|
77 |
assert page.has_content?('Form update CF') |
|
78 |
|
|
79 |
fill_in 'Form update', :with => 'CF value' |
|
80 |
assert_difference 'Issue.count' do |
|
81 |
find('input[name=commit]').click |
|
82 |
end |
|
83 |
|
|
84 |
issue = Issue.order('id desc').first |
|
85 |
assert_equal 'CF value', issue.custom_field_value(field) |
|
86 |
end |
|
87 |
|
|
59 | 88 |
def test_create_issue_with_watchers |
60 | 89 |
User.generate!(:firstname => 'Some', :lastname => 'Watcher') |
61 | 90 |
|
... | ... | |
98 | 127 |
assert_equal 'new issue description', issue.description |
99 | 128 |
end |
100 | 129 |
|
130 |
def test_update_issue_with_form_update |
|
131 |
field = IssueCustomField.create!( |
|
132 |
:field_format => 'string', |
|
133 |
:name => 'Form update CF', |
|
134 |
:is_for_all => true, |
|
135 |
:trackers => Tracker.find_all_by_name('Feature request') |
|
136 |
) |
|
137 |
|
|
138 |
Role.non_member.add_permission! :edit_issues |
|
139 |
Role.non_member.remove_permission! :add_issues, :add_issue_notes |
|
140 |
|
|
141 |
log_user('someone', 'foo') |
|
142 |
visit '/issues/1' |
|
143 |
assert page.has_no_content?('Form update CF') |
|
144 |
|
|
145 |
page.first(:link, 'Update').click |
|
146 |
# the custom field should show up when changing tracker |
|
147 |
select 'Feature request', :from => 'Tracker' |
|
148 |
assert page.has_content?('Form update CF') |
|
149 |
|
|
150 |
fill_in 'Form update', :with => 'CF value' |
|
151 |
assert_no_difference 'Issue.count' do |
|
152 |
page.first(:button, 'Submit').click |
|
153 |
end |
|
154 |
|
|
155 |
issue = Issue.find(1) |
|
156 |
assert_equal 'CF value', issue.custom_field_value(field) |
|
157 |
end |
|
158 |
|
|
101 | 159 |
def test_watch_issue_via_context_menu |
102 | 160 |
log_user('jsmith', 'jsmith') |
103 | 161 |
visit '/issues' |
Also available in: Unified diff
Fixed that updating the issue form was broken by r4011 when user is not allowed to add issues (#13188).