Service integration displays validation errors on test fail

Fixes attempts to update a service integration which had `can_test?`
set to true but validations were causing the "Test and save changes"
button to return "Something went wrong on our end."

Removes references to index action left from 0af9943314
This commit is contained in:
James Edwards-Jones 2018-02-24 03:18:14 +00:00
parent 6253d4456a
commit ef15668d82
3 changed files with 32 additions and 16 deletions

View File

@ -4,7 +4,7 @@ class Projects::ServicesController < Projects::ApplicationController
# Authorize # Authorize
before_action :authorize_admin_project! before_action :authorize_admin_project!
before_action :ensure_service_enabled before_action :ensure_service_enabled
before_action :service, only: [:edit, :update, :test] before_action :service
respond_to :html respond_to :html
@ -24,26 +24,30 @@ class Projects::ServicesController < Projects::ApplicationController
end end
def test def test
message = {} if @service.can_test?
render json: service_test_response, status: :ok
if @service.can_test? && @service.update_attributes(service_params[:service])
data = @service.test_data(project, current_user)
outcome = @service.test(data)
unless outcome[:success]
message = { error: true, message: 'Test failed.', service_response: outcome[:result].to_s }
end
status = :ok
else else
status = :not_found render json: {}, status: :not_found
end end
render json: message, status: status
end end
private private
def service_test_response
if @service.update_attributes(service_params[:service])
data = @service.test_data(project, current_user)
outcome = @service.test(data)
if outcome[:success]
{}
else
{ error: true, message: 'Test failed.', service_response: outcome[:result].to_s }
end
else
{ error: true, message: 'Validations failed.', service_response: @service.errors.full_messages.join(',') }
end
end
def success_message def success_message
if @service.active? if @service.active?
"#{@service.title} activated." "#{@service.title} activated."

View File

@ -69,7 +69,7 @@ constraints(ProjectUrlConstrainer.new) do
end end
end end
resources :services, constraints: { id: %r{[^/]+} }, only: [:index, :edit, :update] do resources :services, constraints: { id: %r{[^/]+} }, only: [:edit, :update] do
member do member do
put :test put :test
end end

View File

@ -23,6 +23,18 @@ describe Projects::ServicesController do
end end
end end
context 'when validations fail' do
let(:service_params) { { active: 'true', token: '' } }
it 'returns error messages in JSON response' do
put :test, namespace_id: project.namespace, project_id: project, id: :hipchat, service: service_params
expect(json_response['message']).to eq "Validations failed."
expect(json_response['service_response']).to eq "Token can't be blank"
expect(response).to have_gitlab_http_status(200)
end
end
context 'success' do context 'success' do
context 'with empty project' do context 'with empty project' do
let(:project) { create(:project) } let(:project) { create(:project) }