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 }
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(); }
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(); }
protected virtual void OnUserSubscribed(TwitchSubscription subscription) { UserSubscribed?.Invoke(this, new UserSubscribedEventArgs(subscription)); }
/// <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); }