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:
parent
6253d4456a
commit
ef15668d82
|
@ -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."
|
||||||
|
|
|
@ -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
|
||||||
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) }
|
||||||
|
|
Loading…
Reference in New Issue