diff --git a/app/helpers/owners_helper.rb b/app/helpers/owners_helper.rb
index 7cb74e73aa2..e5f53f8ea06 100644
--- a/app/helpers/owners_helper.rb
+++ b/app/helpers/owners_helper.rb
@@ -18,4 +18,8 @@ def mfa_status(user)
image_tag("/images/check.svg")
end
end
+
+ def multiple_owners?(rubygem)
+ rubygem.owners.size > 1
+ end
end
diff --git a/app/views/owners/_owners_table.html.erb b/app/views/owners/_owners_table.html.erb
index 1ce5ae56c81..5c112ada257 100644
--- a/app/views/owners/_owners_table.html.erb
+++ b/app/views/owners/_owners_table.html.erb
@@ -50,12 +50,14 @@
<%= ownership.confirmed_at.strftime("%Y-%m-%d %H:%M %Z") if ownership.confirmed? %>
- <%= button_to t("remove"),
- rubygem_owner_path(@rubygem.slug, ownership.user.display_id),
- method: "delete",
- data: { confirm: t("owners.index.confirm_remove") },
- class: "form__submit form__submit--small" %>
-
+ <% if multiple_owners?(@rubygem) %>
+ <%= button_to t("remove"),
+ rubygem_owner_path(@rubygem.slug, ownership.user.display_id),
+ method: "delete",
+ data: { confirm: t("owners.index.confirm_remove") },
+ class: "form__submit form__submit--small" %>
+
+ <% end %>
<%= button_to t("edit"),
edit_rubygem_owner_path(@rubygem.name, ownership.user.display_id),
disabled: ownership.user == current_user,
diff --git a/test/integration/owner_test.rb b/test/integration/owner_test.rb
index 728a80a9ac6..609192b8545 100644
--- a/test/integration/owner_test.rb
+++ b/test/integration/owner_test.rb
@@ -99,21 +99,6 @@ class OwnerTest < SystemTest
assert_equal [@other_user.email], last_email.to
end
- test "removing last owner shows error message" do
- visit_ownerships_page
-
- within_element owner_row(@user) do
- click_button "Remove"
- end
-
- assert page.has_selector?("a[href='#{profile_path(@user.display_id)}']")
- assert page.has_selector? "#flash_alert", text: "Can't remove the only owner of the gem"
-
- perform_enqueued_jobs only: ActionMailer::MailDeliveryJob
-
- assert_no_emails
- end
-
test "verify using webauthn" do
create_webauthn_credential
@@ -224,6 +209,28 @@ class OwnerTest < SystemTest
assert page.has_selector?("a[href='#{rubygem_owners_path(@rubygem.slug)}']")
end
+ test "shows the remove button for all owners when there are multiple owners" do
+ create(:ownership, user: @other_user, rubygem: @rubygem)
+
+ visit_ownerships_page
+
+ within_element owner_row(@user) do
+ assert page.has_button?("Remove")
+ end
+
+ within_element owner_row(@other_user) do
+ assert page.has_button?("Remove")
+ end
+ end
+
+ test "hides the remove button if owner is single" do
+ visit_ownerships_page
+
+ within_element owner_row(@user) do
+ assert page.has_no_button?("Remove")
+ end
+ end
+
test "hides ownership link when not owner" do
page.click_link(nil, href: "/sign_out")
sign_in_as(@other_user)
|