public async Task InvalidFormat_Throws_JsonException()
        {
            string expectedString = "someString";

            byte[] objJsonBytes        = Encoding.UTF8.GetBytes(expectedString);
            BasicDeliverEventArgs args = new BasicDeliverEventArgs("tag", 1, false, "", "queue", null, objJsonBytes);
            BasicDeliverEventArgsValueProvider testValueProvider = new BasicDeliverEventArgsValueProvider(args, typeof(TestClass));

            await Assert.ThrowsAsync <InvalidOperationException>(() => testValueProvider.GetValueAsync());
        }
        public async Task NormalString_Conversion_Succeeds()
        {
            string expectedString = "someString";

            byte[] stringInBytes       = Encoding.UTF8.GetBytes(expectedString);
            BasicDeliverEventArgs args = new BasicDeliverEventArgs("tag", 1, false, "", "queue", null, stringInBytes);
            BasicDeliverEventArgsValueProvider testValueProvider = new BasicDeliverEventArgsValueProvider(args, typeof(string));

            string actualString = (string)await testValueProvider.GetValueAsync();

            Assert.Equal(expectedString, actualString);
            Assert.Equal(typeof(string), testValueProvider.Type);
        }
        public async Task ByteArray_Conversion_Succeeds()
        {
            string expectedString = "someString";

            byte[] stringInBytes = Encoding.UTF8.GetBytes(expectedString);
            BasicDeliverEventArgs exceptedObject = new BasicDeliverEventArgs("tag", 1, false, "", "queue", new BasicProperties(), stringInBytes);
            BasicDeliverEventArgsValueProvider testValueProvider = new BasicDeliverEventArgsValueProvider(exceptedObject, typeof(byte[]));

            byte[] actualResult = (byte[])await testValueProvider.GetValueAsync();

            Assert.Equal(expectedString, Encoding.UTF8.GetString(actualResult));
            Assert.Equal(typeof(byte[]), testValueProvider.Type);
        }
        public async Task BasicDeliverEventArgs_NoConversion_Succeeds()
        {
            string expectedString = "someString";

            byte[] stringInBytes = Encoding.UTF8.GetBytes(expectedString);
            BasicDeliverEventArgs exceptedObject = new BasicDeliverEventArgs("tag", 1, false, "", "queue", new BasicProperties(), stringInBytes);
            BasicDeliverEventArgsValueProvider testValueProvider = new BasicDeliverEventArgsValueProvider(exceptedObject, typeof(BasicDeliverEventArgs));

            BasicDeliverEventArgs actualObject = (BasicDeliverEventArgs)await testValueProvider.GetValueAsync();

            Assert.Equal(actualObject, exceptedObject);
            Assert.True(Object.ReferenceEquals(actualObject, exceptedObject));
            Assert.Equal(typeof(BasicDeliverEventArgs), testValueProvider.Type);
        }
        public async Task Poco_Conversion_Succeeds()
        {
            TestClass expectedObject          = new TestClass(1, 1);
            string    expectedStringifiedJson = JsonConvert.SerializeObject(expectedObject);

            byte[] stringInBytes       = Encoding.UTF8.GetBytes(expectedStringifiedJson);
            BasicDeliverEventArgs args = new BasicDeliverEventArgs("tag", 1, false, "", "queue", null, stringInBytes);
            BasicDeliverEventArgsValueProvider testValueProvider = new BasicDeliverEventArgsValueProvider(args, typeof(TestClass));

            TestClass actualObject = (TestClass)await testValueProvider.GetValueAsync();

            Assert.Equal(expectedStringifiedJson, JsonConvert.SerializeObject(actualObject));
            Assert.Equal(typeof(TestClass), testValueProvider.Type);
            Assert.Equal(expectedObject.X, actualObject.X);
            Assert.Equal(expectedObject.Y, actualObject.Y);
        }