Files
Umbraco-CMS/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/UserServiceCrudTests.cs
Bjarke Berg b8af4bab7d User forgot password functionality for Management API (#14704)
* Added attribute filter to ensure a request is taking a minimum time to response

* Added functionality to management api to send forgot password emails and verify these + do the actual reset using the token

* Renamed UserKey to UserId and updated OpenApi.json

* Update src/Umbraco.Core/Services/IUserService.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Cleanup

* Renaming param

* Fixing send user username instead of email + wrong EmailTypes

* Fixed issue with forgot password functionality after reusing other functionality

* Rename prop

* Adding docs and renaming param

* Handle password validation return types

* More cleanup

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2023-08-28 12:14:16 +02:00

90 lines
3.5 KiB
C#

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)]
public partial class UserServiceCrudTests : UmbracoIntegrationTest
{
private IUserGroupService UserGroupService => GetRequiredService<IUserGroupService>();
private IEntityService EntityService => GetRequiredService<IEntityService>();
protected override void ConfigureTestServices(IServiceCollection services)
{
base.ConfigureTestServices(services);
services.RemoveAll<IInviteUriProvider>();
services.AddScoped<IInviteUriProvider, TestUriProvider>();
}
// This is resolved from the service scope, so we have to add it to the service collection.
private class TestUriProvider : IInviteUriProvider
{
public Task<Attempt<Uri, UserOperationStatus>> CreateInviteUriAsync(IUser invitee)
{
var fakePath = "https://localhost:44331/fakeInviteEndpoint";
Attempt<Uri, UserOperationStatus> attempt = Attempt<Uri, UserOperationStatus>.Succeed(UserOperationStatus.Success, new Uri(fakePath));
return Task.FromResult(attempt);
}
}
private IUserService CreateUserService(
SecuritySettings? securitySettings = null,
IUserInviteSender? inviteSender = null,
ILocalLoginSettingProvider? localLoginSettingProvider = null)
{
securitySettings ??= GetRequiredService<IOptions<SecuritySettings>>().Value;
IOptions<SecuritySettings> securityOptions = Options.Create(securitySettings);
if (inviteSender is null)
{
var senderMock = new Mock<IUserInviteSender>();
senderMock.Setup(x => x.CanSendInvites()).Returns(true);
inviteSender = senderMock.Object;
}
localLoginSettingProvider ??= GetRequiredService<ILocalLoginSettingProvider>();
return new UserService(
GetRequiredService<ICoreScopeProvider>(),
GetRequiredService<ILoggerFactory>(),
GetRequiredService<IEventMessagesFactory>(),
GetRequiredService<IUserRepository>(),
GetRequiredService<IUserGroupRepository>(),
GetRequiredService<IOptions<GlobalSettings>>(),
securityOptions,
GetRequiredService<UserEditorAuthorizationHelper>(),
GetRequiredService<IServiceScopeFactory>(),
GetRequiredService<IEntityService>(),
localLoginSettingProvider,
inviteSender,
GetRequiredService<MediaFileManager>(),
GetRequiredService<ITemporaryFileService>(),
GetRequiredService<IShortStringHelper>(),
GetRequiredService<IOptions<ContentSettings>>(),
GetRequiredService<IIsoCodeValidator>(),
GetRequiredService<IUserForgotPasswordSender>());
}
}