Skip to content
Snippets Groups Projects
Commit b82fdf62 authored by James Lopez's avatar James Lopez
Browse files

Fix error 500 renaming group. Also added specs and changelog.

parent ad1a1d97
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -82,7 +82,10 @@ class GroupsController < Groups::ApplicationController
if Groups::UpdateService.new(@group, current_user, group_params).execute
redirect_to edit_group_path(@group), notice: "Group '#{@group.name}' was successfully updated."
else
render action: "edit"
error = group.errors.full_messages.first
alert_message = "Group '#{@group.name}' cannot be updated: " + error
redirect_to edit_group_path(@group.reload), alert: alert_message
end
end
 
Loading
Loading
Loading
Loading
@@ -98,7 +98,7 @@ class Namespace < ActiveRecord::Base
 
def move_dir
if any_project_has_container_registry_tags?
raise Exception.new('Namespace cannot be moved, because at least one project has tags in container registry')
raise Gitlab::UpdatePathError.new('Namespace cannot be moved, because at least one project has tags in container registry')
end
 
# Move the namespace directory in all storages paths used by member projects
Loading
Loading
@@ -111,7 +111,7 @@ class Namespace < ActiveRecord::Base
 
# if we cannot move namespace directory we should rollback
# db changes in order to prevent out of sync between db and fs
raise Exception.new('namespace directory cannot be moved')
raise Gitlab::UpdatePathError.new('namespace directory cannot be moved')
end
end
 
Loading
Loading
Loading
Loading
@@ -14,7 +14,13 @@ module Groups
 
group.assign_attributes(params)
 
group.save
begin
group.save
rescue Gitlab::UpdatePathError => e
group.errors.add(:base, e.message)
false
end
end
end
end
---
title: Fix 500 error renaming group
merge_request:
author:
module Gitlab
class UpdatePathError < StandardError; end
end
Loading
Loading
@@ -105,4 +105,25 @@ describe GroupsController do
end
end
end
describe 'PUT update' do
before do
sign_in(user)
end
it 'updates the path succesfully' do
post :update, id: group.to_param, group: { path: 'new_path' }
expect(response).to have_http_status(302)
expect(controller).to set_flash[:notice]
end
it 'does not update the path on error' do
allow_any_instance_of(Group).to receive(:move_dir).and_raise(Gitlab::UpdatePathError)
post :update, id: group.to_param, group: { path: 'new_path' }
expect(response).to have_http_status(302)
expect(controller).to set_flash[:alert]
end
end
end
require 'spec_helper'
 
describe Groups::UpdateService, services: true do
let!(:user) { create(:user) }
let!(:private_group) { create(:group, :private) }
let!(:internal_group) { create(:group, :internal) }
let!(:public_group) { create(:group, :public) }
let!(:user) { create(:user) }
let!(:private_group) { create(:group, :private) }
let!(:internal_group) { create(:group, :internal) }
let!(:public_group) { create(:group, :public) }
 
describe "#execute" do
context "project visibility_level validation" do
context "public group with public projects" do
let!(:service) { described_class.new(public_group, user, visibility_level: Gitlab::VisibilityLevel::INTERNAL ) }
let!(:service) { described_class.new(public_group, user, visibility_level: Gitlab::VisibilityLevel::INTERNAL) }
 
before do
public_group.add_user(user, Gitlab::Access::MASTER)
Loading
Loading
@@ -23,7 +23,7 @@ describe Groups::UpdateService, services: true do
end
 
context "internal group with internal project" do
let!(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE ) }
let!(:service) { described_class.new(internal_group, user, visibility_level: Gitlab::VisibilityLevel::PRIVATE) }
 
before do
internal_group.add_user(user, Gitlab::Access::MASTER)
Loading
Loading
@@ -39,7 +39,7 @@ describe Groups::UpdateService, services: true do
end
 
context "unauthorized visibility_level validation" do
let!(:service) { described_class.new(internal_group, user, visibility_level: 99 ) }
let!(:service) { described_class.new(internal_group, user, visibility_level: 99) }
before do
internal_group.add_user(user, Gitlab::Access::MASTER)
end
Loading
Loading
@@ -49,4 +49,39 @@ describe Groups::UpdateService, services: true do
expect(internal_group.errors.count).to eq(1)
end
end
context 'rename group' do
let!(:service) { described_class.new(internal_group, user, path: 'new_path') }
before do
internal_group.add_user(user, Gitlab::Access::MASTER)
create(:project, :internal, group: internal_group)
end
it 'returns true' do
puts internal_group.errors.full_messages
expect(service.execute).to eq(true)
end
context 'error moving group' do
before do
allow(internal_group).to receive(:move_dir).and_raise(Gitlab::UpdatePathError)
end
it 'does not raise an error' do
expect { service.execute }.not_to raise_error
end
it 'returns false' do
expect(service.execute).to eq(false)
end
it 'has the right error' do
service.execute
expect(internal_group.errors.full_messages.first).to eq('Gitlab::UpdatePathError')
end
end
end
end
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