private (Mock <IConnectionMultiplexer> MockConnectionMultiplexer, Mock <ISubscriber> MockSubscriber, Mock <ILogger> MockLogger, RedisDataManager RedisDataManager) MockRedisDataManager(Mock <IConnectionMultiplexerFactory> connectionMultiplexerFactory = null, RedisStreamOptions redisStreamOptions = null) { var mockConnectionMultiplexer = new Mock <IConnectionMultiplexer> { DefaultValue = DefaultValue.Mock }; var mockSubscriber = new Mock <ISubscriber> { DefaultValue = DefaultValue.Mock }; var mockLogger = new Mock <ILogger>() { DefaultValue = DefaultValue.Mock }; mockLogger.Setup(x => x.ForContext <RedisDataManager>()).Callback(() => { int j = 5; }).Returns(mockLogger.Object); mockConnectionMultiplexer .Setup(x => x.GetSubscriber(It.IsAny <object>())) .Returns(mockSubscriber.Object); var rdm = new RedisDataManager( redisStreamOptions ?? TestConstants.ValidRedisStreamOptions, connectionMultiplexerFactory?.Object ?? MockConnectionMultiplexerFactory.Returns(mockConnectionMultiplexer.Object), mockLogger.Object, TestConstants.ValidQueueName, TestConstants.ValidServiceId, TestConstants.ValidClusterId); return(mockConnectionMultiplexer, mockSubscriber, mockLogger, rdm); }
public async Task QueueMessageBatchAsyncWithSingleEventPublishesToRedisChannel() { var logger = new Mock <ILogger>() { DefaultValue = DefaultValue.Mock }; var mockConnectionMultiplexer = new Mock <IConnectionMultiplexer> { DefaultValue = DefaultValue.Mock }; var mockSubscriber = new Mock <ISubscriber> { DefaultValue = DefaultValue.Mock }; mockConnectionMultiplexer.Setup(x => x.GetSubscriber(It.IsAny <object>())).Returns(mockSubscriber.Object); var actualMessages = new List <RedisValue>(); mockSubscriber .Setup(x => x.PublishAsync(It.IsAny <RedisChannel>(), It.IsAny <RedisValue>(), It.IsAny <CommandFlags>())) .Callback((RedisChannel channel, RedisValue redisValue, CommandFlags commandFlags) => actualMessages.Add(redisValue)) .ReturnsAsync(0); var mockRedisDataAdapter = new Mock <IRedisDataAdapter> { DefaultValue = DefaultValue.Mock }; mockRedisDataAdapter .Setup(x => x.ToRedisValue <string>(ValidStreamGuid, ValidStreamNamespace, It.IsAny <IEnumerable <string> >(), null)) .Returns((Guid streamGuid, string streamNamespace, IEnumerable <string> events, Dictionary <string, object> requestContext) => JsonConvert.SerializeObject(events)); var mockQueueStreamMapper = new Mock <IStreamQueueMapper> { DefaultValue = DefaultValue.Mock }; mockQueueStreamMapper .Setup(x => x.GetQueueForStream(ValidStreamGuid, ValidStreamNamespace)) .Returns(QueueId.GetQueueId(null, 0, 0)); var rqa = new RedisQueueAdapter( ValidRedisStreamOptions, MockConnectionMultiplexerFactory.Returns(mockConnectionMultiplexer.Object), mockRedisDataAdapter.Object, mockQueueStreamMapper.Object, logger.Object, ValidServiceId, ValidClusterId, ValidProviderName); var expectedMessages = new List <RedisValue>(); for (var i = 0; i < 100; i++) { var message = new[] { i.ToString() }; expectedMessages.Add(JsonConvert.SerializeObject(message)); await rqa.QueueMessageBatchAsync(ValidStreamGuid, ValidStreamNamespace, message, null, null); } AssertEx.Equal(expectedMessages, actualMessages); }