Commit 82bafd00 authored by Michael Kozono's avatar Michael Kozono

Make username update fail if namespace part fails

parent f0ac0daf
...@@ -837,7 +837,7 @@ class User < ActiveRecord::Base ...@@ -837,7 +837,7 @@ class User < ActiveRecord::Base
create_namespace!(path: username, name: username) unless namespace create_namespace!(path: username, name: username) unless namespace
if username_changed? if username_changed?
namespace.update_attributes(path: username, name: username) namespace.update_attributes!(path: username, name: username)
end end
end end
......
...@@ -2024,4 +2024,60 @@ describe User do ...@@ -2024,4 +2024,60 @@ describe User do
expect(user.projects_limit_left).to eq(5) expect(user.projects_limit_left).to eq(5)
end end
end end
describe '#ensure_namespace_correct' do
context 'for a new user' do
let(:user) { build(:user) }
it 'creates the namespace' do
expect(user.namespace).to be_nil
user.save!
expect(user.namespace).not_to be_nil
end
end
context 'for an existing user' do
let(:username) { 'foo' }
let(:user) { create(:user, username: username) }
context 'when the user is updated' do
context 'when the username is changed' do
let(:new_username) { 'bar' }
it 'changes the namespace (just to compare to when username is not changed)' do
expect do
user.update_attributes!(username: new_username)
end.to change { user.namespace.updated_at }
end
it 'updates the namespace name' do
user.update_attributes!(username: new_username)
expect(user.namespace.name).to eq(new_username)
end
it 'updates the namespace path' do
user.update_attributes!(username: new_username)
expect(user.namespace.path).to eq(new_username)
end
context 'when there is a validation error (namespace name taken) while updating namespace' do
let!(:conflicting_namespace) { create(:group, name: new_username, path: 'quz') }
it "causes the user save to fail" do
expect(user.update_attributes(username: new_username)).to be_falsey
expect(user.namespace.errors.messages[:name].first).to eq('has already been taken')
end
end
end
context 'when the username is not changed' do
it 'does not change the namespace' do
expect do
user.update_attributes!(email: 'asdf@asdf.com')
end.not_to change { user.namespace.updated_at }
end
end
end
end
end
end end
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