Пример #1
0
        public void Handle_DoesNotThrowException_WhenUserIdIsFound_AndPasswordMatches()
        {
            //Arrange
            var command = fixture.Create <AuthenticateWithCredentialsCommand>();

            var readUser = fixture.Create <Budget.Users.Domain.ReadModel.User>();

            readModelUserRepository.GetByUserName(Arg.Any <string>()).Returns(readUser);

            var subscription = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                "*****@*****.**"
                );
            var passwordChange = new PasswordChanged(subscription.AggregateId, command.Password);
            var userEvents     = new Event[] {
                subscription,
                passwordChange
            };
            var writeModelUser = writeModelUserFactory.Load(subscription.AggregateId, userEvents);

            writeModelUserRepository.Get(Arg.Any <Guid>()).Returns(writeModelUser);
            var cancellationToken = new CancellationToken();

            //Act
            var task = handler.Handle(command, cancellationToken);

            task.Wait();

            //Assert
        }
Пример #2
0
        public void Handle_ThrowsInvalidCredentialException_WhenUserIdIsFound_ButPasswordDontMatch()
        {
            //Arrange
            var command = fixture.Create <AuthenticateWithCredentialsCommand>();

            var readUser = fixture.Create <Budget.Users.Domain.ReadModel.User>();

            readModelUserRepository.GetByUserName(Arg.Any <string>()).Returns(readUser);

            var subscription = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                "*****@*****.**"
                );
            var passwordChange = new PasswordChanged(subscription.AggregateId, command.UserName);
            var userEvents     = new Event[] {
                subscription,
                passwordChange
            };
            var writeModelUser = writeModelUserFactory.Load(subscription.AggregateId, userEvents);

            writeModelUserRepository.Get(Arg.Any <Guid>()).Returns(writeModelUser);
            var cancellationToken = new CancellationToken();

            //Act
            Assert.ThrowsAsync <InvalidCredentialException>(() => handler.Handle(command, cancellationToken));

            //Assert
        }
        public void Handle_SendsUserToReadModelRepository()
        {
            //Arrange
            UserSubscribed @event = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>()
                );

            ProcessEventCommand <UserSubscribed> command = new ProcessEventCommand <UserSubscribed>(
                @event
                );

            CancellationToken token = tokenSource.Token;

            //Act
            Task handling = eventProcessor.Handle(command, token);

            handling.Wait();

            //Assert
            unitOfWork.Received(1).BeginTransaction();
            unitOfWork.Received(1).Commit();

            repository.Received(1).Save(Arg.Is <User>(
                                            u => u.UserName == @event.UserName &&
                                            u.FirstName == @event.FirstName &&
                                            u.LastName == @event.LastName &&
                                            u.Email == @event.Email
                                            ));
        }
        public void Handle_RollbacksTransaction_WhenErrorOccur()
        {
            //Arrange
            UserSubscribed @event = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>()
                );

            ProcessEventCommand <UserSubscribed> command = new ProcessEventCommand <UserSubscribed>(
                @event
                );

            CancellationToken token = tokenSource.Token;

            repository.Save(Arg.Any <User>()).Returns(u => Task.Run(() => throw new Exception()));

            //Act
            Task handling = eventProcessor.Handle(command, token);

            handling.Wait();

            //Assert
            unitOfWork.Received(1).BeginTransaction();
            unitOfWork.Received(1).Rollback();
        }
Пример #5
0
        public void EventProcessingLoop_PullsEventFromConsumer_And_SendsItToMediator()
        {
            //Arrange
            UserSubscribed subscription     = fixture.Create <UserSubscribed>();
            string         jsonSubscription = eventSerializer.Serialize(subscription);

            consumer.Consume(Arg.Any <CancellationToken>()).Returns(
                new ConsumeResult <Ignore, string>()
            {
                Message = new Message <Ignore, string>()
                {
                    Value = jsonSubscription
                }
            });

            consumer.When(c => c.Consume(Arg.Any <CancellationToken>())).Do(
                c => {
                tokenSource.Cancel();
            }
                );

            //Act
            loop.Run().Wait();

            //Assert
            mediator.Received(1).Send(
                Arg.Is <object>(
                    o => o is ProcessEventCommand <UserSubscribed>
                    )
                );
        }
        public void Load_AssignsId_AppliesAllChanges()
        {
            //Arrange
            Guid id = Guid.NewGuid();

            UserSubscribed subscriptionEvent = new UserSubscribed(
                id,
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                "*****@*****.**"
                );

            PasswordChanged passwordChangeEvent = new PasswordChanged(id, fixture.Create <string>());

            IEnumerable <Event> changes = new List <Event>()
            {
                subscriptionEvent, passwordChangeEvent
            };

            //Act
            User user = factory.Load(id, changes);

            //Assert
            user.Should().NotBeNull();
            user.Id.Should().Be(id);
            user.Changes.Should().BeEquivalentTo(changes);
            user.UserName.Should().Be(subscriptionEvent.UserName);
            user.FirstName.Should().Be(subscriptionEvent.FirstName);
            user.LastName.Should().Be(subscriptionEvent.LastName);
            user.Email.Address.Should().Be(subscriptionEvent.Email);
            user.EncryptedPassword.Should().Be(passwordChangeEvent.EncryptedPassword);
        }
        public void Publish_SingleEvent_AddsEventToStream()
        {
            //Arrange
            UserSubscribed subscription = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>()
                );

            //Act
            Task publishTask = eventPublisher.Publish(subscription);

            publishTask.Wait();

            //Assert
            Event firstEvent = null;

            eventStream.TryPeek(out firstEvent).Should().BeTrue();
        }
        public void Publish_EventCollection_AddsAllEventsToStream()
        {
            //Arrange
            UserSubscribed subscription1 = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>()
                );

            UserSubscribed subscription2 = new UserSubscribed(
                Guid.NewGuid(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>(),
                fixture.Create <string>()
                );

            List <Event> events = new List <Event>()
            {
                subscription1, subscription2
            };

            //Act
            Task publishTask = eventPublisher.Publish(events);

            publishTask.Wait();

            //Assert
            Event @event = null;

            eventStream.TryPeek(out @event).Should().BeTrue();
            @event = eventStream.Dequeue();

            eventStream.TryPeek(out @event).Should().BeTrue();
            @event = eventStream.Dequeue();
        }
Пример #9
0
 protected virtual void OnUserSubscribed(TwitchSubscription subscription)
 {
     UserSubscribed?.Invoke(this, new UserSubscribedEventArgs(subscription));
 }
Пример #10
0
 /// <summary>
 ///     Raises the <see cref="UserSubscribed"/> event.
 /// </summary>
 /// <param name="e">The <see cref="EventArgs"/> instance holding the event data.</param>
 internal void OnUserSubscribed(TwitchSubscriptionEventArgs e)
 {
     UserSubscribed?.Invoke(this, e);
 }