public void Merge_MultipleObject_AllOfThemAreMerged()
        {
            //Arrange
            var users = _fixture.CreateMany <User>();

            var avroObjects = users.Select(AvroConvert.Serialize);


            //Act
            var result = AvroConvert.Merge <User>(avroObjects);


            //Assert
            var deserializedResult = AvroConvert.Deserialize <List <User> >(result);

            Assert.NotNull(deserializedResult);
            Assert.Equal(users.Count(), deserializedResult.Count);

            foreach (var user in users)
            {
                var resultUser = deserializedResult.FirstOrDefault(r => r.name == user.name);
                Assert.NotNull(resultUser);
                Assert.Equal(user, resultUser);
            }
        }
        public void Merge_NotAvroObject_ExceptionIsThrown()
        {
            var avroObjects = _fixture.CreateMany <byte[]>();

            //Act
            var exception = Record.Exception(() => AvroConvert.Merge <User>(avroObjects));


            //Assert
            Assert.NotNull(exception);
            Assert.IsType <InvalidAvroObjectException>(exception);
        }
        public void Merge_FileWithHeaderOnly_DoesNotThrowException()
        {
            //Arrange

            //Act
            var result = AvroConvert.Merge <User>(new List <byte[]> {
                _headerOnlyAvroBytes
            });


            //Assert
            var deserializedResult = AvroConvert.Deserialize <List <User> >(result);

            deserializedResult.Should().BeEmpty();
        }
        public void Merge_TwoFilesWithMultipleBlocks_EveryItemIsMerged()
        {
            //Arrange
            var content = File.ReadAllBytes("userdata1.avro");


            //Act
            var result = AvroConvert.Merge <kylosample>(new List <byte[]> {
                content, content
            });
            var toCheck = AvroConvert.Deserialize <List <kylosample> >(result);


            //Assert
            toCheck.Should().HaveCount(2000);
        }
        public void Merge_OnOfTheObjectsIsOfDifferentSchema_ExceptionIsThrown()
        {
            var users = _fixture.CreateMany <User>();

            var avroObjects = (users.Select(AvroConvert.Serialize)).ToArray();

            avroObjects[1] = AvroConvert.Serialize(_fixture.Create <string>());


            //Act
            var exception = Record.Exception(() => AvroConvert.Merge <User>(avroObjects));


            //Assert
            Assert.NotNull(exception);
            Assert.IsType <InvalidAvroObjectException>(exception);
            Assert.Contains("1", exception.Message);
            Assert.Contains(typeof(User).ToString(), exception.Message);
        }
        public void Merge_SingleObject_ItIsConvertedToEnumerableWithSingleItem()
        {
            //Arrange
            var user = _fixture.Create <User>();

            user.favorite_color  = "red";
            user.favorite_number = 2137;
            user.name            = "Ash";

            var avroObject = AvroConvert.Serialize(user);


            //Act
            var result = AvroConvert.Merge <User>(new List <byte[]> {
                avroObject
            });


            //Assert
            var deserializedResult = AvroConvert.Deserialize <List <User> >(result);
            var deserializedUser   = Assert.Single(deserializedResult);

            Assert.Equal(user, deserializedUser);
        }