public void CreateComplexValueCalculatorTest()
        {
            // Arrange.
            var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose);

            var fieldMappingDefinition = new FieldMappingDefinition
                                             {
                                                 FieldName = ReflectionHelper.GetFieldName<Employee>(x => x.FirstName),
                                                 ValueExpression = c => "First Name"
                                             };
            var propertyMappingDefinition = new FieldMappingDefinition
                                                {
                                                    FieldName = ReflectionHelper.GetPropertyName<Employee>(x => x.LastName),
                                                    ValueExpression = c => "Last Name"
                                                };
            var mappingDefinition = new FieldMappingDefinition { FieldName = "TestField", Subfields = { fieldMappingDefinition, propertyMappingDefinition } };

            var factory = new ValueCalculatorFactory(typeConverter);

            // Act.
            var valueCalculator = factory.CreateValueCalculator(typeof(Employee), mappingDefinition);

            // Assert.
            Assert.IsTrue(valueCalculator is ComplexValueCalculator);
        }
        public void CreateSimpleValueCalculatorTest()
        {
            // Arrange.
            var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose);

            var mappingDefinition = new FieldMappingDefinition { FieldName = "TestField", ValueExpression = c => null };
            var factory = new ValueCalculatorFactory(typeConverter);

            // Act.
            var valueCalculator = factory.CreateValueCalculator(typeof(string), mappingDefinition);

            // Assert.
            Assert.IsTrue(valueCalculator is SimpleValueCalculator);
        }
        public void CreateArrayValueCalculatorTest()
        {
            // Arrange.
            var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose);

            var elementMappingDefinition = new FieldMappingDefinition { FieldName = Constants.ArrayItemGenericFieldName };
            var mappingDefinition = new FieldMappingDefinition { FieldName = "TestField", Subfields = { elementMappingDefinition } };

            var factory = new ValueCalculatorFactory(typeConverter);

            // Act.
            var valueCalculator = factory.CreateValueCalculator(typeof(string[]), mappingDefinition);

            // Assert.
            Assert.IsTrue(valueCalculator is ArrayValueCalculator);
        }