예제 #1
0
        public void HandleCallsFindByOnRepositoryWithExpectedItems(string topics, string types, long fromTimestamp, long toTimeStamp)
        {
            // Arrange
            Mock <IAuditLogItemRepository> repositoryMock     = new Mock <IAuditLogItemRepository>();
            Mock <IEventPublisher>         eventPublisherMock = new Mock <IEventPublisher>();

            List <string> topicNames = topics.Split(',').ToList();
            List <string> typeNames  = types.Split(',').ToList();

            ReplayCommandListener commandListener = new ReplayCommandListener(repositoryMock.Object, eventPublisherMock.Object, new LoggerFactory());

            ReplayEventsCommand command = new ReplayEventsCommand(toTimeStamp)
            {
                Topics        = topicNames,
                Types         = typeNames,
                FromTimeStamp = fromTimestamp
            };

            AuditLogItemCriteria criteria = null;

            repositoryMock.Setup(e => e.FindBy(It.IsAny <AuditLogItemCriteria>()))
            .Callback <AuditLogItemCriteria>(e => criteria = e);

            // Act
            commandListener.Handle(command);

            // Assert
            Assert.AreEqual(fromTimestamp, criteria.FromTimeStamp);
            Assert.AreEqual(toTimeStamp, criteria.ToTimeStamp);
            Assert.AreEqual(topicNames, criteria.Topics);
            Assert.AreEqual(typeNames, criteria.Types);
        }
예제 #2
0
        public void FetchedLogItemsArePublishedProperly(string data, string topic, string type, long timestamp)
        {
            // Arrange
            Mock <IAuditLogItemRepository> repositoryMock     = new Mock <IAuditLogItemRepository>(MockBehavior.Strict);
            Mock <IEventPublisher>         eventPublisherMock = new Mock <IEventPublisher>();

            AuditLogItem auditLogItem = new AuditLogItem
            {
                Id        = Guid.NewGuid().ToString(),
                TimeStamp = timestamp,
                Data      = data,
                Topic     = topic,
                Type      = type
            };

            repositoryMock.Setup(e => e.FindBy(It.IsAny <AuditLogItemCriteria>()))
            .Returns(new List <AuditLogItem> {
                auditLogItem
            });

            ReplayCommandListener commandListener = new ReplayCommandListener(repositoryMock.Object, eventPublisherMock.Object, new LoggerFactory());

            ReplayEventsCommand command = new ReplayEventsCommand(0);

            // Act
            commandListener.Handle(command);

            Thread.Sleep(WaitTime);

            // Assert
            eventPublisherMock.Verify(e => e.PublishAsync(timestamp, $"replay_{topic}", It.IsAny <Guid>(), type, data));
        }
예제 #3
0
        public void AmountOfEventsAreProperlyReturned(int amount)
        {
            // Arrange
            Mock <IAuditLogItemRepository> repositoryMock     = new Mock <IAuditLogItemRepository>();
            Mock <IEventPublisher>         eventPublisherMock = new Mock <IEventPublisher>();

            repositoryMock.Setup(e => e.FindBy(It.IsAny <AuditLogItemCriteria>()))
            .Returns(Enumerable.Range(0, amount).Select(e => new AuditLogItem()));

            ReplayCommandListener commandListener = new ReplayCommandListener(repositoryMock.Object, eventPublisherMock.Object, new LoggerFactory());

            ReplayEventsCommand command = new ReplayEventsCommand(0);

            // Act
            int result = commandListener.Handle(command).AmountOfEvents;

            // Assert
            Assert.AreEqual(amount, result);
        }
예제 #4
0
        public void EndEventIsSentOnHandle()
        {
            // Arrange
            Mock <IAuditLogItemRepository> repositoryMock     = new Mock <IAuditLogItemRepository>(MockBehavior.Strict);
            Mock <IEventPublisher>         eventPublisherMock = new Mock <IEventPublisher>();

            repositoryMock.Setup(e => e.FindBy(It.IsAny <AuditLogItemCriteria>()))
            .Returns(new List <AuditLogItem>());

            ReplayCommandListener commandListener = new ReplayCommandListener(repositoryMock.Object, eventPublisherMock.Object, new LoggerFactory());

            ReplayEventsCommand command = new ReplayEventsCommand(0);

            // Act
            commandListener.Handle(command);

            Thread.Sleep(WaitTime);

            // Assert
            eventPublisherMock.Verify(e => e.Publish(It.IsAny <EndReplayEvent>()));
        }
예제 #5
0
        public void FetchedLogItemsArePublished(int amount)
        {
            // Arrange
            Mock <IAuditLogItemRepository> repositoryMock     = new Mock <IAuditLogItemRepository>(MockBehavior.Strict);
            Mock <IEventPublisher>         eventPublisherMock = new Mock <IEventPublisher>();

            repositoryMock.Setup(e => e.FindBy(It.IsAny <AuditLogItemCriteria>()))
            .Returns(Enumerable.Range(0, amount).Select(e => new AuditLogItem {
                Id = Guid.NewGuid().ToString(), Data = "test", Topic = "TestTopic", Type = "TestType", TimeStamp = 10
            }));

            ReplayCommandListener commandListener = new ReplayCommandListener(repositoryMock.Object, eventPublisherMock.Object, new LoggerFactory());

            ReplayEventsCommand command = new ReplayEventsCommand(0);

            // Act
            commandListener.Handle(command);

            Thread.Sleep(WaitTime);

            // Assert
            eventPublisherMock.Verify(e => e.PublishAsync(It.IsAny <long>(), It.IsAny <string>(), It.IsAny <Guid>(), It.IsAny <string>(), It.IsAny <string>()), Times.Exactly(amount));
        }