예제 #1
0
        internal void GetValueFromRefCursor_Object_NullValue(MetadataOracleNetTypeDefinition typedef, Mock <IOracleRefCursorWrapper> refCursorWrapper, Mock <IOracleDataReaderWrapper> dataReaderWrapper, Mock <MetadataOracleCommon> common)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            refCursorWrapper.Setup(r => r.GetDataReader()).Returns(dataReaderWrapper.Object);
            dataReaderWrapper.SetupSequence(d => d.Read())
            .Returns(true)
            .Returns(false);
            dataReaderWrapper.Setup(d => d.GetOracleValue(0))
            .Returns(null)
            .Verifiable();
            common.Setup(c => c.ConvertOracleParameterToBaseType(typeof(string), null))
            .Returns(null)
            .Verifiable();

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, common.Object);

            var result = metadata.GetValueFromRefCursor(typeof(SimpleTestClass), refCursorWrapper.Object);

            dataReaderWrapper.Verify();
            common.Verify();
            Assert.NotNull(result);
            var actual = Assert.IsType <SimpleTestClass>(result);

            Assert.NotNull(actual);
            Assert.Null(actual.Prop1);
        }
        internal void MetadataOracleNetTypeDefinition_Properties_WithMap(ServForOracleCache cache, MetadataOracleTypeDefinition baseMetadataDefinition, bool fuzzyNameMatch)
        {
            var props            = baseMetadataDefinition.Properties.ToArray();
            var type             = typeof(SimpleClass);
            var presetProperties = new UdtPropertyNetPropertyMap[]
            {
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop1), props[0].Name),
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop2), props[1].Name),
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop3), props[2].Name)
            };

            var typedef = new MetadataOracleNetTypeDefinition(cache, type, baseMetadataDefinition, presetProperties, fuzzyNameMatch);

            Assert.NotNull(typedef);
            Assert.Same(baseMetadataDefinition.UDTInfo, typedef.UDTInfo);
            Assert.NotNull(typedef.Properties);
            Assert.NotEmpty(typedef.Properties);
            Assert.Equal(baseMetadataDefinition.Properties.Count(), typedef.Properties.Count());
            Assert.All(typedef.Properties, c => Assert.Contains(baseMetadataDefinition.Properties, d => d.Name == c.Name && d.Order == c.Order));
            Assert.Collection(typedef.Properties,
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop1)), c.NETProperty),
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop2)), c.NETProperty),
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop3)), c.NETProperty)
                              );
        }
예제 #3
0
        internal void GetValueFromRefCursor_Object_WithMetadata(MetadataOracleNetTypeDefinition typedef, MetadataOracleNetTypeDefinition subTypedef, Mock <IOracleRefCursorWrapper> refCursorWrapper, Mock <IOracleDataReaderWrapper> dataReaderWrapper, Mock <MetadataOracleCommon> common, SimpleTestClass oracleValue)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty      = typeof(ComplexTestClass).GetProperty(nameof(ComplexTestClass.ObjectProp));
            prop.PropertyMetadata = subTypedef;

            refCursorWrapper.Setup(r => r.GetDataReader()).Returns(dataReaderWrapper.Object);
            dataReaderWrapper.SetupSequence(d => d.Read())
            .Returns(true)
            .Returns(false);
            common.Setup(c => c.GetValueFromOracleXML(typeof(SimpleTestClass), null))
            .Returns(oracleValue)
            .Verifiable();


            var metadata = new MetadataOracleObject <ComplexTestClass>(typedef, common.Object);

            var result = metadata.GetValueFromRefCursor(typeof(ComplexTestClass), refCursorWrapper.Object);

            common.Verify();
            Assert.NotNull(result);
            var actual = Assert.IsType <ComplexTestClass>(result);

            Assert.NotNull(actual.ObjectProp);
            Assert.Equal(oracleValue, actual.ObjectProp);
        }
예제 #4
0
        internal void GetDeclareLine_Object_Simple(MetadataOracleNetTypeDefinition typedef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type     = typeof(SimpleTestClass);
            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            Assert.Equal($"{parameterName} {udtInfo.FullObjectName};" + Environment.NewLine, declareLine);
        }
예제 #5
0
        internal void GetRefCursorQuery_NoMetadata_ReturnsDummyQuery(MetadataOracleNetTypeDefinition typedef, int startNumber, string fieldName)
        {
            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetRefCursorQuery(startNumber, fieldName);

            Assert.NotNull(actual);
            Assert.Equal($"open :{startNumber} for select 1 dummy{Environment.NewLine} from dual;", actual);
        }
