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
before_action :authorize_admin_project!
before_action :ensure_service_enabled
before_action :service, only: [:edit, :update, :test]
before_action :service
respond_to :html
@ -24,26 +24,30 @@ class Projects::ServicesController < Projects::ApplicationController
end
def test
message = {}
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
if @service.can_test?
render json: service_test_response, status: :ok
else
status = :not_found
render json: {}, status: :not_found
end
render json: message, status: status
end
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
if @service.active?
"#{@service.title} activated."

View File

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

View File

@ -23,6 +23,18 @@ describe Projects::ServicesController do
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 'with empty project' do
let(:project) { create(:project) }