public void SmartSqlBuilder_ShouldUseTheGeneratorsInTheAppropriateOrder() { var mockSqlBuilder = new Mock <ISqlQuery>(MockBehavior.Strict); var seq = new MockSequence(); mockSqlBuilder .InSequence(seq) .Setup(x => x.InnerJoin( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Reference))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.InnerJoin( It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Reference2))), It.Is <PropertyInfo>(y => y == typeof(Goal_Node).GetProperty(nameof(Goal_Node.Id))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.LeftJoin( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == typeof(Node5).GetProperty(nameof(Node5.Reference))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Goal_Node).GetProperty(nameof(Goal_Node.Reference))), It.Is <PropertyInfo>(y => y == UnwrappedView <View1> .Type.GetProperty(nameof(View1.SimpleColumnSelection))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <View1> .Type.GetProperty(nameof(View1.IdSelection))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Foo))), It.Is <PropertyInfo>(y => y == UnwrappedView <View1> .Type.GetProperty(nameof(View1.SelectionFromAlreadyJoinedTable))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Node5).GetProperty(nameof(Node5.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <View1> .Type.GetProperty(nameof(View1.SelectionFromAnotherRoute))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Node5).GetProperty(nameof(Node5.Reference))), It.Is <PropertyInfo>(y => y == UnwrappedView <View1> .Type.GetProperty(nameof(View1.SecondSelectionFromAnotherRoute))))); Config.Use(new SpecifiedDataTables(typeof(Start_Node), typeof(Goal_Node), typeof(Node2), typeof(Node4), typeof(Node5), typeof(Node6), typeof(Node7), typeof(Node8))); SmartSqlBuilder <View1> .Build(_ => mockSqlBuilder.Object); mockSqlBuilder.Verify(x => x.InnerJoin(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Exactly(2)); mockSqlBuilder.Verify(x => x.LeftJoin(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Once); mockSqlBuilder.Verify(x => x.Select(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Exactly(5)); }
public void SmartSqlBuilder_GenerateBuildAction_GroupBy_Test() { var mockSqlBuilder = new Mock <ISqlQuery>(MockBehavior.Strict); mockSqlBuilder .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <View2> .Type.GetProperty(nameof(View2.Id))))); mockSqlBuilder .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.ReferenceWithoutAttribute))), It.Is <PropertyInfo>(y => y == UnwrappedView <View2> .Type.GetProperty(nameof(View2.Foo))))); mockSqlBuilder .Setup(x => x.SelectCount( It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <View2> .Type.GetProperty(nameof(View2.Count))))); mockSqlBuilder .Setup(x => x.InnerJoin( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Reference))))); mockSqlBuilder .Setup(x => x.GroupBy( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))))); mockSqlBuilder .Setup(x => x.GroupBy( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.ReferenceWithoutAttribute))))); Config.Use(new SpecifiedDataTables(typeof(Start_Node), typeof(Goal_Node), typeof(Node2), typeof(Node4), typeof(Node5), typeof(Node6), typeof(Node7), typeof(Node8))); SmartSqlBuilder <View2> .Build(_ => mockSqlBuilder.Object); mockSqlBuilder.Verify(x => x.InnerJoin(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Once); mockSqlBuilder.Verify( x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <View2> .Type.GetProperty(nameof(View2.Id)))), Times.Once); mockSqlBuilder.Verify( x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.ReferenceWithoutAttribute))), It.Is <PropertyInfo>(y => y == UnwrappedView <View2> .Type.GetProperty(nameof(View2.Foo)))), Times.Once); mockSqlBuilder.Verify(x => x.SelectCount(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Once); mockSqlBuilder.Verify(x => x.GroupBy(typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), Times.Once); mockSqlBuilder.Verify(x => x.GroupBy(typeof(Start_Node).GetProperty(nameof(Start_Node.ReferenceWithoutAttribute))), Times.Once); }
public void SmartSqlBuilder_ShouldWorkWithComplexViews() { Config.Use(new SpecifiedDataTables(typeof(Start_Node), typeof(Goal_Node), typeof(Node2), typeof(Node4), typeof(Node5), typeof(Node6), typeof(Node7), typeof(Node8))); var mockSqlBuilder = new Mock <ISqlQuery>(MockBehavior.Strict); var seq = new MockSequence(); mockSqlBuilder .InSequence(seq) .Setup(x => x.InnerJoin( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Reference))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.InnerJoin( It.Is <PropertyInfo>(y => y == typeof(Node2).GetProperty(nameof(Node2.Reference2))), It.Is <PropertyInfo>(y => y == typeof(Goal_Node).GetProperty(nameof(Goal_Node.Id))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Goal_Node).GetProperty(nameof(Goal_Node.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <Extension1> .Type.GetProperty(nameof(Extension1.IdSelection))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.Id))), It.Is <PropertyInfo>(y => y == UnwrappedView <Extension1> .Type.GetProperty(nameof(Extension1.Id))))); mockSqlBuilder .InSequence(seq) .Setup(x => x.Select( It.Is <PropertyInfo>(y => y == typeof(Start_Node).GetProperty(nameof(Start_Node.ReferenceWithoutAttribute))), It.Is <PropertyInfo>(y => y == UnwrappedView <Extension1> .Type.GetProperty(nameof(Extension1.ReferenceWithoutAttribute))))); SmartSqlBuilder <Extension1> .Build(_ => mockSqlBuilder.Object); mockSqlBuilder.Verify(x => x.InnerJoin(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Exactly(2)); mockSqlBuilder.Verify(x => x.Select(It.IsAny <PropertyInfo>(), It.IsAny <PropertyInfo>()), Times.Exactly(3)); }