예제 #6
0
        internal void GetOracleParameters_Array_NoMatch_ReturnsEmpty(MetadataOracleNetTypeDefinition typedef, SimpleTestClass[] model, int startNumber)
        {
            var metadata = new MetadataOracleObject <SimpleTestClass[]>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetOracleParameters(model, startNumber);

            Assert.NotNull(actual);
            Assert.Empty(actual);
        }
예제 #7
0
        internal void MetadataOracleObject_Constructor_Collection(ServForOracleCache cache, MetadataOracleTypeDefinition metadataOracleType, UdtPropertyNetPropertyMap[] customProperties, bool fuzzyNameMatch)
        {
            var typedef  = new MetadataOracleNetTypeDefinition(cache, typeof(TestClass[]).GetCollectionUnderType(), metadataOracleType, customProperties, fuzzyNameMatch);
            var metadata = new MetadataOracleObject <TestClass[]>(typedef, new MetadataOracleCommon());

            Assert.NotNull(metadata);
            Assert.NotNull(metadata.OracleTypeNetMetadata);
            Assert.NotNull(metadata.OracleTypeNetMetadata.Properties);
            CompareOracleTypeNetMetadata(metadataOracleType.Properties.ToArray(), metadata.OracleTypeNetMetadata.Properties.ToArray());
            Assert.Equal(metadataOracleType.UDTInfo, metadata.OracleTypeNetMetadata.UDTInfo);
        }
예제 #8
0
        internal void GetDeclareLine_Collection(MetadataOracleNetTypeDefinition typedef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type = typeof(ComplexTestClass[]);

            var metadata = new MetadataOracleObject <ComplexTestClass[]>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            var expected = $"{parameterName} {udtInfo.FullCollectionName} := {udtInfo.FullCollectionName}();" + Environment.NewLine;

            Assert.Equal(expected, declareLine);
        }
        internal void MetadataOracleNetTypeDefinition_NoTypeProperties(ServForOracleCache cache, MetadataOracleTypeDefinition baseMetadataDefinition, UdtPropertyNetPropertyMap[] presetProperties, bool fuzzyNameMatch)
        {
            var typedef = new MetadataOracleNetTypeDefinition(cache, typeof(TestClass), baseMetadataDefinition, presetProperties, fuzzyNameMatch);

            Assert.NotNull(typedef);
            Assert.Same(baseMetadataDefinition.UDTInfo, typedef.UDTInfo);
            Assert.NotNull(typedef.Properties);
            Assert.NotEmpty(typedef.Properties);
            Assert.Equal(baseMetadataDefinition.Properties.Count(), typedef.Properties.Count());
            Assert.All(typedef.Properties, c => Assert.Contains(baseMetadataDefinition.Properties, d => d.Name == c.Name));
            Assert.All(typedef.Properties, c => Assert.Null(c.NETProperty));
        }
예제 #10
0
        internal void BuildQueryConstructorString_Object_NoMatch_AllPropertiesNull(ServForOracleCache cache, MetadataOracleTypeDefinition metadataOracleType, UdtPropertyNetPropertyMap[] customProperties, bool fuzzyNameMatch, TestClass model, string name, int startNumber)
        {
            var typedef  = new MetadataOracleNetTypeDefinition(cache, typeof(TestClass), metadataOracleType, customProperties, fuzzyNameMatch);
            var metadata = new MetadataOracleObject <TestClass>(typedef, new MetadataOracleCommon());

            var(constructor, lastNumber) = metadata.BuildQueryConstructorString(model, name, startNumber);

            Assert.NotNull(constructor);
            var expectedConstructor = $"{name} := {metadataOracleType.UDTInfo.FullObjectName}({string.Join(',', metadataOracleType.Properties.OrderBy(c => c.Order).Select(c => $"{c.Name}=>null"))});" + Environment.NewLine;

            Assert.Equal(expectedConstructor, constructor);
            Assert.Equal(startNumber, lastNumber);
        }
예제 #11
0
        internal void GetRefCursorQuery_NetProperty_ReturnsRootQuery(MetadataOracleNetTypeDefinition typedef, int startNumber, string fieldName)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetRefCursorQuery(startNumber, fieldName);

            Assert.NotNull(actual);
            Assert.Equal($"open :{startNumber} for select value({fieldName}).{prop.Name} {prop.NETProperty.Name}{Environment.NewLine} from dual;", actual);
        }
