Example #1
0
 internal virtual void SaveTypeDefinition(MetadataOracleTypeDefinition def)
 {
     using (var entry = Cache.CreateEntry($"def-{def.UDTInfo.FullObjectName}"))
     {
         entry.SetValue(def);
     }
 }
        internal void GetTypeDefinition_DoesNotExistsInCache_ReturnsDefault(Mock <IMemoryCache> memoryCache, string name)
        {
            object validParameter = null;
            MetadataOracleTypeDefinition definition = default;

            memoryCache.Setup(m => m.TryGetValue($"def-{name}", out validParameter)).Returns(false);

            var cache = new ServForOracleCache(memoryCache.Object);

            var actual = cache.GetTypeDefinition(name);

            Assert.Equal(definition, actual);
        }
        internal void GetTypeDefinition_ExistsInCache(Mock <IMemoryCache> memoryCache, MetadataOracleTypeDefinition definition)
        {
            object validParameter = definition;

            memoryCache.Setup(m => m.TryGetValue($"def-{definition.UDTInfo.FullObjectName}", out validParameter)).Returns(true);

            var cache = new ServForOracleCache(memoryCache.Object);

            var actual = cache.GetTypeDefinition(definition.UDTInfo.FullObjectName);

            Console.WriteLine("calls: " + memoryCache.Invocations);
            Assert.Equal(definition, actual);
        }
        internal void SaveTypeDefinition_CreatesEntryInCache(Mock <IMemoryCache> memoryCache, Mock <ICacheEntry> entry, MetadataOracleTypeDefinition definition)
        {
            var cache = new ServForOracleCache(memoryCache.Object);

            //= ServForOracleCache.Create();

            memoryCache.Setup(m => m.CreateEntry($"def-{definition.UDTInfo.FullObjectName}")).Returns(entry.Object);

            entry.SetupSet((e) => e.Value = definition).Verifiable();

            cache.SaveTypeDefinition(definition);

            entry.Verify();
        }
        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)
                              );
        }
        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)
                              );
        }
        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));
        }
        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);
            }
                              );
        }
        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);
        }
Example #10
0
        internal void BuildQueryConstructorString_Object_SimpleNetProperty(ServForOracleCache cache, MetadataOracleTypeDefinition metadataOracleType, UdtPropertyNetPropertyMap[] customProperties, bool fuzzyNameMatch, SimpleTestClass model, string name, int startNumber)
        {
            var prop = metadataOracleType.Properties.OrderBy(c => c.Order).First();

            customProperties[0] = new UdtPropertyNetPropertyMap(nameof(SimpleTestClass.Prop1), prop.Name);
            var typedef  = new MetadataOracleNetTypeDefinition(cache, typeof(SimpleTestClass), metadataOracleType, customProperties, fuzzyNameMatch);
            var metadata = new MetadataOracleObject <SimpleTestClass>(typedef, new MetadataOracleCommon());

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

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

            Assert.Equal(expectedConstructor, constructor);
            Assert.Equal(startNumber, lastNumber);
        }
Example #11
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);
        }