Project

General

Profile

Feature #36679 » feature-36679.patch

Mizuki ISHIKAWA, 2022-08-26 09:40

View differences:

app/controllers/versions_controller.rb
73 73
          to_a
74 74
      end
75 75
      format.api
76
      format.text do
77
        send_data(@version.version_details_to_text, type: 'text/plain', filename: "version-#{@version.id}.txt")
78
      end
76 79
    end
77 80
  end
78 81

  
app/models/version.rb
110 110

  
111 111
class Version < ActiveRecord::Base
112 112
  include Redmine::SafeAttributes
113
  include Redmine::I18n
113 114

  
114 115
  after_update :update_issues_from_sharing_change
115 116
  after_save :update_default_project_version
......
402 403
    @default_project_version = (arg == '1' || arg == true)
403 404
  end
404 405

  
406
  def version_details_to_text
407
    [
408
      "# #{self.name}",
409
      format_date(self.effective_date),
410
      self.description,
411
      self.fixed_issues.visible.map{|i| "#{i.tracker.name} ##{i.id} #{i.subject}"}.join("\n")
412
    ].compact.join("\n\n")
413
  end
414

  
405 415
  private
406 416

  
407 417
  # Update the issue's fixed versions. Used if a version's sharing changes.
app/views/versions/show.html.erb
56 56
<% end %>
57 57
</div>
58 58

  
59
<% other_formats_links do |f| %>
60
  <%= f.link_to_with_query_parameters 'Text' %>
61
<% end %>
62

  
59 63
<%= call_hook :view_versions_show_bottom, :version => @version %>
60 64

  
61 65
<% html_title @version.name %>
test/functional/versions_controller_test.rb
20 20
require File.expand_path('../../test_helper', __FILE__)
21 21

  
22 22
class VersionsControllerTest < Redmine::ControllerTest
23
  include Redmine::I18n
23 24
  fixtures :projects, :enabled_modules,
24 25
           :trackers, :projects_trackers,
25 26
           :versions, :issue_statuses, :issue_categories, :enumerations,
......
220 221
    assert_select 'a.icon.icon-add', :text => 'New issue'
221 222
  end
222 223

  
224
  def test_show_with_text_format
225
    version = Version.find(2)
226
    get :show, params: {id: version.id, format: :text}
227
    assert_response :success
228
    assert_equal 'text/plain', response.media_type
229

  
230
    result = response.body.split("\n\n")
231
    assert_equal "# #{version.name}", result[0]
232
    assert_equal format_date(version.effective_date), result[1]
233
    assert_equal version.description, result[2]
234
  end
235

  
223 236
  def test_new
224 237
    @request.session[:user_id] = 2
225 238
    get :new, :params => {:project_id => '1'}
test/unit/version_test.rb
351 351
    assert_nil version.custom_field_value(cf2)
352 352
  end
353 353

  
354
  def test_version_details_to_text
355
    assert_equal "# 0.1\n\n07/01/2006\n\nBeta\n\nBug #11 Closed issue on a closed version", Version.find(1).version_details_to_text
356
  end
357

  
354 358
  private
355 359

  
356 360
  def add_issue(version, attributes={})
(2-2/5)