diff --git a/src/Umbraco.Core/Services/UserGroupService.cs b/src/Umbraco.Core/Services/UserGroupService.cs index 6a2f7415f5..cd2ed07768 100644 --- a/src/Umbraco.Core/Services/UserGroupService.cs +++ b/src/Umbraco.Core/Services/UserGroupService.cs @@ -271,6 +271,11 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return Attempt.FailWithStatus(commonValidationStatus, userGroup); } + if (_userGroupRepository.Get(userGroup.Alias) is not null) + { + return Attempt.FailWithStatus(UserGroupOperationStatus.DuplicateAlias, userGroup); + } + return Attempt.SucceedWithStatus(UserGroupOperationStatus.Success, userGroup); } @@ -327,6 +332,12 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return UserGroupOperationStatus.NotFound; } + IUserGroup? existing = _userGroupRepository.Get(userGroup.Alias); + if (existing is not null && existing.Key != userGroup.Key) + { + return UserGroupOperationStatus.DuplicateAlias; + } + return UserGroupOperationStatus.Success; } @@ -350,11 +361,6 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return UserGroupOperationStatus.AliasTooLong; } - if (UserGroupHasUniqueAlias(userGroup) is false) - { - return UserGroupOperationStatus.DuplicateAlias; - } - UserGroupOperationStatus startNodesValidationStatus = ValidateStartNodesExists(userGroup); if (startNodesValidationStatus is not UserGroupOperationStatus.Success) { @@ -391,8 +397,6 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return UserGroupOperationStatus.Success; } - private bool UserGroupHasUniqueAlias(IUserGroup userGroup) => _userGroupRepository.Get(userGroup.Alias) is null; - /// /// Ensures that the user creating the user group is either an admin, or in the group itself. /// diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/UserGroupServiceValidationTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/UserGroupServiceValidationTests.cs index 6bf09e2a00..e52a342305 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/UserGroupServiceValidationTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/UserGroupServiceValidationTests.cs @@ -148,4 +148,24 @@ public class UserGroupServiceValidationTests : UmbracoIntegrationTest Assert.IsFalse(updateResult.Success); Assert.AreEqual(UserGroupOperationStatus.DuplicateAlias, updateResult.Status); } + + [Test] + public async Task Can_Update_UserGroup_To_New_Name() + { + var userGroup = new UserGroup(ShortStringHelper) + { + Name = "Some Name", + Alias = "someAlias" + }; + var setupResult = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserId); + Assert.IsTrue(setupResult.Success); + + + var updateName = "New Name"; + userGroup.Name = updateName; + var updateResult = await UserGroupService.UpdateAsync(userGroup, Constants.Security.SuperUserId); + Assert.IsTrue(updateResult.Success); + var updatedGroup = updateResult.Result; + Assert.AreEqual(updateName, updatedGroup.Name); + } }