using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Moq; using NUnit.Framework; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Editors; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Security; 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 partial class UserServiceCrudTests : UmbracoIntegrationTestWithContent { private IUserGroupService UserGroupService => GetRequiredService(); private IEntityService EntityService => GetRequiredService(); protected override void ConfigureTestServices(IServiceCollection services) { base.ConfigureTestServices(services); services.RemoveAll(); services.AddScoped(); } // This is resolved from the service scope, so we have to add it to the service collection. private class TestUriProvider : IInviteUriProvider { public Task> CreateInviteUriAsync(IUser invitee) { var fakePath = "https://localhost:44331/fakeInviteEndpoint"; Attempt attempt = Attempt.Succeed(UserOperationStatus.Success, new Uri(fakePath)); return Task.FromResult(attempt); } } private IUserService CreateUserService( SecuritySettings? securitySettings = null, IUserInviteSender? inviteSender = null, ILocalLoginSettingProvider? localLoginSettingProvider = null) { securitySettings ??= GetRequiredService>().Value; IOptions securityOptions = Options.Create(securitySettings); if (inviteSender is null) { var senderMock = new Mock(); senderMock.Setup(x => x.CanSendInvites()).Returns(true); inviteSender = senderMock.Object; } localLoginSettingProvider ??= GetRequiredService(); return new UserService( GetRequiredService(), GetRequiredService(), GetRequiredService(), GetRequiredService(), GetRequiredService(), GetRequiredService>(), securityOptions, GetRequiredService(), GetRequiredService(), GetRequiredService(), localLoginSettingProvider, inviteSender, GetRequiredService(), GetRequiredService(), GetRequiredService(), GetRequiredService>(), GetRequiredService(), GetRequiredService(), GetRequiredService()); } }