public async Task OnNextAsync(UserRegisteredEvent item, StreamSequenceToken token = null)
        {
            var @event = new UserVerificationEvent()
            {
                Email  = item.Email,
                Status = UserVerificationStatusEnum.Verified
            };

            if (_verificationState.State.IsAlreadyVerified)
            {
                @event.Status = UserVerificationStatusEnum.Duplicate;
            }

            if (_blacklistedEmails.Get().Contains(item.Email))
            {
                @event.Status = UserVerificationStatusEnum.Blocked;

                _logger.LogWarning("Blacklisted user {email}", item.Email);
            }

            await _userVerificationStream.OnNextAsync(@event);

            _verificationState.State.IsAlreadyVerified = true;
            await _verificationState.WriteStateAsync();
        }
Пример #2
0
 public void Apply(UserVerificationEvent @event)
 {
     if (@event.Status == UserVerificationStatusEnum.Verified)
     {
         IsActive = true;
     }
 }
        public Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null)
        {
            _userVerificationEvent = item;
            _semaphore.Release();

            return(Task.CompletedTask);
        }
        public async Task UserVerification_DuplicateEmail_NotProcessed()
        {
            var       testGuid         = Guid.NewGuid();
            const int semaphoreTimeout = 1000;

            var testEmail           = _faker.Internet.Email();
            var userRegisteredEvent = new UserRegisteredEvent()
            {
                Email = testEmail, Name = _faker.Random.String2(5), Surname = _faker.Random.String2(5)
            };

            var streamProvider         = _cluster.Cluster.Client.GetStreamProvider(Constants.StreamProviderName);
            var userRegistrationStream =
                streamProvider.GetStream <UserRegisteredEvent>(testGuid, nameof(UserRegisteredEvent));
            var userVerifiedStream =
                streamProvider.GetStream <UserVerificationEvent>(testGuid, nameof(UserVerificationEvent));

            await userVerifiedStream.SubscribeAsync(this);

            await userRegistrationStream.OnNextAsync(userRegisteredEvent);

            await _semaphore.WaitAsync(semaphoreTimeout);

            Assert.Equal(testEmail, _userVerificationEvent.Email);
            Assert.Equal(UserVerificationStatusEnum.Verified, _userVerificationEvent.Status);
            _userVerificationEvent = null;

            await userRegistrationStream.OnNextAsync(userRegisteredEvent);

            await _semaphore.WaitAsync(semaphoreTimeout);

            Assert.NotNull(_userVerificationEvent);
            Assert.Equal(testEmail, _userVerificationEvent.Email);
            Assert.Equal(UserVerificationStatusEnum.Duplicate, _userVerificationEvent.Status);
        }
Пример #5
0
        public Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null)
        {
            RaiseEvent(item);

            _logger.LogInformation("{name} <{email}> is now active", TentativeState.Name, TentativeState.Email);

            return(Task.CompletedTask);
        }
Пример #6
0
        public async Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null)
        {
            _registrationStatusState.State.Status = item.Status switch
            {
                UserVerificationStatusEnum.Verified => UserRegistrationStatusEnum.Verified,
                UserVerificationStatusEnum.Blocked => UserRegistrationStatusEnum.Blocked,
                _ => _registrationStatusState.State.Status
            };

            _registrationStatusState.State.UpdatedOn = DateTime.UtcNow;

            await _registrationStatusState.WriteStateAsync();
        }
 public UserVerificationTests(ClusterFixture fixture)
 {
     _cluster = fixture;
     _userVerificationEvent = null;
     _semaphore             = new SemaphoreSlim(0, 1);
 }