예제 #12
0
        internal void GetOracleParameterForRefCursor_CallsCommon(MetadataOracleNetTypeDefinition typedef, Mock <MetadataOracleCommon> common, int startNumber, OracleParameter parameter)
        {
            common.Setup(c => c.GetOracleParameterForRefCursor(startNumber))
            .Returns(parameter)
            .Verifiable();

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, common.Object);

            var actual = metadata.GetOracleParameterForRefCursor(startNumber);

            Assert.NotNull(actual);
            common.Verify();
            Assert.Same(parameter, actual);
        }
        internal async Task GetMetadataOracleObjectAsync_FindsInCache(OracleUdtInfo info, MetadataOracleTypeDefinition typeDefinition, UdtPropertyNetPropertyMap[] properties)
        {
            var typedef  = new MetadataOracleNetTypeDefinition(cacheMoq.Object, typeof(TestRoy), typeDefinition, properties, fuzzyNameMatch: true);
            var metadata = new MetadataOracleObject <TestRoy>(typedef, new MetadataOracleCommon());

            cacheMoq.Setup(c => c.GetMetadata(typeof(TestRoy).FullName))
            .Returns(metadata)
            .Verifiable();

            var builder = new MetadataBuilder(connectionMoq.Object, cacheMoq.Object, loggerMoq.Object);

            var result = await builder.GetOrRegisterMetadataOracleObjectAsync <TestRoy>(info);

            cacheMoq.Verify();
            Assert.Equal(metadata, result);
        }
예제 #14
0
        internal void GetValueFromRefCursor_Object(MetadataOracleNetTypeDefinition typedef, Mock <IOracleRefCursorWrapper> refCursorWrapper,
                                                   Mock <IOracleDataReaderWrapper> dataReaderWrapper)
        {
            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            refCursorWrapper.Setup(r => r.GetDataReader()).Returns(dataReaderWrapper.Object);
            dataReaderWrapper.SetupSequence(d => d.Read())
            .Returns(true)
            .Returns(false);

            var result = metadata.GetValueFromRefCursor(typeof(SimpleTestClass), refCursorWrapper.Object);

            Assert.NotNull(result);
            var actual = Assert.IsType <SimpleTestClass>(result);

            Assert.Null(actual.Prop1);
        }
예제 #15
0
        internal void GetDeclareLine_Object_WithMetadata(MetadataOracleNetTypeDefinition typedef, MetadataOracleNetTypeDefinition subTypeDef, MetadataOracleCommon common, string parameterName, OracleUdtInfo udtInfo)
        {
            var type = typeof(ComplexTestClass);
            var prop = typedef.Properties.First();

            prop.PropertyMetadata = subTypeDef;
            prop.NETProperty      = type.GetProperty(nameof(ComplexTestClass.ObjectProp));


            var metadata = new MetadataOracleObject <ComplexTestClass>(typedef, common);

            var declareLine = metadata.GetDeclareLine(type, parameterName, udtInfo);

            var expected = $"{parameterName}_0 {subTypeDef.UDTInfo.FullObjectName};" + Environment.NewLine
                           + $"{parameterName} {udtInfo.FullObjectName};" + Environment.NewLine;

            Assert.Equal(expected, declareLine);
        }
        internal void MetadataOracleNetTypeDefinition_Properties_WithMap_WithAttribute(ServForOracleCache cache, MetadataOracleTypeDefinition baseMetadataDefinition, bool fuzzyNameMatch)
        {
            var props = baseMetadataDefinition.Properties.ToArray();
            var type  = typeof(ClassWithAttribute);

            props[0].Name = "Test";
            var presetProperties = new UdtPropertyNetPropertyMap[]
            {
                new UdtPropertyNetPropertyMap(nameof(ClassWithAttribute.Prop1), props[0].Name)
            };

            var typedef = new MetadataOracleNetTypeDefinition(cache, type, baseMetadataDefinition, presetProperties, fuzzyNameMatch);

            Assert.NotNull(typedef);
            Assert.Same(baseMetadataDefinition.UDTInfo, typedef.UDTInfo);
            Assert.NotNull(typedef.Properties);
            Assert.NotEmpty(typedef.Properties);
            Assert.Equal(baseMetadataDefinition.Properties.Count(), typedef.Properties.Count());

            Assert.Collection(typedef.Properties,
                              c =>
            {
                Assert.Equal(type.GetProperty(nameof(ClassWithAttribute.Prop1)), c.NETProperty);
                Assert.Equal("Test", c.Name, ignoreCase: true);
                Assert.Equal(props[0].Order, c.Order);
                Assert.Null(c.PropertyMetadata);
            },
                              c =>
            {
                Assert.Equal(props[1].Name, c.Name, ignoreCase: true);
                Assert.Equal(props[1].Order, c.Order);
                Assert.Null(c.NETProperty);
                Assert.Null(c.PropertyMetadata);
            },
                              c =>
            {
                Assert.Equal(props[2].Name, c.Name, ignoreCase: true);
                Assert.Equal(props[2].Order, c.Order);
                Assert.Null(c.NETProperty);
                Assert.Null(c.PropertyMetadata);
            }
                              );
        }
