* Removed obsoletes from IConfigManipulator. * Removed obsolete models builder extensions. * Removed the obsolete ContentDashboardSettings. * Removed the obsolete InstallMissingDatabase setting on GlobalSettings. * Removed obsolete NuCache settings. * Removed obsolete RuntimeMinificationSettings. * Removed obsolete health check constant. * Removed obsolete icon constant. * Removed obsolete telemetry constant. * Removed obsolete property and constructor on UmbracoBuilder. * Removed obsolete constructor on AuditNotificationsHandler. * Removed obsolete constructor on HTTP header health checks. * Removed obsolete constructor on MediaFileManager. * Removed obsolete GetDefaultFileContent on ViewHelper. * Remove obsoleted methods on embed providers. * Fix tests. * Removed obsolete constructors on BlockEditorDataConverter. * Removed obsolete SeedCacheDuration property on CacheSettings. * Removed obsolete PublishCulture on ContentRepositoryExtensions. * Removed obsolete MonitorLock. * Removed obsolete synchronous HasSavedValues from IDataTypeUsageService and IDataTypeUsageRepository. * Removed obsolete HasSavedPropertyValues from IPropertyTypeUsageService and IPropertyTypeUsageRepository. * Removed obsolete methods in ITrackedReferencesService and ITrackedReferencesRepository. * Removed obsolete DateValueEditor constructors. * Removed obsolete GetAutomaticRelationTypesAliases. * Removed obsolete constructor on TextOnlyValueEditor. * Removed obsolete constructors on RegexValidator and RequiredValidator. * Removed obsolete constructs on SliderValueConverter and TagsValueConverter. * Removed obsolete GetContentType methods from IPublishedCache. * Removed ContentFinderByIdPath. * Removed obsolete constructor on DefaultMediaUrlProvider. * Removed obsolete constructor on Domain. * Removed obsolete constructor on PublishedRequest. * Removed obsolete methods on CheckPermissions. * Removed obsolete GetUserId from IBackOfficeSecurity. * Removed obsolete methods on LegacyPasswordSecurity. * Removed obsolete constructors on AuditService. * Removed obsolete methods on IContentEditingService. * Remove obsolete constructors and methods on ContentService/IContentService. * Removed obsolete constructor in ContentTypeEditingService. * Removed obsolete constructor in MediaTypeEditingService. * Removed obsolete constructor in MemberTypeEditingService. * Removed obsolete constructor in ContentTypeService. * Removed obsolete constructors in ContentTypeServiceBase. * Removed obsolete constructors and methods in ContentVersionService. * Removed obsolete constructor in DataTypeUsageService. * Removed obsolete constructor in DomainService. * Removed obsolete constructor in FileService. * Removes obsolete AttemptMove from IContentService. * Removes obsolete SetPreventCleanup from IContentVersionService. * Removes obsolete GetReferences from IDataTypeService. * Removed obsolete SetConsentLevel from IMetricsConsentService. * Removed obsolete methods from IPackageDataInstallation. * Removed obsolete methods from IPackagingService. * Removed obsolete methods on ITwoFactorLoginService. Removed obsolete ITemporaryMediaService. * Removed obsolete constructor from MediaService, MemberTypeService and MediaTypeService. * More obsolete constructors. * Removed obsoleted overloads on IPropertyValidationService. * Fixed build for tests. * Removed obsolete constructor for PublicAccessService, UserService and RelationService. * Removed GetDefaultMemberType. * Removed obsolete user group functionality from IUserService. * Removed obsolete extension methods on IUserService. * Removed obsolete method from ITelemetryService. * Removed obsolete UdiParserServiceConnectors. * Removed obsolete method on ICookieManager. * Removed obsolete DynamicContext. * Removed obsolete XmlHelper. * Fixed failing integration tests. * Removed obsoletes in Umbraco.Cms.Api.Common * Removed obsoletes in Umbraco.Cms.Api.Delivery * Removed obsoletes in Umbraco.Cms.Api.Management * Removed obsoletes in Umbraco.Examine.Lucene * Removed obsoletes in Umbraco.Infrastructure * Fix failing delivery API contract integration test. * Made integration tests internal. * Removed obsoletes from web projects. * Fix build. * Removed Twitter OEmbed provider * Removed obsolete constructor on PublishedDataType. * Removed obsolete constructors on PublishedCacheBase. * Removed the obsolete PropertyEditorTagsExtensions. * Removed obsoletion properties on configuration response models (#18697) * Removed obsolete methods from server-side models. * Update client-side types and sdk. * Update client-side files. * Removed obsoletion of Utf8ToAsciiConverter.ToAsciiString overload. (#18694) * Removed obsolete method in UserService. (#18710) * Removed obsoleted group alias keys from being publicly available. (#18682) * Removed unneceessary ApiVersion attribute. * Clean-up obsoletions on MemberService (#18703) * Removed obsoleted method on MemberService, added future obsoletion to interface and updated all callers. * Removed obsoletion on member service method that's not obsolete on the interface.
205 lines
7.8 KiB
C#
205 lines
7.8 KiB
C#
using NUnit.Framework;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Cms.Core.Models.Membership;
|
|
using Umbraco.Cms.Core.Services;
|
|
using Umbraco.Cms.Core.Services.OperationStatus;
|
|
using Umbraco.Cms.Core.Strings;
|
|
using Umbraco.Cms.Tests.Common.Testing;
|
|
using Umbraco.Cms.Tests.Integration.Testing;
|
|
|
|
namespace Umbraco.Cms.Tests.Integration.Umbraco.Core.Services;
|
|
|
|
[TestFixture]
|
|
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)]
|
|
internal sealed class UserGroupServiceValidationTests : UmbracoIntegrationTest
|
|
{
|
|
private IUserGroupService UserGroupService => GetRequiredService<IUserGroupService>();
|
|
|
|
private IShortStringHelper ShortStringHelper => GetRequiredService<IShortStringHelper>();
|
|
|
|
[Test]
|
|
public async Task Cannot_create_user_group_with_name_equals_null()
|
|
{
|
|
var userGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = null
|
|
};
|
|
|
|
var result = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.MissingName, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_create_user_group_with_name_longer_than_max_length()
|
|
{
|
|
var userGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "Sed porttitor lectus nibh. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Vivamus suscipit tortor eget felis porttitor volutpat. Quisque velit nisi, pretium ut lacinia in, elementum id enim."
|
|
};
|
|
|
|
var result = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.NameTooLong, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_create_user_group_with_alias_longer_than_max_length()
|
|
{
|
|
var userGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "Some Name",
|
|
Alias = "Sed porttitor lectus nibh. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Vivamus suscipit tortor eget felis porttitor volutpat. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Vivamus suscipit tortor eget felis porttitor volutpat. Quisque velit nisi, pretium ut lacinia in, elementum id enim."
|
|
};
|
|
|
|
var result = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.AliasTooLong, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_update_non_existing_user_group()
|
|
{
|
|
var userGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "Some Name",
|
|
Alias = "someAlias"
|
|
};
|
|
|
|
var result = await UserGroupService.UpdateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.NotFound, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_create_existing_user_group()
|
|
{
|
|
var userGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "Some Name",
|
|
Alias = "someAlias"
|
|
};
|
|
|
|
var result = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
|
|
result = await UserGroupService.CreateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.AlreadyExists, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_create_user_group_with_duplicate_alias()
|
|
{
|
|
var alias = "duplicateAlias";
|
|
|
|
var existingUserGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "I already exist",
|
|
Alias = alias
|
|
};
|
|
var setupResult = await UserGroupService.CreateAsync(existingUserGroup, Constants.Security.SuperUserKey);
|
|
Assert.IsTrue(setupResult.Success);
|
|
|
|
var newUserGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "I have a duplicate alias",
|
|
Alias = alias,
|
|
};
|
|
var result = await UserGroupService.CreateAsync(newUserGroup, Constants.Security.SuperUserKey);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.DuplicateAlias, result.Status);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Cannot_update_user_group_with_duplicate_alias()
|
|
{
|
|
var alias = "duplicateAlias";
|
|
|
|
var existingUserGroup = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "I already exist",
|
|
Alias = alias
|
|
};
|
|
var setupResult = await UserGroupService.CreateAsync(existingUserGroup, Constants.Security.SuperUserKey);
|
|
Assert.IsTrue(setupResult.Success);
|
|
|
|
IUserGroup userGroupToUpdate = new UserGroup(ShortStringHelper)
|
|
{
|
|
Name = "I don't have a duplicate alias",
|
|
Alias = "somAlias",
|
|
};
|
|
var creationResult = await UserGroupService.CreateAsync(userGroupToUpdate, Constants.Security.SuperUserKey);
|
|
Assert.IsTrue(creationResult.Success);
|
|
|
|
|
|
userGroupToUpdate = creationResult.Result;
|
|
userGroupToUpdate.Name = "Now I have a duplicate alias";
|
|
userGroupToUpdate.Alias = alias;
|
|
|
|
var updateResult = await UserGroupService.UpdateAsync(userGroupToUpdate, Constants.Security.SuperUserKey);
|
|
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.SuperUserKey);
|
|
Assert.IsTrue(setupResult.Success);
|
|
|
|
|
|
var updateName = "New Name";
|
|
userGroup.Name = updateName;
|
|
var updateResult = await UserGroupService.UpdateAsync(userGroup, Constants.Security.SuperUserKey);
|
|
Assert.IsTrue(updateResult.Success);
|
|
var updatedGroup = updateResult.Result;
|
|
Assert.AreEqual(updateName, updatedGroup.Name);
|
|
}
|
|
|
|
[TestCase(Constants.Security.AdminGroupKeyString, "admin")]
|
|
[TestCase(Constants.Security.SensitiveDataGroupKeyString, "sensitiveData")]
|
|
[TestCase(Constants.Security.TranslatorGroupString, "translator")]
|
|
public async Task Cannot_Delete_System_UserGroups(string userGroupKeyAsString, string expectedGroupAlias)
|
|
{
|
|
// since we can't use the constants as input, let's make sure we don't get false positives by double checking the group alias
|
|
var key = Guid.Parse(userGroupKeyAsString);
|
|
var userGroup = await UserGroupService.GetAsync(key);
|
|
Assert.IsNotNull(userGroup);
|
|
Assert.AreEqual(expectedGroupAlias, userGroup.Alias);
|
|
|
|
var result = await UserGroupService.DeleteAsync(key);
|
|
|
|
Assert.IsFalse(result.Success);
|
|
Assert.AreEqual(UserGroupOperationStatus.CanNotDeleteIsSystemUserGroup, result.Result);
|
|
}
|
|
|
|
[TestCase( Constants.Security.EditorGroupKeyString, "editor")]
|
|
[TestCase(Constants.Security.WriterGroupKeyString, "writer")]
|
|
public async Task Can_Delete_Non_System_UserGroups(string userGroupKeyAsString, string expectedGroupAlias)
|
|
{
|
|
// since we can't use the constants as input, let's make sure we don't get false positives by double checking the group alias
|
|
var key = Guid.Parse(userGroupKeyAsString);
|
|
var userGroup = await UserGroupService.GetAsync(key);
|
|
Assert.IsNotNull(userGroup);
|
|
Assert.AreEqual(expectedGroupAlias, userGroup.Alias);
|
|
|
|
var result = await UserGroupService.DeleteAsync(key);
|
|
|
|
Assert.IsTrue(result.Success);
|
|
Assert.AreEqual(result.Result,UserGroupOperationStatus.Success);
|
|
}
|
|
}
|