public void CreateDelegate_AttributeForDynamicObject_MatchesExpected() { var entityDefinition = new DataAnnotationsDefinitionProvider().Resolve <OverriddenColumnNameRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); var expected = new OverriddenColumnNameRow { OverriddenColumnNameId = 12, Description = "my desc", EntryTime = DateTimeOffset.Now, Name = "name", RelatedRowId = 234, RelatedRowName = "relatedName" }; using (var dataReader = expected.MockDataReader(entityDefinition.DirectAttributes).Object) { dataReader.Read(); var dataRequest = new PocoDataRequest(dataReader, entityDefinition, databaseContext.Object); var func = FlatPocoFactory.CreateDelegate <dynamic>(dataRequest).MappingDelegate as Func <IDataReader, dynamic>; Assert.IsNotNull(func); var actual = func(dataReader); foreach (var definition in entityDefinition.DirectAttributes) { Assert.AreEqual(definition.GetValueDelegate.DynamicInvoke(expected), ((IDictionary <string, object>)actual)[definition.ReferenceName]); } } }
public void CreateDelegate_RaisedPocoFactoryForFlatComplexRow_DelegateSetsPocoAsExpected() { var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <ComplexFlatRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); using (var target = new RaisedPocoFactory(definitionProvider)) { var stopwatch = new Stopwatch(); var expected = Generate.CreateFakeComplexRow(); ComplexFlatRow actual; using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); actual = target.CreatePoco <ComplexFlatRow>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); stopwatch.Reset(); Assert.IsNotNull(actual); Assert.AreEqual(expected.FakeComplexEntityId, actual.FakeComplexEntityId); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); target.CreatePoco <ComplexFlatRow>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); stopwatch.Reset(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Start(); target.CreatePoco <ComplexFlatRow>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); stopwatch.Reset(); } }
public void CreateDelegate_FlatPocoFactoryForComplexRow_IsNotNull() { var fakeComplexRow = Generate.CreateFakeComplexRow(); var entityDefinition = new DataAnnotationsDefinitionProvider().Resolve <ComplexFlatRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); PocoDelegateInfo actual; using (var reader = fakeComplexRow.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); actual = FlatPocoFactory.CreateDelegate <ComplexFlatRow>(pocoDataRequest); } Assert.IsNotNull(actual); }
public void CreateDelegate_RaisedPocoFactoryForRaisedComplexRow_IsNotNull() { var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <ComplexRaisedRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); using (var target = new RaisedPocoFactory(definitionProvider)) { var expected = Generate.CreateFakeRaisedComplexRow(true); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); var actual = target.CreatePoco <ComplexRaisedRow>(pocoDataRequest); Assert.IsNotNull(actual); } } }
public void CreateDelegate_FlatPocoFactoryForDynamic_DelegateSetsPocoAsExpected() { var expected = Generate.CreateFakeComplexRow(); var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <ComplexFlatRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); Expression <Func <ComplexFlatRow, object> > expression1 = row => row.FakeComplexEntityId; Expression <Func <ComplexFlatRow, object> > expression2 = row => row.FakeDependentEntityDependentIntegerValue; Expression <Func <ComplexFlatRow, object> > expression3 = row => row.FakeSubSubEntityUniqueName; var attributes = new[] { expression1, expression2, expression3 }.Select(entityDefinition.Find) .ToList(); dynamic actual; // Set up the data reader with all attributes to ensure that the process is only getting the ones we want. using (var reader = expected.MockDataReader(attributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, attributes, databaseContext.Object); var pocoDelegate = FlatPocoFactory.CreateDelegate <dynamic>(pocoDataRequest).MappingDelegate as Func <IDataReader, dynamic>; Assert.IsNotNull(pocoDelegate); actual = pocoDelegate.Invoke(reader); } Assert.IsNotNull(actual); Assert.AreEqual(expected.FakeComplexEntityId, actual.FakeComplexEntityId); Assert.AreEqual(expected.FakeDependentEntityDependentIntegerValue, actual.FakeDependentEntityDependentIntegerValue); Assert.AreEqual(expected.FakeSubSubEntityUniqueName, actual.FakeSubSubEntityUniqueName); Assert.ThrowsException <RuntimeBinderException>(() => Assert.IsNull(actual.Description)); }
public void CreateDelegate_RaisedPocoFactoryForRaisedDynamic_DelegateSetsPocoAsExpected() { var definitionProvider = new DataAnnotationsDefinitionProvider(); var expected = Generate.CreateFakeRaisedComplexRow(true); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); using (var target = new RaisedPocoFactory(definitionProvider)) { var entityDefinition = definitionProvider.Resolve <ComplexRaisedRow>(); Expression <Func <ComplexRaisedRow, object> > expression1 = row => row.ComplexEntityId; Expression <Func <ComplexRaisedRow, object> > expression2 = row => row.DependentEntity.DependentIntegerValue; Expression <Func <ComplexRaisedRow, object> > expression3 = row => row.SubEntity.SubSubEntity.UniqueName; var attributes = new[] { expression1, expression2, expression3 }.Select(entityDefinition.Find) .ToList(); dynamic actual; using (var reader = expected.MockDataReader(attributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, attributes, databaseContext.Object); actual = target.CreatePoco <dynamic>(pocoDataRequest); } Assert.IsNotNull(actual); Assert.AreEqual(expected.ComplexEntityId, actual.ComplexEntityId); Assert.AreEqual(expected.DependentEntity.DependentIntegerValue, actual.DependentEntityDependentIntegerValue); Assert.AreEqual(expected.SubEntity.SubSubEntity.UniqueName, actual.SubSubEntityUniqueName); Assert.ThrowsException <RuntimeBinderException>(() => Assert.IsNull(actual.Description)); } }
public void CreateDelegate_FlatPocoFactoryForPhysicalNameOverriddenRow_DelegateSetsPocoAsExpected() { var expected = new OverriddenColumnNameRow { OverriddenColumnNameId = 43, Name = "OcnName", Description = "OcnDescription", EntryTime = DateTimeOffset.Now, RelatedRowId = 3433, RelatedRowName = "RelatedName" }; var entityDefinition = new DataAnnotationsDefinitionProvider().Resolve <OverriddenColumnNameRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); Stopwatch stopwatch; OverriddenColumnNameRow actual; using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch = Stopwatch.StartNew(); var pocoDelegate = FlatPocoFactory.CreateDelegate <OverriddenColumnNameRow>(pocoDataRequest).MappingDelegate as Func <IDataReader, OverriddenColumnNameRow>; Trace.TraceInformation($"{stopwatch.Elapsed} Create delegate"); stopwatch.Reset(); Assert.IsNotNull(pocoDelegate); stopwatch.Start(); actual = pocoDelegate.Invoke(pocoDataRequest.DataReader); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); stopwatch.Reset(); Assert.IsNotNull(actual); Assert.AreEqual(expected.OverriddenColumnNameId, actual.OverriddenColumnNameId); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDelegate = FlatPocoFactory.CreateDelegate <OverriddenColumnNameRow>(new PocoDataRequest(reader, entityDefinition, databaseContext.Object)).MappingDelegate as Func <IDataReader, OverriddenColumnNameRow>; Assert.IsNotNull(pocoDelegate); stopwatch.Start(); pocoDelegate.Invoke(reader); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); stopwatch.Reset(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { reader.Read(); var pocoDelegate = FlatPocoFactory.CreateDelegate <OverriddenColumnNameRow>(new PocoDataRequest(reader, entityDefinition, databaseContext.Object)).MappingDelegate as Func <IDataReader, OverriddenColumnNameRow>; Assert.IsNotNull(pocoDelegate); stopwatch.Start(); pocoDelegate.Invoke(reader); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); stopwatch.Reset(); }
public void CreateDelegate_RaisedPocoFactoryForRaisedPhysicalNameOverriddenRow_DelegateSetsPocoAsExpected() { var stopwatch = new Stopwatch(); var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <RaisedOverriddenColumnNameRow>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); using (var target = new RaisedPocoFactory(definitionProvider)) { var expected = new RaisedOverriddenColumnNameRow { OverriddenColumnNameId = 345, Name = "RaisedName", Description = "RaisedDescription", EntryTime = DateTimeOffset.Now, RelatedRowId = 344, RelatedRow = new RelatedRow { RelatedRowId = 344, Name = "RelatedName" } }; RaisedOverriddenColumnNameRow actual; using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Reset(); actual = target.CreatePoco <RaisedOverriddenColumnNameRow>(pocoDataRequest); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); } stopwatch.Reset(); Assert.IsNotNull(actual); Assert.AreEqual(expected.OverriddenColumnNameId, actual.OverriddenColumnNameId); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Reset(); target.CreatePoco <RaisedOverriddenColumnNameRow>(pocoDataRequest); Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); } stopwatch.Reset(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); stopwatch.Reset(); target.CreatePoco <RaisedOverriddenColumnNameRow>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); stopwatch.Reset(); } }
public void CreateDelegate_RaisedPocoFactoryForRaisedDuplicateAttributeRow_DelegateSetsPocoAsExpected() { // It is vitally important that we use separate (duplicate) POCOs when creating this test object so that any failure to // update one of the instance properties is caught. var expected = new InstanceSection { InstanceSectionId = 234, EndDate = DateTimeOffset.MaxValue, InstanceId = 45873, Instance = new Instance { InstanceId = 45873, Name = "MyInstance", OwnerId = 4875, TemplateVersionId = 43, TemplateVersion = new TemplateVersion { TemplateVersionId = 43, TemplateId = 87, Revision = 3, FakeSubSubEntityId = 56, FakeSubSubUniqueName = "FakeSubSubUniqueName", OtherEntityUniqueName = "OtherEntityUniqueName", Description = "TemplateVersion", Template = new Template { TemplateId = 87, Name = "Template" } } }, FakeDependentId = 345, FakeDependentEntityDependentTimeValue = DateTimeOffset.MinValue.AddYears(2000), SomeEntityUniqueName = "SomeEntityUniqueName", InstanceExtension = new InstanceExtension { InstanceExtensionId = 234, Enabled = true }, OwnerId = 7458, StartDate = DateTimeOffset.Now, TemplateSectionId = 48753, TemplateSection = new TemplateSection { TemplateSectionId = 48753, Header = "My Section Header", Order = 2, TemplateVersionId = 43, TemplateVersion = new TemplateVersion { TemplateVersionId = 43, TemplateId = 87, Revision = 3, FakeSubSubEntityId = 56, FakeSubSubUniqueName = "FakeSubSubUniqueName", OtherEntityUniqueName = "OtherEntityUniqueName", Description = "TemplateVersion", Template = new Template { Name = "Template", TemplateId = 87 } } } }; var stopwatch = new Stopwatch(); var definitionProvider = new DataAnnotationsDefinitionProvider(); var entityDefinition = definitionProvider.Resolve <InstanceSection>(); var databaseContext = new Mock <IDatabaseContext>(); databaseContext.Setup(context => context.GetValueMapper(It.IsAny <Type>(), It.IsAny <Type>())).Returns((IValueMapper)null); stopwatch.Reset(); using (var target = new RaisedPocoFactory(definitionProvider)) { InstanceSection actual; using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); Trace.TraceInformation($"{stopwatch.Elapsed} Create data request"); stopwatch.Reset(); actual = target.CreatePoco <InstanceSection>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #1"); stopwatch.Reset(); Assert.IsNotNull(actual); Assert.AreEqual(expected.InstanceSectionId, actual.InstanceSectionId); Assert.AreEqual( expected.Instance.TemplateVersion, actual.Instance.TemplateVersion, string.Join(Environment.NewLine, expected.Instance.TemplateVersion.GetDifferences(actual.Instance.TemplateVersion))); Assert.AreEqual( expected.Instance, actual.Instance, string.Join(Environment.NewLine, expected.Instance.GetDifferences(actual.Instance))); Assert.AreEqual( expected.TemplateSection, actual.TemplateSection, string.Join(Environment.NewLine, expected.TemplateSection.GetDifferences(actual.TemplateSection))); Assert.AreEqual(expected, actual, string.Join(Environment.NewLine, expected.GetDifferences(actual))); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); target.CreatePoco <InstanceSection>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #2"); stopwatch.Reset(); using (var reader = expected.MockDataReader(entityDefinition.ReturnableAttributes).Object) { stopwatch.Start(); reader.Read(); var pocoDataRequest = new PocoDataRequest(reader, entityDefinition, databaseContext.Object); target.CreatePoco <InstanceSection>(pocoDataRequest); } Trace.TraceInformation($"{stopwatch.Elapsed} Invoke delegate #3"); stopwatch.Reset(); } }