コード例 #1
0
        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));
 }