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)