public void TestEventJournalPublisherForCategory()
        {
            var eventJournal     = Journal.Open("test-ej-cat");
            var messageBus       = MessageBus.Start("test-bus-cat");
            var topic            = messageBus.OpenTopic("cat-test");
            var journalPublisher = JournalPublisher.From(eventJournal.Name, messageBus.Name, topic.Name);

            var subscriber = new JournalPublisherTestSubscriber();

            topic.Subscribe(subscriber);

            var batch1 = new EntryBatch();

            for (var idx = 0; idx < 3; ++idx)
            {
                batch1.AddEntry("test1type", $"test1instance{idx}");
            }
            eventJournal.Write($"test_1", EntryValue.NoStreamVersion, batch1);

            var batch2 = new EntryBatch();

            for (var idx = 0; idx < 3; ++idx)
            {
                batch2.AddEntry("test2type", $"test2instance{idx}");
            }
            eventJournal.Write("test_2", EntryValue.NoStreamVersion, batch2);

            subscriber.WaitForExpectedMessages(6);
            topic.Close();
            journalPublisher.Close();

            Assert.AreEqual(6, subscriber.HandledMessages.Count);
        }
        public void FromRepositoryToProjection()
        {
            var messageBus       = MessageBus.Start("test-bus-product");
            var topic            = messageBus.OpenTopic("cat-product");
            var journalName      = "product-journal";
            var journalPublisher = JournalPublisher.From(journalName, messageBus.Name, topic.Name);
            var subscriber       = new JournalPublisherTestSubscriber();

            topic.Subscribe(subscriber);

            var repository = new ProductRepository(journalName);

            var product1 = new Product(Guid.NewGuid().ToString(), "dice-fuz-1", "Fuzzy dice.", 999);

            product1.ChangeName("dice-fuzzy-1");
            product1.ChangeDescription("Fuzzy dice, and all.");
            product1.ChangePrice(995);

            repository.Save <Product>(product1);

            var product2 = new Product(Guid.NewGuid().ToString(), "dice-fuz-2", "Fuzzy dice.", 999);

            product2.ChangeName("dice-fuzzy-2");
            product2.ChangeDescription("Fuzzy dice, and all 2.");
            product2.ChangePrice(1000);

            repository.Save <Product>(product2);

            subscriber.WaitForExpectedMessages(8);
            topic.Close();
            journalPublisher.Close();

            Assert.AreEqual(8, subscriber.HandledMessages.Count);
        }
        public void TestEventJournalPublisher()
        {
            var eventJournal      = Journal.Open("test-ej");
            var messageBus        = MessageBus.Start("test-bus");
            var topic1            = messageBus.OpenTopic("test1");
            var topic2            = messageBus.OpenTopic("test2");
            var journalPublisher1 = JournalPublisher.From(eventJournal.Name, messageBus.Name, topic1.Name);
            var journalPublisher2 = JournalPublisher.From(eventJournal.Name, messageBus.Name, topic2.Name);

            var subscriber1 = new JournalPublisherTestSubscriber();

            topic1.Subscribe(subscriber1);

            var batch1 = new EntryBatch();

            for (var idx = 0; idx < 3; ++idx)
            {
                batch1.AddEntry("test1type", $"test1instance{idx}");
            }
            eventJournal.Write("test1", EntryValue.NoStreamVersion, batch1);

            subscriber1.WaitForExpectedMessages(3);
            topic1.Close();
            journalPublisher1.Close();

            Assert.AreEqual(3, subscriber1.HandledMessages.Count);

            var subscriber2 = new JournalPublisherTestSubscriber();

            topic2.Subscribe(subscriber2);

            var batch2 = new EntryBatch();

            for (var idx = 0; idx < 3; ++idx)
            {
                batch2.AddEntry("test2type", $"test2instance{idx}");
            }
            eventJournal.Write("test2", EntryValue.NoStreamVersion, batch2);

            subscriber2.WaitForExpectedMessages(3);
            topic2.Close();
            journalPublisher2.Close();

            Assert.AreEqual(3, subscriber2.HandledMessages.Count);
        }
        public void TestEventJournalPublisher()
        {
            Journal          eventJournal     = Journal.Open("test-ej");
            MessageBus       messageBus       = MessageBus.Start("test-bus");
            Topic            topic            = messageBus.OpenTopic("test-topic");
            JournalPublisher journalPublisher =
                JournalPublisher.From(eventJournal.Name, messageBus.Name, topic.Name);

            JournalPublisherTestSubscriber subscriber = new JournalPublisherTestSubscriber();

            topic.Subscribe(subscriber);

            EntryBatch batch1 = new EntryBatch();

            for (int idx = 0; idx < 3; ++idx)
            {
                batch1.AddEntry("test1type", "test1instance" + idx);
            }
            eventJournal.Write("test1", 0, batch1);

            EntryBatch batch2 = new EntryBatch();

            for (int idx = 0; idx < 3; ++idx)
            {
                batch2.AddEntry("test2type", "test2instance" + idx);
            }
            eventJournal.Write("test2", 0, batch2);

            subscriber.WaitForExpectedMessages(6);

            topic.Close();

            journalPublisher.Close();

            Assert.AreEqual(6, subscriber.handledMessages.Count);
        }