Commit ef15668d authored by James Edwards-Jones's avatar James Edwards-Jones

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
...@@ -4,7 +4,7 @@ class Projects::ServicesController < Projects::ApplicationController ...@@ -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 ...@@ -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
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) data = @service.test_data(project, current_user)
outcome = @service.test(data) outcome = @service.test(data)
unless outcome[:success] if outcome[:success]
message = { error: true, message: 'Test failed.', service_response: outcome[:result].to_s } {}
else
{ error: true, message: 'Test failed.', service_response: outcome[:result].to_s }
end end
status = :ok
else else
status = :not_found { error: true, message: 'Validations failed.', service_response: @service.errors.full_messages.join(',') }
end end
render json: message, status: status
end end
private
def success_message def success_message
if @service.active? if @service.active?
"#{@service.title} activated." "#{@service.title} activated."
......
...@@ -69,7 +69,7 @@ constraints(ProjectUrlConstrainer.new) do ...@@ -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
......
...@@ -23,6 +23,18 @@ describe Projects::ServicesController do ...@@ -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) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment