public void Test_that_type_serializer_is_used_when_there_is_no_property_serializer()
        {
            // Arrange
            var type     = typeof(TestType);
            var property = typeof(CompositeTestType).GetProperty(nameof(CompositeTestType.ComplexProperty));

            var providerMock = new Mock <IMetamodelProvider>();

            providerMock
            .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()))
            .Returns <PropertyInfo>(p => null);

            providerMock
            .Setup(x => x.TryGetTypeSerializer(It.Is <Type>(t => t == type)))
            .Returns <Type>(p => new AnotherValueSerializerMock());

            var metamodelImpl = new EntityMetamodelImpl(providerMock.Object);

            // Act
            var serializer = metamodelImpl.TryGetSerializer(property);

            // Assert
            Assert.IsNotNull(serializer);
            Assert.IsInstanceOfType(serializer, typeof(AnotherValueSerializerMock));
        }
        public void Test_that_structure_serializer_is_propogated_to_the_nullable()
        {
            // Arrange
            var type     = typeof(TestStruct);
            var property = typeof(CompositeTestType).GetProperty(nameof(CompositeTestType.NullableStructProperty));

            var providerMock = new Mock <IMetamodelProvider>();

            providerMock
            .Setup(x => x.TryGetTypeSerializer(It.Is <Type>(t => t == type)))
            .Returns <Type>(p => new ValueSerializerMock());

            var metamodelImpl = new EntityMetamodelImpl(providerMock.Object);

            // Act
            var serializer = metamodelImpl.TryGetSerializer(property);

            // Assert
            Assert.IsNotNull(serializer);
            Assert.IsInstanceOfType(serializer, typeof(ValueSerializerMock));
        }
        public void Test_that_no_serializer_is_returned_when_there_are_no_serializers_for_property_and_type()
        {
            // Arrange
            var property = typeof(CompositeTestType).GetProperty(nameof(CompositeTestType.ComplexProperty));

            var providerMock = new Mock <IMetamodelProvider>();

            providerMock
            .Setup(x => x.TryGetPropertySerializer(It.IsAny <PropertyInfo>()))
            .Returns <PropertyInfo>(p => null);

            providerMock
            .Setup(x => x.TryGetTypeSerializer(It.IsAny <Type>()))
            .Returns <Type>(p => null);

            var metamodelImpl = new EntityMetamodelImpl(providerMock.Object);

            // Act
            var serializer = metamodelImpl.TryGetSerializer(property);

            // Assert
            Assert.IsNull(serializer);
        }