예제 #17
0
        internal void BuildQueryConstructorString_Array(MetadataOracleNetTypeDefinition typedef, SimpleTestClass[] model, string name, int startNumber)
        {
            var metadata = new MetadataOracleObject <SimpleTestClass[]>(typedef, new MetadataOracleCommon());

            var(constructor, lastNumber) = metadata.BuildQueryConstructorString(model, name, startNumber);

            Assert.NotNull(constructor);
            var expectedConstructor = new StringBuilder();

            for (var i = 0; i < model.Length; i++)
            {
                expectedConstructor.AppendLine($"{name}.extend;");
                expectedConstructor.Append($"{name}({name}.last) := {typedef.UDTInfo.FullObjectName}(");
                expectedConstructor.Append(string.Join(',', typedef.Properties.OrderBy(c => c.Order).Select(c => $"{c.Name}=>null")));
                expectedConstructor.AppendLine(");");
            }

            Assert.Equal(expectedConstructor.ToString(), constructor);
            Assert.Equal(startNumber, lastNumber);
        }
예제 #18
0
        internal void GetRefCursorQuery_NetProperty_MultipleProperties(MetadataOracleNetTypeDefinition typedef, int startNumber, string fieldName)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty = typeof(MultiplePropertiesTestClass).GetProperty(nameof(MultiplePropertiesTestClass.Prop1));

            var anotherProp = typedef.Properties.Where(c => c != prop).OrderBy(c => c.Order).First();

            anotherProp.NETProperty = typeof(MultiplePropertiesTestClass).GetProperty(nameof(MultiplePropertiesTestClass.Prop2));

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetRefCursorQuery(startNumber, fieldName);

            Assert.NotNull(actual);
            var expected = $"open :{startNumber} for select value({fieldName}).{prop.Name} {prop.NETProperty.Name},"
                           + Environment.NewLine
                           + $"value({fieldName}).{anotherProp.Name} {anotherProp.NETProperty.Name}"
                           + $"{Environment.NewLine} from dual;";

            Assert.Equal(expected, actual);
        }
예제 #19
0
        internal void GetValueFromRefCursor_Collection_NullValue(MetadataOracleNetTypeDefinition typedef, Mock <IOracleRefCursorWrapper> refCursorWrapper, Mock <IOracleDataReaderWrapper> dataReaderWrapper, Mock <MetadataOracleCommon> common, SimpleTestClass[] simples, object oracleValue)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            refCursorWrapper.Setup(r => r.GetDataReader()).Returns(dataReaderWrapper.Object);
            dataReaderWrapper.SetupSequence(d => d.Read())
            .Returns(true).Returns(true).Returns(true)
            .Returns(false);
            int i = 0;

            dataReaderWrapper.Setup(d => d.GetOracleValue(i))
            .Callback(() => i++)
            .Returns(oracleValue);

            common.SetupSequence(c => c.ConvertOracleParameterToBaseType(typeof(string), oracleValue))
            .Returns(simples[0].Prop1)
            .Returns(simples[1].Prop1)
            .Returns(simples[2].Prop1);
            //.Verifiable();

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, common.Object);

            var result = metadata.GetValueFromRefCursor(typeof(SimpleTestClass[]), refCursorWrapper.Object);

            dataReaderWrapper.Verify();
            common.Verify();
            Assert.NotNull(result);
            var actual = Assert.IsType <SimpleTestClass[]>(result);

            Assert.NotNull(actual);
            Assert.Collection(actual,
                              c => Assert.Equal(simples[0].Prop1, c.Prop1),
                              c => Assert.Equal(simples[1].Prop1, c.Prop1),
                              c => Assert.Equal(simples[2].Prop1, c.Prop1)
                              );
        }
