diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index d084ee0c8a7..bd997da77ba 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -609,6 +609,7 @@ Rails/OutputSafety: - 'src/api/app/helpers/webui/package_helper.rb' - 'src/api/app/helpers/webui/project_helper.rb' - 'src/api/app/helpers/webui/webui_helper.rb' + - 'src/api/app/helpers/webui/request_helper.rb' # Offense count: 136 # Cop supports --auto-correct. diff --git a/src/api/app/helpers/webui/request_helper.rb b/src/api/app/helpers/webui/request_helper.rb index ea6e81172a6..5ded99839bf 100644 --- a/src/api/app/helpers/webui/request_helper.rb +++ b/src/api/app/helpers/webui/request_helper.rb @@ -9,6 +9,14 @@ def request_state_color(state) STATE_COLORS[state.to_s] || '' end + def new_or_update_request(row) + if row.target_package_id + row.request_type + else + "#{row.request_type} (new package)".html_safe + end + end + def merge_opt(res, opt, value) res[opt] ||= value res[opt] = :multiple if value != res[opt] @@ -29,6 +37,7 @@ def common_parts(req) merge_opt(res, :target_package, ae.target_package) merge_opt(res, :target_project, ae.target_project) merge_opt(res, :request_type, ae.action_type) + res[:target_package_id] ||= ae.target_package_id end res[:request_type] = map_request_type(res[:request_type]) diff --git a/src/api/app/models/bs_request/data_table/row.rb b/src/api/app/models/bs_request/data_table/row.rb index 228e822da8b..a2a4edd11b9 100644 --- a/src/api/app/models/bs_request/data_table/row.rb +++ b/src/api/app/models/bs_request/data_table/row.rb @@ -20,6 +20,10 @@ def request_type cache[:request_type] end + def target_package_id + cache[:target_package_id] + end + def target_project cache[:target_project] end diff --git a/src/api/app/views/webui/shared/bs_requests/index.json.erb b/src/api/app/views/webui/shared/bs_requests/index.json.erb index 614da11d280..b621bc172b9 100644 --- a/src/api/app/views/webui/shared/bs_requests/index.json.erb +++ b/src/api/app/views/webui/shared/bs_requests/index.json.erb @@ -10,7 +10,7 @@ "<%= escape_javascript(project_or_package_link(project: row.source_project, package: row.source_package, creator: row.creator, trim_to: 40, short: true)) %>", "<%= escape_javascript(target_project_link(row)) %>", "<%= escape_javascript(user_with_realname_and_icon(row.creator, short: true)) %>", - "<%= escape_javascript(row.request_type) %>", + "<%= escape_javascript(new_or_update_request(row)) %>", "<%= escape_javascript(row.priority) %>", "<%= escape_javascript(link_to(sprite_tag('req-showdiff', title: "Show request ##{row.number}"), request_show_path(row.number), { class: :request_link })) %>" <% end %> diff --git a/src/api/spec/helpers/webui/request_helper_spec.rb b/src/api/spec/helpers/webui/request_helper_spec.rb new file mode 100644 index 00000000000..3325de1d540 --- /dev/null +++ b/src/api/spec/helpers/webui/request_helper_spec.rb @@ -0,0 +1,32 @@ +require 'rails_helper' + +RSpec.describe Webui::RequestHelper do + + describe '#new_or_update' do + context 'for a new package' do + let(:request) { create(:bs_request) } + let(:row) { BsRequest::DataTable::Row .new(request) } + + it { expect(new_or_update_request(row)).to eq("BsRequestAction (new package)") } + it { expect(new_or_update_request(row)).to be_a(ActiveSupport::SafeBuffer) } + end + + context 'for an existing package' do + let(:target_package) { create(:package) } + let(:target_project) { target_package.project } + let(:source_package) { create(:package) } + let(:source_project) { source_package.project } + let(:bs_request_with_submit_action) do + create(:bs_request_with_submit_action, + target_project: target_project, + target_package: target_package, + source_project: source_project, + source_package: source_package + ) + end + let(:row) { BsRequest::DataTable::Row .new(bs_request_with_submit_action) } + + it { expect(new_or_update_request(row)).to eq("submit") } + end + end +end