<% labelled_fields_for :issue, @issue do |f| %>
<div class="splitcontentleft">
-<% if @issue.new_record? || @allowed_statuses.any? %>
+<% if @issue.safe_attribute? 'status_id' %>
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
<% else %>
<p><label><%= l(:field_status) %></label> <%= h(@issue.status.name) %></p>
<% end %>
+<% if @issue.safe_attribute? 'priority_id' %>
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %></p>
+<% end %>
+
+<% if @issue.safe_attribute? 'assigned_to_id' %>
<p><%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true %></p>
-<% unless @project.issue_categories.empty? %>
+<% end %>
+
+<% if @issue.safe_attribute?('category_id') && @project.issue_categories.any? %>
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
l(:label_issue_category_new),
:title => l(:label_issue_category_new),
:tabindex => 199) if authorize_for('issue_categories', 'new') %></p>
<% end %>
-<% unless @issue.assignable_versions.empty? %>
+
+<% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true %>
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'),
l(:label_version_new),
<div id="parent_issue_candidates" class="autocomplete"></div>
<%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
<% end %>
+
+<% if @issue.safe_attribute? 'start_date' %>
<p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %></p>
+<% end %>
+
+<% if @issue.safe_attribute? 'due_date' %>
<p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %></p>
+<% end %>
+
+<% if @issue.safe_attribute? 'estimated_hours' %>
<p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %></p>
-<% if @issue.leaf? && Issue.use_field_for_done_ratio? %>
+<% end %>
+
+<% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %>
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
<% end %>
</div>
<div style="clear:both;"> </div>
+<% if @issue.safe_attribute? 'custom_field_values' %>
<%= render :partial => 'issues/form_custom_fields' %>
+<% end %>
<% end %>
:content => /Notes/ } }
end
+ def test_show_should_display_update_form
+ @request.session[:user_id] = 2
+ get :show, :id => 1
+ assert_response :success
+
+ assert_tag 'form', :attributes => {:id => 'issue-form'}
+ assert_tag 'input', :attributes => {:name => 'issue[is_private]'}
+ assert_tag 'select', :attributes => {:name => 'issue[tracker_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[subject]'}
+ assert_tag 'textarea', :attributes => {:name => 'issue[description]'}
+ assert_tag 'select', :attributes => {:name => 'issue[status_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[priority_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[assigned_to_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[category_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[fixed_version_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[parent_issue_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[start_date]'}
+ assert_tag 'input', :attributes => {:name => 'issue[due_date]'}
+ assert_tag 'select', :attributes => {:name => 'issue[done_ratio]'}
+ assert_tag 'input', :attributes => { :name => 'issue[custom_field_values][2]' }
+ assert_no_tag 'input', :attributes => {:name => 'issue[watcher_user_ids][]'}
+ assert_tag 'textarea', :attributes => {:name => 'notes'}
+ end
+
+ def test_show_should_display_update_form_with_minimal_permissions
+ Role.find(1).update_attribute :permissions, [:view_issues, :add_issue_notes]
+ Workflow.delete_all :role_id => 1
+
+ @request.session[:user_id] = 2
+ get :show, :id => 1
+ assert_response :success
+
+ assert_tag 'form', :attributes => {:id => 'issue-form'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[is_private]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[tracker_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[subject]'}
+ assert_no_tag 'textarea', :attributes => {:name => 'issue[description]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[status_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[priority_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[assigned_to_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[category_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[fixed_version_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[parent_issue_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[start_date]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[due_date]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[done_ratio]'}
+ assert_no_tag 'input', :attributes => { :name => 'issue[custom_field_values][2]' }
+ assert_no_tag 'input', :attributes => {:name => 'issue[watcher_user_ids][]'}
+ assert_tag 'textarea', :attributes => {:name => 'notes'}
+ end
+
+ def test_show_should_display_update_form_with_workflow_permissions
+ Role.find(1).update_attribute :permissions, [:view_issues, :add_issue_notes]
+
+ @request.session[:user_id] = 2
+ get :show, :id => 1
+ assert_response :success
+
+ assert_tag 'form', :attributes => {:id => 'issue-form'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[is_private]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[tracker_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[subject]'}
+ assert_no_tag 'textarea', :attributes => {:name => 'issue[description]'}
+ assert_tag 'select', :attributes => {:name => 'issue[status_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[priority_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[assigned_to_id]'}
+ assert_no_tag 'select', :attributes => {:name => 'issue[category_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[fixed_version_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[parent_issue_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[start_date]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[due_date]'}
+ assert_tag 'select', :attributes => {:name => 'issue[done_ratio]'}
+ assert_no_tag 'input', :attributes => { :name => 'issue[custom_field_values][2]' }
+ assert_no_tag 'input', :attributes => {:name => 'issue[watcher_user_ids][]'}
+ assert_tag 'textarea', :attributes => {:name => 'notes'}
+ end
+
+ def test_show_should_not_display_update_form_without_permissions
+ Role.find(1).update_attribute :permissions, [:view_issues]
+
+ @request.session[:user_id] = 2
+ get :show, :id => 1
+ assert_response :success
+
+ assert_no_tag 'form', :attributes => {:id => 'issue-form'}
+ end
+
def test_update_form_should_not_display_inactive_enumerations
@request.session[:user_id] = 2
get :show, :id => 1
assert_response :success
assert_template 'new'
- assert_tag :tag => 'input', :attributes => { :name => 'issue[custom_field_values][2]',
- :value => 'Default string' }
+ assert_tag 'input', :attributes => {:name => 'issue[is_private]'}
+ assert_tag 'select', :attributes => {:name => 'issue[tracker_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[subject]'}
+ assert_tag 'textarea', :attributes => {:name => 'issue[description]'}
+ assert_tag 'select', :attributes => {:name => 'issue[status_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[priority_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[assigned_to_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[category_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[fixed_version_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[parent_issue_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[start_date]'}
+ assert_tag 'input', :attributes => {:name => 'issue[due_date]'}
+ assert_tag 'select', :attributes => {:name => 'issue[done_ratio]'}
+ assert_tag 'input', :attributes => { :name => 'issue[custom_field_values][2]', :value => 'Default string' }
+ assert_tag 'input', :attributes => {:name => 'issue[watcher_user_ids][]'}
# Be sure we don't display inactive IssuePriorities
assert ! IssuePriority.find(15).active?
:parent => {:tag => 'select', :attributes => {:id => 'issue_priority_id'} }
end
+ def test_get_new_with_minimal_permissions
+ Role.find(1).update_attribute :permissions, [:add_issues]
+ Workflow.delete_all :role_id => 1
+
+ @request.session[:user_id] = 2
+ get :new, :project_id => 1, :tracker_id => 1
+ assert_response :success
+ assert_template 'new'
+
+ assert_no_tag 'input', :attributes => {:name => 'issue[is_private]'}
+ assert_tag 'select', :attributes => {:name => 'issue[tracker_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[subject]'}
+ assert_tag 'textarea', :attributes => {:name => 'issue[description]'}
+ assert_tag 'select', :attributes => {:name => 'issue[status_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[priority_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[assigned_to_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[category_id]'}
+ assert_tag 'select', :attributes => {:name => 'issue[fixed_version_id]'}
+ assert_no_tag 'input', :attributes => {:name => 'issue[parent_issue_id]'}
+ assert_tag 'input', :attributes => {:name => 'issue[start_date]'}
+ assert_tag 'input', :attributes => {:name => 'issue[due_date]'}
+ assert_tag 'select', :attributes => {:name => 'issue[done_ratio]'}
+ assert_tag 'input', :attributes => { :name => 'issue[custom_field_values][2]', :value => 'Default string' }
+ assert_no_tag 'input', :attributes => {:name => 'issue[watcher_user_ids][]'}
+ end
+
def test_get_new_without_default_start_date_is_creation_date
Setting.default_issue_start_date_to_creation_date = 0