예제 #20
0
        internal void GetRefCursorQuery_WithMetadata_Array_ReturnsXMLElement(MetadataOracleNetTypeDefinition typedef, MetadataOracleNetTypeDefinition metaTypeProp, int startNumber, string fieldName)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty      = typeof(ComplexTestClass).GetProperty(nameof(ComplexTestClass.ObjectProp));
            prop.PropertyMetadata = metaTypeProp;

            var subProp = metaTypeProp.Properties.OrderBy(c => c.Order).First();

            subProp.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            var metadata = new MetadataOracleObject <ComplexTestClass[]>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetRefCursorQuery(startNumber, fieldName);

            Assert.NotNull(actual);

            var expected = $"open :{startNumber} for select (select xmlelement( \"{prop.NETProperty.Name}\", "
                           + $"xmlconcat( XmlElement(\"{subProp.NETProperty.Name}\", value(c).{prop.Name}.{subProp.Name})) "
                           + $") from dual) {prop.NETProperty.Name}{Environment.NewLine} from table({fieldName}) c;";

            Assert.Equal(expected, actual);
        }
        internal void MetadataOracleNetTypeDefinition_Properties_WithMap_WithMetadata(ServForOracleCache cache, MetadataOracleTypeDefinition baseMetadataDefinition, bool fuzzyNameMatch, MetadataOracleTypeSubTypeDefinition subTypeDef,
                                                                                      MetadataOracleTypeSubTypeDefinition colSubTypeDef)
        {
            var props            = baseMetadataDefinition.Properties.ToArray();
            var type             = typeof(SimpleClass);
            var presetProperties = new UdtPropertyNetPropertyMap[]
            {
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop1), subTypeDef.Name),
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop2), props[1].Name),
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop3), props[2].Name),
                new UdtPropertyNetPropertyMap(nameof(SimpleClass.Prop4), colSubTypeDef.Name)
            };

            baseMetadataDefinition.Properties = new MetadataOracleTypePropertyDefinition[]
            {
                subTypeDef,
                props[1],
                props[2],
                colSubTypeDef
            };

            var typedef = new MetadataOracleNetTypeDefinition(cache, type, baseMetadataDefinition, presetProperties, fuzzyNameMatch);

            Assert.NotNull(typedef);
            Assert.Same(baseMetadataDefinition.UDTInfo, typedef.UDTInfo);
            Assert.NotNull(typedef.Properties);
            Assert.NotEmpty(typedef.Properties);
            Assert.Equal(4, typedef.Properties.Count());
            Assert.Collection(typedef.Properties,
                              c =>
            {
                Assert.Equal(subTypeDef.Name, c.Name, ignoreCase: true);
                Assert.Equal(subTypeDef.Order, c.Order);
                Assert.NotNull(c.PropertyMetadata);
                Assert.NotNull(c.PropertyMetadata.Properties);
                Assert.NotEmpty(c.PropertyMetadata.Properties);

                Assert.All(c.PropertyMetadata.Properties, d => Assert.Contains(subTypeDef.MetadataOracleType.Properties, e => e.Name == d.Name && e.Order == d.Order));
            },
                              c =>
            {
                Assert.Equal(props[1].Name, c.Name, ignoreCase: true);
                Assert.Equal(props[1].Order, c.Order);
            },
                              c =>
            {
                Assert.Equal(props[2].Name, c.Name, ignoreCase: true);
                Assert.Equal(props[2].Order, c.Order);
            },
                              c =>
            {
                Assert.Equal(colSubTypeDef.Name, c.Name, ignoreCase: true);
                Assert.Equal(colSubTypeDef.Order, c.Order);

                Assert.NotNull(c.PropertyMetadata);
                Assert.NotNull(c.PropertyMetadata.Properties);
                Assert.NotEmpty(c.PropertyMetadata.Properties);

                Assert.All(c.PropertyMetadata.Properties, d => Assert.Contains(colSubTypeDef.MetadataOracleType.Properties, e => e.Name == d.Name && e.Order == d.Order));
            }
                              );
            Assert.Collection(typedef.Properties,
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop1)), c.NETProperty),
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop2)), c.NETProperty),
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop3)), c.NETProperty),
                              c => Assert.Equal(type.GetProperty(nameof(SimpleClass.Prop4)), c.NETProperty)
                              );
        }
