public void It_can_process_pending_messages()
        {
            var serializer = new NotNullable<IStringSerializer>(new JsonSerializer());
            var forwarderFactory = new MessageForwarderFactoryFake();
            var serviceEvents = new ServiceEvents();
            var sut = new MessageForwardingService(serializer, serviceEvents, forwarderFactory);

            var messages = GenerateMessages(8, "oneTopic");
            sut.ProcessPendingMessages(messages);

            Assert.NotNull(forwarderFactory.Forwarders["oneTopic"]);
            forwarderFactory.Forwarders["oneTopic"].Received(messages.Value.Count()).AddMessage(Arg.Any<string>());
        }
        public void It_routes_each_message_by_topic()
        {
            var serializer = new NotNullable<IStringSerializer>(new JsonSerializer());
            var forwarderFactory = new MessageForwarderFactoryFake();
            var serviceEvents = new ServiceEvents();
            var sut = new MessageForwardingService(serializer, serviceEvents, forwarderFactory);

            var messages = GenerateMessages(8);
            sut.ProcessPendingMessages(messages);
            var groupedTopics = messages.Value
                                            .GroupBy(m => serializer.Value.Deserialize<BaseEvent>(m).Topic)
                                            .Select(g => new {
                                                Name = g.Key,
                                                Count = g.Count()
                                            });
            Assert.NotEmpty(groupedTopics);
            groupedTopics.ToList().ForEach(topicCount =>
            {
                Assert.NotNull(forwarderFactory.Forwarders[topicCount.Name]);
                forwarderFactory.Forwarders[topicCount.Name].Received(topicCount.Count).AddMessage(Arg.Any<string>());
            });
        }
        public void StopSendingMessages_stops_every_awakened_forwarder()
        {
            var serializer = new NotNullable<IStringSerializer>(new JsonSerializer());
            var forwarderFactory = new MessageForwarderFactoryFake();

            var serviceEvents = new ServiceEvents();
            var sut = new MessageForwardingService(serializer, serviceEvents, forwarderFactory);

            var messages = GenerateMessages(8);
            sut.ProcessPendingMessages(messages);
            sut.StopSendingMessages();

            Assert.True(forwarderFactory.Forwarders.Any());
            forwarderFactory.Forwarders.ToList().ForEach(item => item.Value.Received().StopForwarding());
        }