diff --git a/app/models/user.rb b/app/models/user.rb index 6e7e94cf6..b11d91807 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -68,7 +68,7 @@ class User < Principal MAIL_LENGTH_LIMIT = 60 validates_presence_of :login, :firstname, :lastname, :mail, :if => Proc.new { |user| !user.is_a?(AnonymousUser) } - validates_uniqueness_of :login, :if => Proc.new { |user| !user.login.blank? }, :case_sensitive => false + validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false validates_uniqueness_of :mail, :if => Proc.new { |user| !user.mail.blank? }, :case_sensitive => false # Login must contain lettres, numbers, underscores only validates_format_of :login, :with => /^[a-z0-9_\-@\.]*$/i diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index a85d56adb..cf21298f0 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -134,6 +134,20 @@ class UserTest < ActiveSupport::TestCase assert_equal "john", @admin.login end + def test_update_should_not_fail_for_legacy_user_with_different_case_logins + u1 = User.new(:firstname => "new", :lastname => "user", :mail => "newuser1@somenet.foo") + u1.login = 'newuser1' + assert u1.save + + u2 = User.new(:firstname => "new", :lastname => "user", :mail => "newuser2@somenet.foo") + u2.login = 'newuser1' + assert u2.save(false) + + user = User.find(u2.id) + user.firstname = "firstname" + assert user.save, "Save failed" + end + def test_destroy_should_delete_members_and_roles members = Member.find_all_by_user_id(2) ms = members.size