Skip to content
Snippets Groups Projects
Commit ef15668d authored by James Edwards-Jones's avatar James Edwards-Jones
Browse files

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 0af99433
parent 6253d445
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
 
Loading
Loading
@@ -24,26 +24,30 @@ class Projects::ServicesController < Projects::ApplicationController
end
 
def test
message = {}
if @service.can_test?
render json: service_test_response, status: :ok
else
render json: {}, status: :not_found
end
end
private
 
if @service.can_test? && @service.update_attributes(service_params[:service])
def service_test_response
if @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 }
if outcome[:success]
{}
else
{ error: true, message: 'Test failed.', service_response: outcome[:result].to_s }
end
status = :ok
else
status = :not_found
{ error: true, message: 'Validations failed.', service_response: @service.errors.full_messages.join(',') }
end
render json: message, status: status
end
 
private
def success_message
if @service.active?
"#{@service.title} activated."
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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) }
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment