public void AddingEventsToEmptyDatabaseCreatesProperEventsInDatabase()
        {
            var aggregateId = Guid.NewGuid();
            var expectedVersion = -1;
            IConcurrencyConflictResolver conflictResolver = null;
            var events = new List<Event>
            {
                new Event(),
                new Event()
            };

            var databaseMock = new DatabaseMock<EventDescriptors>();
            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            eventStore.SaveEvents(
                aggregateId,
                events,
                expectedVersion,
                conflictResolver);

            var actual = databaseMock.Get(aggregateId.ToString());

            Assert.NotNull(actual);
            Assert.Equal(events.Count, actual.Count());
            publisherMock.AssertPublishCount<Event>(events.Count());
        }
        public void Refresh_token_succeeds_for_existing_user()
        {
            // Arrange
            var user = new User()
            {
                Id           = "userId",
                Email        = "email",
                Username     = "******",
                PasswordHash = "password"
            };

            var signInManager = new SignInManagerMock();

            signInManager.SetupForUser(user);

            var tokenService = new TokenServiceMock();

            tokenService.SetupTokenBuild(u => u.Id + "_token");

            var logger = new ConsoleLoggerMock <Services.AuthenticationService>();

            var userManager = new UserManagerMock();

            userManager.SetupExistingUser(user);

            var eventBus           = new EventPublisherMock();
            var confirmationSender = new EmailConfirmationSenderMock();

            var service = new Services.AuthenticationService(
                userManager.Object, signInManager.Object, tokenService.Object, eventBus.Object, logger.Object,
                confirmationSender.Object);

            // Act
            OperationResult <JwtToken> result = service.RefreshToken("userId").Result;

            // Assert
            Assert.True(result.IsValid);
            Assert.AreEqual("userId_token", result.Result.Token);
        }
        public async Task should_send_update_event_for_each_hearing_person_is_a_participant_in()
        {
            var personId = Guid.NewGuid();
            var payload  = new UpdatePersonDetailsRequest()
            {
                Username  = "******",
                FirstName = "New",
                LastName  = "Me"
            };

            var hearings = CreateListOfVideoHearings(personId, payload.FirstName, payload.LastName, payload.Username);

            QueryHandlerMock
            .Setup(x =>
                   x.Handle <GetHearingsByUsernameQuery, List <VideoHearing> >(It.IsAny <GetHearingsByUsernameQuery>()))
            .ReturnsAsync(hearings);

            var result = await Controller.UpdatePersonDetails(personId, payload);

            result.Result.Should().BeOfType <AcceptedResult>();

            EventPublisherMock.Verify(x => x.PublishAsync(It.IsAny <ParticipantUpdatedIntegrationEvent>()), Times.Once);
        }
        public void Register_creates_user_publishes_event_and_sends_email()
        {
            // Arrange
            ISignInManager signInManager = Mock.Of <ISignInManager>();
            ITokenService  tokenService  = Mock.Of <ITokenService>();

            var logger = new ConsoleLoggerMock <Services.AuthenticationService>();

            var userManager        = new UserManagerMock();
            var eventBus           = new EventPublisherMock();
            var confirmationSender = new EmailConfirmationSenderMock();

            var service = new Services.AuthenticationService(
                userManager.Object, signInManager, tokenService, eventBus.Object, logger.Object, confirmationSender.Object);

            // Act
            OperationResult result = service.RegisterUser("username", "email", "password").Result;

            // Assert
            Assert.True(result.IsValid);
            userManager.VerifyUserCreated("username", "email", "password");
            eventBus.VerifyEventPublished <UserRegisteredEvent, UserInfo>(u => u.Username == "username" && u.Email == "email");
            confirmationSender.VerifyEmailSent("username", "email");
        }
Exemple #5
0
 public SubsidiariesLinkageSteps()
 {
     _eventPublisherMock = new EventPublisherMock <IDomainEvent>();
 }
        public void AddingEventsWithProperExpectedVersionToExistingEventDescriptorsPopulatesDatabase()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var existingEvents = new EventDescriptors{ Id = aggregateId };
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 0));
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 1));
            databaseMock.Put(existingEvents);
            var initialCount = existingEvents.Count();

            var expectedVersion = existingEvents.Count() - 1;
            IConcurrencyConflictResolver conflictResolver = null;
            var newEvents = new List<Event>
            {
                new Event(),
                new Event()
            };
            
            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            eventStore.SaveEvents(
                aggregateId,
                newEvents,
                expectedVersion,
                conflictResolver);

            var actual = databaseMock.Get(aggregateId.ToString());

            Assert.NotNull(actual);
            Assert.Equal(newEvents.Count + initialCount, actual.Count());
            publisherMock.AssertPublishCount<Event>(newEvents.Count());
        }
        public void FetchingAggregateRootWhenExistsGetsProperListOfEvents()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var expected = new EventDescriptors { Id = aggregateId };
            expected.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 0));
            expected.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 1));
            databaseMock.Put(expected);
            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            var actual = eventStore.GetEventsForAggregate(aggregateId);

            Assert.NotNull(actual);
            Assert.Equal(expected.Count(), actual.Count());
            Assert.Null(publisherMock.GetLastPublishedObject<Event>());
        }
        public void FetchingAggregateRootWhenDoesntExistInDatabaseExpectException()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            Assert.Throws<AggregateNotFoundException>(() => eventStore.GetEventsForAggregate(aggregateId));
        }
        public async void AddingImproperlyVersionedEventsConcurrentlyWithConflictResolutionPopulatesDatabase()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var existingEvents = new EventDescriptors {Id = aggregateId};
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 0));
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 1));
            databaseMock.Put(existingEvents);
            var initialCount = existingEvents.Count();

            var expectedVersion = 0;
            IConcurrencyConflictResolver conflictResolver = new ConcurrencyConflictResolver();
            conflictResolver.RegisterConflictList(typeof (Event2<EventConstraint1>), new List<Type>());
            conflictResolver.RegisterConflictList(typeof (Event2<EventConstraintAnother1>), new List<Type>());
            var newEventsSource1 = new List<Event>
            {
                new Event2<EventConstraint1>()
            };
            var newEventsSource2 = new List<Event>
            {
                new Event2<EventConstraintAnother1>()
            };

            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            var task1 = Task.Run(() =>
                eventStore.SaveEvents(
                    aggregateId,
                    newEventsSource1,
                    expectedVersion,
                    conflictResolver));

            var task2 = Task.Run(()=>
                    eventStore.SaveEvents(
                    aggregateId,
                    newEventsSource2,
                    expectedVersion,
                    conflictResolver));

            await Task.WhenAll(task1, task2).ConfigureAwait(false);

            var actual = databaseMock.Get(aggregateId.ToString());

            Assert.NotNull(actual);
            Assert.Equal(newEventsSource1.Count + newEventsSource2.Count + initialCount, actual.Count());
            publisherMock.AssertPublishCount<Event>(newEventsSource1.Count + newEventsSource2.Count);
        }
        public void AddingImproperlyVersionedEventsWithNoConflictResolutionExpectException()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var existingEvents = new EventDescriptors { Id = aggregateId };
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event1(), 0));
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event1(), 1));
            databaseMock.Put(existingEvents);

            var expectedVersion = existingEvents.Count() - 2;
            IConcurrencyConflictResolver conflictResolver = new ConcurrencyConflictResolver();
            conflictResolver.RegisterConflictList(typeof(Event1), new List<Type> {typeof(Event1)});
            var newEvents = new List<Event>
            {
                new Event1(),
                new Event1()
            };

            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            Assert.Throws<EventStoreConcurrencyException>(() =>
                eventStore.SaveEvents(
                    aggregateId,
                    newEvents,
                    expectedVersion,
                    conflictResolver));
        }
        public void AddingEventsWithImproperExpectedVersionAndNullConflictResolverExpectException()
        {
            var aggregateId = Guid.NewGuid();
            var databaseMock = new DatabaseMock<EventDescriptors>();
            var existingEvents = new EventDescriptors { Id = aggregateId };
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 0));
            existingEvents.Add(new EventDescriptor(Guid.NewGuid(), new Event(), 1));
            databaseMock.Put(existingEvents);

            var expectedVersion = existingEvents.Count() - 2;
            IConcurrencyConflictResolver conflictResolver = null;
            var newEvents = new List<Event>
            {
                new Event(),
                new Event()
            };

            var publisherMock = new EventPublisherMock();

            var eventStore = new EventStore(publisherMock, databaseMock);

            Assert.Throws<EventStoreConcurrencyException>(() => 
                eventStore.SaveEvents(
                    aggregateId,
                    newEvents,
                    expectedVersion,
                    conflictResolver));
        }