예제 #22
0
        internal void BuildQueryConstructorString_Object_SimpleNetProperty_WithMetadata(MetadataOracleNetTypeDefinition typedef, MetadataOracleNetTypeDefinition metTypeDef, SimpleTestClass model, string name, int startNumber)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty      = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));
            prop.PropertyMetadata = metTypeDef;

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            var(constructor, lastNumber) = metadata.BuildQueryConstructorString(model, name, startNumber);

            Assert.NotNull(constructor);
            var expectedConstructor = new StringBuilder();

            expectedConstructor.AppendLine($"{name}_0 := {metTypeDef.UDTInfo.FullObjectName}({string.Join(',', metTypeDef.Properties.OrderBy(c => c.Order).Select(c => $"{c.Name}=>null"))});");

            expectedConstructor.Append($"{name} := {typedef.UDTInfo.FullObjectName}({prop.Name}=>{name}_0,");
            expectedConstructor.Append(string.Join(',', typedef.Properties.OrderBy(c => c.Order).Where(c => c.Name != prop.Name).Select(c => $"{c.Name}=>null")));
            expectedConstructor.AppendLine(");");
            Assert.Equal(expectedConstructor.ToString(), constructor);
            Assert.Equal(startNumber, lastNumber);
        }
예제 #23
0
        internal void BuildQueryConstructorString_Object_SimpleNetProperty_NullPropertyValue(MetadataOracleNetTypeDefinition typedef, string name, int startNumber)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

            var(constructor, lastNumber) = metadata.BuildQueryConstructorString(new SimpleTestClass(), name, startNumber);

            Assert.NotNull(constructor);
            var expectedConstructor = $"{name} := {typedef.UDTInfo.FullObjectName}({string.Join(',', typedef.Properties.OrderBy(c => c.Order).Select(c => $"{c.Name}=>null"))});" + Environment.NewLine;

            Assert.Equal(expectedConstructor, constructor);
            Assert.Equal(startNumber, lastNumber);
        }
예제 #24
0
        internal void GetOracleParameters_Object_Metadata_ReturnsSubPropertyParameters(MetadataOracleNetTypeDefinition typedef, ComplexTestClass model, MetadataOracleNetTypeDefinition metaTypeDef, int startNumber)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty      = typeof(ComplexTestClass).GetProperty(nameof(ComplexTestClass.ObjectProp));
            prop.PropertyMetadata = metaTypeDef;

            var subProp = metaTypeDef.Properties.OrderBy(c => c.Order).First();

            subProp.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            var metadata = new MetadataOracleObject <ComplexTestClass>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetOracleParameters(model, startNumber);

            Assert.NotNull(actual);
            var oraProp = Assert.Single(actual);

            Assert.NotNull(oraProp);
            Assert.Equal($":{startNumber}", oraProp.ParameterName);
            Assert.Equal(ParameterDirection.Input, oraProp.Direction);
            Assert.Equal(model.ObjectProp.Prop1, oraProp.Value);
        }
예제 #25
0
        internal void GetOracleParameters_Object_Metadata_CollectionProperty_ObjectProperty_ReturnsSubPropertyParameters(MetadataOracleNetTypeDefinition typedef, CollectionPropertyTestClass model, MetadataOracleNetTypeDefinition metaTypeDef, int startNumber)
        {
            var prop = typedef.Properties.OrderBy(c => c.Order).First();

            prop.NETProperty      = typeof(CollectionPropertyTestClass).GetProperty(nameof(CollectionPropertyTestClass.Prop2));
            prop.PropertyMetadata = metaTypeDef;

            var subProp = metaTypeDef.Properties.OrderBy(c => c.Order).First();

            subProp.NETProperty = typeof(SimpleTestClass).GetProperty(nameof(SimpleTestClass.Prop1));

            var metadata = new MetadataOracleObject <CollectionPropertyTestClass>(typedef, new MetadataOracleCommon());

            var actual = metadata.GetOracleParameters(model, startNumber);

            Assert.NotNull(actual);
            Assert.All(actual, c => Assert.Equal(ParameterDirection.Input, c.Direction));

            Assert.Collection(actual,
                              (c) =>
            {
                Assert.Equal($":{startNumber++}", c.ParameterName);
                Assert.Equal(model.Prop2[0].Prop1, c.Value);
            },
                              (c) =>
            {
                Assert.Equal($":{startNumber++}", c.ParameterName);
                Assert.Equal(model.Prop2[1].Prop1, c.Value);
            },
                              (c) =>
            {
                Assert.Equal($":{startNumber}", c.ParameterName);
                Assert.Equal(model.Prop2[2].Prop1, c.Value);
            });
        }