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); }
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); }
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); }