public void Should_AddSubscription_When_Subscribe()
        {
            // Arrange
            var subscriberId_A = "abc-123-def-456";
            var subscriberId_B = "def-456-ghi-789";
            var subscriptions  = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId_A);
            subscriptions.Subscribe(subscriberId_A, "SubscriptionA");
            subscriptions.Subscribe(subscriberId_A, "SubscriptionB");
            subscriptions.Subscribe(subscriberId_A, "SubscriptionC");

            subscriptions.AddSubscriber(subscriberId_B);
            subscriptions.Subscribe(subscriberId_B, "SubscriptionB");
            subscriptions.Subscribe(subscriberId_B, "SubscriptionC");

            // Assert
            Assert.Equal(2, subscriptions.SubscriberCount);
            Assert.Equal(3, subscriptions.SubscriptionCount);
            Assert.Contains("SubscriptionA", subscriptions.GetSubscriptions(subscriberId_A));
            Assert.Contains("SubscriptionB", subscriptions.GetSubscriptions(subscriberId_A));
            Assert.Contains("SubscriptionC", subscriptions.GetSubscriptions(subscriberId_A));
            Assert.Contains("SubscriptionB", subscriptions.GetSubscriptions(subscriberId_B));
            Assert.Contains("SubscriptionC", subscriptions.GetSubscriptions(subscriberId_B));
        }
        public void Should_ThrowException_When_AddSubscriber_On_DuplicateEntry()
        {
            // Arrange
            var subscriberId  = "abc-123-def-456";
            var subscriptions = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId);

            // Assert
            Assert.Equal(1, subscriptions.SubscriberCount);
            Assert.Throws <ArgumentException>(() => subscriptions.AddSubscriber(subscriberId));
        }
        public void Should_ThrowException_When_RemoveSubscriber_On_MissingEntry()
        {
            // Arrange
            var subscriberId_A = "abc-123-def-456";
            var subscriberId_B = "def-456-ghi-789";
            var subscriptions  = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId_A);

            // Assert
            Assert.Equal(1, subscriptions.SubscriberCount);
            Assert.Throws <ArgumentException>(() => subscriptions.RemoveSubscriber(subscriberId_B));
        }
        public void Should_ThrowException_When_Unsubscribe_On_InvalidSubscriber()
        {
            // Arrange
            var subscriberId_A = "abc-123-def-456";
            var subscriberId_B = "def-456-ghi-789";
            var subscriptions  = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId_A);
            subscriptions.Subscribe(subscriberId_A, "Subscription");

            // Assert
            Assert.Equal(1, subscriptions.SubscriberCount);
            Assert.Throws <ArgumentException>(() => subscriptions.Unsubscribe(subscriberId_B, "Subscription"));
        }
        public void Should_ThrowException_When_Unsubscribe_On_MissingEntry()
        {
            // Arrange
            var subscriberId  = "abc-123-def-456";
            var subscriptions = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId);
            subscriptions.Subscribe(subscriberId, "SubscriptionA");

            // Assert
            Assert.Equal(1, subscriptions.SubscriberCount);
            Assert.Equal(1, subscriptions.SubscriptionCount);
            Assert.Throws <ArgumentException>(() => subscriptions.Unsubscribe(subscriberId, "SubscriptionB"));
        }
        public void Should_InitializeSet_When_AddSubscriber()
        {
            // Arrange
            var subscriberId_A = "abc-123-def-456";
            var subscriberId_B = "def-456-ghi-789";
            var subscriptions  = new HubSubscriptionMapper <string>();

            // Act
            subscriptions.AddSubscriber(subscriberId_A);
            subscriptions.AddSubscriber(subscriberId_B);

            // Assert
            Assert.Equal(2, subscriptions.SubscriberCount);
            Assert.Empty(subscriptions.GetSubscriptions(subscriberId_A));
            Assert.Empty(subscriptions.GetSubscriptions(subscriberId_B));
        }