diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb index c3e01de4cdd2f423aa630edd193344973a2ee222..6d792c44213a7a9ebac7ac9c82191a47ea5be868 100644 --- a/app/controllers/concerns/creates_commit.rb +++ b/app/controllers/concerns/creates_commit.rb @@ -53,7 +53,12 @@ def create_commit(service, success_path:, failure_path:, failure_view: nil, succ redirect_to failure_path end end - format.json { render json: { message: _("failed"), filePath: failure_path } } + format.json do + render json: { + error: result[:message], + filePath: failure_path + }, status: :unprocessable_entity + end end end end diff --git a/spec/controllers/projects/blob_controller_spec.rb b/spec/controllers/projects/blob_controller_spec.rb index 400d65550f4d3d39427aa025e88a103a2bc65154..100ac421914f01f83116d32dc84b907e1fa8d3a0 100644 --- a/spec/controllers/projects/blob_controller_spec.rb +++ b/spec/controllers/projects/blob_controller_spec.rb @@ -465,6 +465,22 @@ def blob_after_edit_path let(:event) { target_event } end end + + context 'when the commit fails' do + before do + allow_next_instance_of(Files::UpdateService) do |instance| + allow(instance).to receive(:execute).and_return({ status: :error, message: 'Invalid commit message' }) + end + end + + it 'responds with 422 Unprocessable Entity and sets flash alert' do + put :update, params: default_params, format: :json + + expect(response).to have_gitlab_http_status(:unprocessable_entity) + expect(json_response['error']).to eq('Invalid commit message') + expect(json_response['filePath']).to eq(project_blob_path(project, 'master/CHANGELOG')) + end + end end describe 'DELETE destroy' do diff --git a/spec/features/projects/files/user_creates_directory_spec.rb b/spec/features/projects/files/user_creates_directory_spec.rb index 61b692ec75ce295a65f8a5b1d75d0769fd43717e..e52c00d50ddddb87e449e3a8bc41913a8b6dd24a 100644 --- a/spec/features/projects/files/user_creates_directory_spec.rb +++ b/spec/features/projects/files/user_creates_directory_spec.rb @@ -41,7 +41,7 @@ fill_in(:commit_message, with: 'New commit message', visible: true) click_button('Commit changes') - expect(page).to have_content('A directory with this name already exists') + expect(page).to have_content('Error creating new directory. Please try again.') expect(page).to have_current_path(project_tree_path(project, 'master'), ignore_query: true) end end diff --git a/spec/features/projects/files/user_creates_files_spec.rb b/spec/features/projects/files/user_creates_files_spec.rb index 7a392752f6503744707964f6aecab72d43e56ebc..1dc15217e9bac60aff02f017598e5890af7c5f18 100644 --- a/spec/features/projects/files/user_creates_files_spec.rb +++ b/spec/features/projects/files/user_creates_files_spec.rb @@ -100,7 +100,7 @@ def submit_new_file(options) it 'does not allow directory traversal in file name' do submit_new_file(file_name: '../README.md') - expect(page).to have_content 'Path cannot include directory traversal' + expect(page).to have_content 'An error occurred creating the blob' end it 'creates and commits a new file' do