public async Task MaxAttemptsExceeded_Throws() { var uniqueData = UNIQUE_PREFIX + "MaxAttExceeded"; var seedDate = new DateTime(1953, 01, 19); using var app = _appFactory.Create(s => s.Configure <UsersSettings>(s => { s.AccountVerification.InitiationRateLimit.Quantity = 2; s.AccountVerification.InitiationRateLimit.Window = TimeSpan.FromHours(2); })); var contentRepository = app.Services.GetContentRepository(); app.Mocks.MockDateTime(seedDate); var authenticatedTask = await AddUserAndInitiate(uniqueData + 1, app); var command = new InitiateUserAccountVerificationViaEmailCommand() { UserId = authenticatedTask.UserId }; app.Mocks.MockDateTime(seedDate.AddHours(1)); await contentRepository.Users().AccountVerification().EmailFlow().InitiateAsync(command); using (new AssertionScope()) { app.Mocks.MockDateTime(seedDate.AddHours(1).AddMinutes(59)); await contentRepository .Awaiting(r => r.Users().AccountVerification().EmailFlow().InitiateAsync(command)) .Should() .ThrowAsync <ValidationErrorException>() .WithErrorCode(UserValidationErrors.AccountVerification.Initiation.RateLimitExceeded.ErrorCode); app.Mocks.MockDateTime(seedDate.AddHours(2)); await contentRepository .Awaiting(r => r.Users().AccountVerification().EmailFlow().InitiateAsync(command)) .Should() .NotThrowAsync(); } }
public async Task AlreadyVerified_Throws() { var uniqueData = UNIQUE_PREFIX + "AlrVerT"; var seedDate = new DateTime(1953, 01, 23); using var app = _appFactory.Create(); var contentRepository = app.Services.GetContentRepository(); app.Mocks.MockDateTime(seedDate); var userId = await app.TestData.Users().AddAsync(uniqueData, c => c.IsAccountVerified = true); var command = new InitiateUserAccountVerificationViaEmailCommand() { UserId = userId }; await contentRepository .Awaiting(r => r.Users().AccountVerification().EmailFlow().InitiateAsync(command)) .Should() .ThrowAsync <ValidationErrorException>() .WithErrorCode(UserValidationErrors.AccountVerification.Initiation.AlreadyVerified.ErrorCode); }
public Task InitiateAsync(InitiateUserAccountVerificationViaEmailCommand command) { return(ExtendableContentRepository.ExecuteCommandAsync(command)); }