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