public async Task MaxAttemptsExceeded_Throws() { var uniqueData = UNIQUE_PREFIX + "MaxAttExceeded"; var seedDate = new DateTime(2022, 01, 19); using var app = _appFactory.Create(s => s.Configure <UsersSettings>(s => { s.AccountRecovery.InitiationRateLimit.Quantity = 2; s.AccountRecovery.InitiationRateLimit.Window = TimeSpan.FromHours(2); })); var contentRepository = app.Services.GetContentRepository(); app.Mocks.MockDateTime(seedDate); var request = await AddUserAndInitiateRequest(uniqueData + 1, app); var command = new InitiateUserAccountRecoveryViaEmailCommand() { UserAreaCode = request.User.UserAreaCode, Username = request.User.Email }; app.Mocks.MockDateTime(seedDate.AddHours(1)); await contentRepository.Users().AccountRecovery().InitiateAsync(command); using (new AssertionScope()) { app.Mocks.MockDateTime(seedDate.AddHours(1).AddMinutes(59)); await contentRepository .Awaiting(r => r.Users().AccountRecovery().InitiateAsync(command)) .Should() .ThrowAsync <ValidationErrorException>() .WithErrorCode(UserValidationErrors.AccountRecovery.Initiation.RateLimitExceeded.ErrorCode); app.Mocks.MockDateTime(seedDate.AddHours(2)); await contentRepository .Awaiting(r => r.Users().AccountRecovery().InitiateAsync(command)) .Should() .NotThrowAsync(); } }
public Task InitiateAsync(InitiateUserAccountRecoveryViaEmailCommand command) { return(ExtendableContentRepository.ExecuteCommandAsync(command)); }