Display error message when deleting tag in web UI fails

This commit is contained in:
Adam Niedzielski 2017-03-13 18:12:32 +01:00
parent 32da760268
commit 34bf5d863e
5 changed files with 48 additions and 11 deletions

View file

@ -41,13 +41,27 @@ class Projects::TagsController < Projects::ApplicationController
end
def destroy
Tags::DestroyService.new(project, current_user).execute(params[:id])
result = Tags::DestroyService.new(project, current_user).execute(params[:id])
respond_to do |format|
format.html do
redirect_to namespace_project_tags_path(@project.namespace, @project)
if result[:status] == :success
format.html do
redirect_to namespace_project_tags_path(@project.namespace, @project)
end
format.js
else
@error = result[:message]
format.html do
redirect_to namespace_project_tags_path(@project.namespace, @project),
alert: @error
end
format.js do
render status: :unprocessable_entity
end
end
format.js
end
end
end

View file

@ -21,6 +21,8 @@ module Tags
else
error('Failed to remove tag')
end
rescue GitHooksService::PreReceiveError => ex
error(ex.message)
end
def error(message, return_code = 400)

View file

@ -1,2 +1,4 @@
- if @repository.tags.empty?
- if @error.present?
new Flash('#{escape_javascript(@error)}', 'alert');
- elsif @repository.tags.empty?
$('.tags').load(document.URL + ' .nothing-here-block').hide().fadeIn(1000)

View file

@ -0,0 +1,4 @@
---
title: Display error message when deleting tag in web UI fails
merge_request: 9906
author:

View file

@ -10,16 +10,12 @@ feature 'Master deletes tag', feature: true do
visit namespace_project_tags_path(project.namespace, project)
end
context 'from the tags list page' do
context 'from the tags list page', js: true do
scenario 'deletes the tag' do
expect(page).to have_content 'v1.1.0'
page.within('.content') do
first('.btn-remove').click
end
delete_first_tag
expect(current_path).to eq(
namespace_project_tags_path(project.namespace, project))
expect(page).not_to have_content 'v1.1.0'
end
end
@ -37,4 +33,23 @@ feature 'Master deletes tag', feature: true do
expect(page).not_to have_content 'v1.0.0'
end
end
context 'when pre-receive hook fails', js: true do
before do
allow_any_instance_of(GitHooksService).to receive(:execute)
.and_raise(GitHooksService::PreReceiveError, 'Do not delete tags')
end
scenario 'shows the error message' do
delete_first_tag
expect(page).to have_content('Do not delete tags')
end
end
def delete_first_tag
page.within('.content') do
first('.btn-remove').click
end
end
end