public void Test_PubSubMessenger_InvalidOperation()
        {
            // Arrange
            var messenger = new PubSubMessenger(new PubSubJsonAuthConfig()
            {
                JsonAuthFile = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build()["CredentialPath"],
                ProjectId    = "12345"
            });

            // Act/Assert
            Assert.Throws <InvalidOperationException>(() => messenger.Receive <object>(null, null));
            Assert.Throws <ArgumentException>(() => messenger.ReceiveOne <object>("").GetAwaiter().GetResult());
            Assert.Throws <InvalidOperationException>(() => messenger.StartReceive <object>());
            Assert.Throws <InvalidOperationException>(() => messenger.ReceiveOne <object>());
            Assert.Throws <InvalidOperationException>(() => messenger.ReceiveBatchEntity <object>().GetAwaiter().GetResult());

            // Additional runs here purely to increase code coverage. Not particularly useful tests but it does confirm functionality.
            messenger.Complete <object>(null).GetAwaiter().GetResult();
            messenger.CompleteAll(new object[] { null }).GetAwaiter().GetResult();
            messenger.Abandon(new object());
            messenger.Error <object>(null).GetAwaiter().GetResult();
            messenger.Error(new object()).GetAwaiter().GetResult();
            var props = messenger.ReadProperties <object>(null);

            props.Should().BeNull();
        }
        public void Test_PubSubMessenger_Abandon()
        {
            // Arrange
            using var pubSub = new PubSubMessenger(new PubSubConfig { ProjectId = "test" });
            var test = "test";

            // Act
            pubSub.Messages.AddOrUpdate(test, null);
            pubSub.Abandon(test).GetAwaiter().GetResult();
            pubSub.Abandon <object>(null).GetAwaiter().GetResult(); // done for branch coverage.

            // Act/Assert
            pubSub.Messages.ContainsKey(test).Should().BeFalse();
            pubSub.Messages.Count.Should().Be(0);

            pubSub.Dispose(); // done for branch coverage.
        }
        public void Test_PubSubMessenger_AbandonMessageEntity1()
        {
            // Arrange
            using var pubSub = new PubSubMessenger(new PubSubConfig { ProjectId = "test" });
            var test = new PubSubMessageEntity <string> {
                Body = "test"
            };

            // Act
            pubSub.Messages.AddOrUpdate(test.Body, null);
            pubSub.Abandon(test).GetAwaiter().GetResult();

            // Act/Assert
            pubSub.Messages.ContainsKey(test).Should().BeFalse();
            pubSub.Messages.Count.Should().Be(0);
        }