diff options
-rw-r--r-- | app/controllers/projects_controller.rb | 14 | ||||
-rw-r--r-- | app/views/projects/settings/_general.html.haml | 2 | ||||
-rw-r--r-- | spec/controllers/projects_controller_spec.rb | 44 |
3 files changed, 46 insertions, 14 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 12db493978b..6b3b767e155 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -77,13 +77,19 @@ class ProjectsController < Projects::ApplicationController format.html do redirect_to(edit_project_path(@project, anchor: 'js-general-project-settings')) end + + format.js else - flash.now[:alert] = result[:message] + flash[:alert] = result[:message] - format.html { render 'edit' } - end + format.html do + redirect_to(edit_project_path(@project, anchor: 'js-general-project-settings')) + end - format.js + format.js do + render status: :unprocessable_entity + end + end end end diff --git a/app/views/projects/settings/_general.html.haml b/app/views/projects/settings/_general.html.haml index 520f342f567..544e5018a95 100644 --- a/app/views/projects/settings/_general.html.haml +++ b/app/views/projects/settings/_general.html.haml @@ -1,4 +1,4 @@ -= form_for [@project.namespace.becomes(Namespace), @project], remote: true, html: { multipart: true, class: "edit-project js-general-settings-form" }, authenticity_token: true do |f| += form_for [@project.namespace.becomes(Namespace), @project], html: { multipart: true, class: "edit-project js-general-settings-form" }, authenticity_token: true do |f| %input{ name: 'update_section', type: 'hidden', value: 'js-general-settings' } = form_errors(@project) diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 7f1bbebd128..c061f0d00c4 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -315,6 +315,41 @@ describe ProjectsController do sign_in(admin) end + def update_project(**parameters) + put :update, + params: { + format: format, + namespace_id: project.namespace.path, + id: project.path, + project: parameters + } + end + + it 'displays error messages' do + project.update(import_url: 'http://www.google.com') + + expect { update_project import_url: 'bogus-url' }.not_to change { project.reload.import_url } + + expect(controller).to set_flash[:alert] + expect(response).to have_gitlab_http_status(302) + end + + it 'renders JSON error message' do + project.update(import_url: 'http://www.google.com') + + expect do + put :update, + params: { + format: :js, + namespace_id: project.namespace.path, + id: project.path, + project: { import_url: 'bogus-url' } + } + end.not_to change { project.reload.import_url } + + expect(response).to have_gitlab_http_status(422) + end + shared_examples_for 'updating a project' do context 'when only renaming a project path' do it "sets the repository to the right path after a rename" do @@ -392,15 +427,6 @@ describe ProjectsController do } end.not_to change { project.namespace.reload } end - - def update_project(**parameters) - put :update, - params: { - namespace_id: project.namespace.path, - id: project.path, - project: parameters - } - end end context 'hashed storage' do |