public void Unsubscribe_with_same_type_should_clear_cache()
    {
        var matchingType = new MessageType("matchingType", new Version(0, 0, 0, 0));

        persister.Subscribe(new Subscriber("e@machine1", "endpoint"), matchingType, null).Await();
        persister.GetSubscribers(matchingType).Await();
        persister.Unsubscribe(new Subscriber("e@machine1", "endpoint"), matchingType, null).Await();
        VerifyCache(persister.Cache);
    }
    public async Task At_unsubscribe_time_should_ignore_message_version()
    {
        var subscriberAddress = "subscriber@localhost";
        var endpointName      = "endpoint_name";
        var messageType_v1    = new MessageType("SomeMessageType", "1.0.0.0");
        var messageType_v2    = new MessageType("SomeMessageType", "2.0.0.0");
        var subscriber_v1     = new Subscriber(subscriberAddress, endpointName);
        var subscriber_v2     = new Subscriber(subscriberAddress, endpointName);

        var storage = new SubscriptionPersister(store)
        {
            DisableAggressiveCaching = true
        };

        await storage.Subscribe(subscriber_v1, messageType_v1, new ContextBag());

        var subscribers = (await storage.GetSubscriberAddressesForMessage(new[]
        {
            messageType_v1
        }, new ContextBag())).ToArray();

        Assert.AreEqual(1, subscribers.Length);

        await storage.Unsubscribe(subscriber_v2, messageType_v2, new ContextBag());

        var subscribers_looked_up_by_v1 = (await storage.GetSubscriberAddressesForMessage(new[]
        {
            messageType_v1
        }, new ContextBag())).ToArray();

        Assert.AreEqual(0, subscribers_looked_up_by_v1.Length);
    }
    public async Task All_subscription_entries_for_specified_message_types_should_be_removed()
    {
        var storage = new SubscriptionPersister(store);
        var context = new ContextBag();

        await storage.Subscribe(TestClients.ClientA, MessageTypes.MessageA, context);

        await storage.Subscribe(TestClients.ClientA, MessageTypes.MessageB, context);

        await storage.Unsubscribe(TestClients.ClientA, MessageTypes.MessageA, context);

        await storage.Unsubscribe(TestClients.ClientA, MessageTypes.MessageB, context);

        var clients = await storage.GetSubscriberAddressesForMessage(new [] { MessageTypes.MessageA, MessageTypes.MessageB }, context);

        Assert.IsEmpty(clients);
    }
    public void All_subscription_entries_for_specified_message_types_should_be_removed()
    {
        var storage = new SubscriptionPersister
        {
            DocumentStore = store
        };

        storage.Subscribe(TestClients.ClientA, MessageTypes.All);

        storage.Unsubscribe(TestClients.ClientA, MessageTypes.All);

        var clients = storage.GetSubscriberAddressesForMessage(MessageTypes.All);
        Assert.IsFalse(clients.Any(a => a == TestClients.ClientA));
    }
    public void All_subscription_entries_for_specified_message_types_should_be_removed()
    {
        using (var store = DocumentStoreBuilder.Build())
        {
            var storage = new SubscriptionPersister
            {
                DocumentStore = store
            };

            storage.Subscribe(TestClients.ClientA, MessageTypes.All);

            storage.Unsubscribe(TestClients.ClientA, MessageTypes.All);

            var clients = storage.GetSubscriberAddressesForMessage(MessageTypes.All);
            Assert.IsFalse(clients.Any(a => a == TestClients.ClientA));
        }
    }
        public void Unsubscribe_RemovesAllSubscriptions()
        {
            AddSubscriptions();

            string messageType = new MessageType(typeof(TestMessage)).ToString();

            _dbContext.Subscriptions.Count(
                s => s.SubscriberEndpoint == "queue@machine" &&
                s.MessageType == messageType)
            .Should().BeGreaterThan(0);

            _persister.Unsubscribe(
                new Address("queue", "machine"),
                new List <MessageType>
            {
                new MessageType(typeof(TestMessage))
            });

            _dbContext.Subscriptions.Count(
                s => s.SubscriberEndpoint == "queue@machine" &&
                s.MessageType == messageType)
            .Should().Be(0);
        }