diff --git a/app/assets/javascripts/projects/components/shared/delete_button.vue b/app/assets/javascripts/projects/components/shared/delete_button.vue index 525ea462847e18087c56db7b0f0068246cd71e04..2e46f437ace96759a97b17c5647c6e1339a9f7f4 100644 --- a/app/assets/javascripts/projects/components/shared/delete_button.vue +++ b/app/assets/javascripts/projects/components/shared/delete_button.vue @@ -1,5 +1,5 @@ <script> -import { GlModal, GlModalDirective, GlFormTextarea, GlButton } from '@gitlab/ui'; +import { GlModal, GlModalDirective, GlFormInput, GlButton } from '@gitlab/ui'; import { uniqueId } from 'lodash'; import csrf from '~/lib/utils/csrf'; import { __ } from '~/locale'; @@ -7,7 +7,7 @@ import { __ } from '~/locale'; export default { components: { GlModal, - GlFormTextarea, + GlFormInput, GlButton, }, directives: { @@ -88,7 +88,12 @@ export default { <p> <code class="gl-white-space-pre-wrap">{{ confirmPhrase }}</code> </p> - <gl-form-textarea id="confirm_name_input" v-model="userInput" name="confirm_name_input" /> + <gl-form-input + id="confirm_name_input" + v-model="userInput" + name="confirm_name_input" + type="text" + /> <slot name="modal-footer"></slot> </div> </gl-modal> diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index bee25e2a5693af97e859255c64f512790ababb1e..12bb9577fc197eee6e4f8c96533e2526f8a7e294 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -384,12 +384,11 @@ def project_classes(project) # Returns the confirm phrase the user needs to type in order to delete the project # - # Occasionally a user will delete one project, believing it is a different (similar) one. - # Specifically, a user might delete an original project, believing it is a fork. - # Thus the phrase should be the project full name to include the namespace. + # Thus the phrase should include the namespace to make it very clear to the + # user which project is subject to deletion. # Relevant issue: https://gitlab.com/gitlab-org/gitlab/-/issues/343591 def delete_confirm_phrase(project) - s_('DeleteProject|Delete %{name}') % { name: project.full_name } + project.path_with_namespace end private diff --git a/ee/app/views/projects/_remove.html.haml b/ee/app/views/projects/_remove.html.haml index 5e4b95501a76503a322b0ab47b016bc5f0e69590..48013b35d91928dccb4b63d818b87ea9a2bfb799 100644 --- a/ee/app/views/projects/_remove.html.haml +++ b/ee/app/views/projects/_remove.html.haml @@ -11,7 +11,7 @@ %strong= s_('Delayed Project Deletion (%{adjourned_deletion})') % { adjourned_deletion: adjourned_deletion ? 'Enabled' : 'Disabled' } - if adjourned_deletion = render 'projects/settings/marked_for_removal' - #js-project-adjourned-delete-button{ data: { recovery_help_path: recovery_help_path, adjourned_removal_date: adjourned_date, form_path: project_path(project), confirm_phrase: project.path } } + #js-project-adjourned-delete-button{ data: { recovery_help_path: recovery_help_path, adjourned_removal_date: adjourned_date, form_path: project_path(project), confirm_phrase: delete_confirm_phrase(project) } } - else %p %span.gl-text-gray-500= _('Projects will be permanently deleted immediately.') diff --git a/ee/app/views/projects/settings/_permanently_delete.html.haml b/ee/app/views/projects/settings/_permanently_delete.html.haml index ac21cfcc8f1b1707cbbca40dc624956e08d7f5fe..698498aba0bd2e13cebc7960807c14090adff44f 100644 --- a/ee/app/views/projects/settings/_permanently_delete.html.haml +++ b/ee/app/views/projects/settings/_permanently_delete.html.haml @@ -5,4 +5,4 @@ %p= permanent_delete_message(project) %p %strong= _('Are you ABSOLUTELY SURE you wish to delete this project?') - #js-project-delete-button{ data: { form_path: project_path(project, permanently_delete: true), confirm_phrase: project.path } } + #js-project-delete-button{ data: { form_path: project_path(project, permanently_delete: true), confirm_phrase: delete_confirm_phrase(project) } } diff --git a/ee/spec/features/projects_spec.rb b/ee/spec/features/projects_spec.rb index 5fda75a06cc1f18d61efb184908216445838103d..ce407c5b149744d19e301636bd100bda10946dea 100644 --- a/ee/spec/features/projects_spec.rb +++ b/ee/spec/features/projects_spec.rb @@ -48,7 +48,7 @@ end it 'deletes the project immediately', :sidekiq_inline do - expect { remove_with_confirm('Delete project', project.path, 'Yes, delete project') }.to change { Project.count }.by(-1) + expect { remove_with_confirm('Delete project', project.path_with_namespace, 'Yes, delete project') }.to change { Project.count }.by(-1) expect(page).to have_content "Project '#{project.full_name}' is in the process of being deleted." expect(Project.all.count).to be_zero diff --git a/ee/spec/frontend/projects/components/__snapshots__/project_adjourned_delete_button_spec.js.snap b/ee/spec/frontend/projects/components/__snapshots__/project_adjourned_delete_button_spec.js.snap index 4a98de472e04146da7125c783d88047986c05c58..e0ac0ee6e5f5e25b36208c42ab948fad5976a63f 100644 --- a/ee/spec/frontend/projects/components/__snapshots__/project_adjourned_delete_button_spec.js.snap +++ b/ee/spec/frontend/projects/components/__snapshots__/project_adjourned_delete_button_spec.js.snap @@ -60,10 +60,10 @@ exports[`Project remove modal initialized matches the snapshot 1`] = ` </code> </p> - <gl-form-textarea-stub + <gl-form-input-stub id="confirm_name_input" name="confirm_name_input" - noresize="true" + type="text" /> <p diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 555fe7664df75899b87a096116dcf6a6bd3a26c1..118f06639453c41d7b065ee418b2d97f72610d20 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -11113,9 +11113,6 @@ msgstr "" msgid "Delete variable" msgstr "" -msgid "DeleteProject|Delete %{name}" -msgstr "" - msgid "DeleteProject|Failed to remove project repository. Please try again or contact administrator." msgstr "" diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index fec2873e4fdaf9336463edea595ded2014a84bbf..c4619b5498e9420e1e3f3dc0bc4d48ff8d5861d4 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -257,7 +257,7 @@ end it 'deletes a project', :sidekiq_inline do - expect { remove_with_confirm('Delete project', "Delete #{project.full_name}", 'Yes, delete project') }.to change { Project.count }.by(-1) + expect { remove_with_confirm('Delete project', project.path_with_namespace, 'Yes, delete project') }.to change { Project.count }.by(-1) expect(page).to have_content "Project '#{project.full_name}' is in the process of being deleted." expect(Project.all.count).to be_zero expect(project.issues).to be_empty diff --git a/spec/frontend/projects/components/__snapshots__/project_delete_button_spec.js.snap b/spec/frontend/projects/components/__snapshots__/project_delete_button_spec.js.snap index 492a40458e2a3a695d15f7b9128b52b12a4b6edf..c255fcce321b1fb9b27c96f41d0c1b08cbab4e8f 100644 --- a/spec/frontend/projects/components/__snapshots__/project_delete_button_spec.js.snap +++ b/spec/frontend/projects/components/__snapshots__/project_delete_button_spec.js.snap @@ -71,10 +71,10 @@ exports[`Project remove modal initialized matches the snapshot 1`] = ` </code> </p> - <gl-form-textarea-stub + <gl-form-input-stub id="confirm_name_input" name="confirm_name_input" - noresize="true" + type="text" /> </div> diff --git a/spec/frontend/projects/components/shared/__snapshots__/delete_button_spec.js.snap b/spec/frontend/projects/components/shared/__snapshots__/delete_button_spec.js.snap index a34507e9199f07d36736b7643d4990198ea10158..dd54db7dc0a4d11d3c98b8e5d00c242b1239cdb6 100644 --- a/spec/frontend/projects/components/shared/__snapshots__/delete_button_spec.js.snap +++ b/spec/frontend/projects/components/shared/__snapshots__/delete_button_spec.js.snap @@ -51,10 +51,10 @@ exports[`Project remove modal intialized matches the snapshot 1`] = ` </code> </p> - <gl-form-textarea-stub + <gl-form-input-stub id="confirm_name_input" name="confirm_name_input" - noresize="true" + type="text" /> </div> diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 661d9ac2821e28717f429611eb4279e949545bba..393054c320b940f630d13590abfb7757d9045dbe 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -987,8 +987,8 @@ def license_name describe "#delete_confirm_phrase" do subject { helper.delete_confirm_phrase(project) } - it 'includes the project full name' do - expect(subject).to eq("Delete #{project.full_name}") + it 'includes the project path with namespace' do + expect(subject).to eq(project.path_with_namespace) end end end