Skip to content

Commit 0d6a0b7

Browse files
committed
test: cases for includes and take/skip operations
1 parent 073a0db commit 0d6a0b7

File tree

5 files changed

+173
-2
lines changed

5 files changed

+173
-2
lines changed

tests/QueryableValues.SqlServer.Tests/Integration/ComplexTypeTests.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,78 @@ public async Task MustMatchCount()
795795

796796
Assert.Equal(expectedItemCount, actualItemCount);
797797
}
798+
799+
[Fact]
800+
public async Task JoinWithInclude()
801+
{
802+
var values = new[]
803+
{
804+
new { Id = 100, Value = Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6") },
805+
new { Id = 300, Value = Guid.Empty }
806+
};
807+
808+
var query =
809+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
810+
join v in _db.AsQueryableValues(values) on td.GuidValue equals v.Value
811+
orderby td.Id
812+
select td;
813+
814+
var actual = await query.ToListAsync();
815+
816+
Assert.Equal(2, actual.Count);
817+
818+
Assert.Equal(1, actual[0].Id);
819+
Assert.Equal(2, actual[0].ChildEntity.Count);
820+
821+
Assert.Equal(3, actual[1].Id);
822+
Assert.Equal(1, actual[1].ChildEntity.Count);
823+
}
824+
825+
[Fact]
826+
public async Task JoinWithIncludeAndTake()
827+
{
828+
var values = new[]
829+
{
830+
new { Id = 100, Value = Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6") },
831+
new { Id = 300, Value = Guid.Empty }
832+
};
833+
834+
var query =
835+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
836+
join v in _db.AsQueryableValues(values).Take(1) on td.GuidValue equals v.Value
837+
orderby td.Id
838+
select td;
839+
840+
var actual = await query.ToListAsync();
841+
842+
Assert.Single(actual);
843+
844+
Assert.Equal(3, actual[0].Id);
845+
Assert.Equal(1, actual[0].ChildEntity.Count);
846+
}
847+
848+
[Fact]
849+
public async Task JoinWithIncludeAndSkip()
850+
{
851+
var values = new[]
852+
{
853+
new { Id = 100, Value = Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6") },
854+
new { Id = 300, Value = Guid.Empty }
855+
};
856+
857+
var query =
858+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
859+
join v in _db.AsQueryableValues(values).Skip(1) on td.GuidValue equals v.Value
860+
orderby td.Id
861+
select td;
862+
863+
var actual = await query.ToListAsync();
864+
865+
Assert.Single(actual);
866+
867+
Assert.Equal(1, actual[0].Id);
868+
Assert.Equal(2, actual[0].ChildEntity.Count);
869+
}
798870
}
799871

800872
[Collection("DbContext")]

tests/QueryableValues.SqlServer.Tests/Integration/DbContextFixture.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#if TESTS
22
using System;
3+
using System.Collections.Generic;
34
using System.Threading.Tasks;
45
using Xunit;
56

@@ -47,7 +48,12 @@ private async Task Seed()
4748
StringUnicodeValue = "👋",
4849
DateTimeValue = DateTime.MinValue,
4950
DateTimeOffsetValue = DateTimeOffset.MinValue,
50-
GuidValue = Guid.Empty
51+
GuidValue = Guid.Empty,
52+
ChildEntity = new List<ChildEntity>
53+
{
54+
new ChildEntity(),
55+
new ChildEntity()
56+
}
5157
},
5258
new TestDataEntity
5359
{
@@ -78,7 +84,11 @@ private async Task Seed()
7884
StringUnicodeValue = "أهلا",
7985
DateTimeValue = DateTime.MaxValue,
8086
DateTimeOffsetValue = DateTimeOffset.MaxValue,
81-
GuidValue = Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6")
87+
GuidValue = Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6"),
88+
ChildEntity = new List<ChildEntity>
89+
{
90+
new ChildEntity()
91+
}
8292
}
8393
};
8494

tests/QueryableValues.SqlServer.Tests/Integration/MyDbContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public interface IMyDbContext : IQueryableValuesEnabledDbContext
3131
{
3232
QueryableValuesSqlServerOptions Options { get; }
3333
DbSet<TestDataEntity> TestData { get; set; }
34+
DbSet<ChildEntity> ChildEntity { get; set; }
3435
}
3536

3637
public class NotConfiguredDbContext : MyDbContextBase

tests/QueryableValues.SqlServer.Tests/Integration/MyDbContextBase.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#if TESTS
22
using Microsoft.EntityFrameworkCore;
33
using System;
4+
using System.Collections.Generic;
45
using System.IO;
56

67
namespace BlazarTech.QueryableValues.SqlServer.Tests.Integration
@@ -17,6 +18,7 @@ public abstract class MyDbContextBase : DbContext
1718
#endif
1819

1920
public DbSet<TestDataEntity> TestData { get; set; } = null!;
21+
public DbSet<ChildEntity> ChildEntity { get; set; } = null!;
2022

2123
public MyDbContextBase(
2224
string databaseName,
@@ -102,6 +104,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
102104
entity.Property(p => p.StringUnicodeValue)
103105
.HasMaxLength(50)
104106
.IsUnicode(true);
107+
108+
entity.HasMany(p => p.ChildEntity);
109+
});
110+
111+
modelBuilder.Entity<ChildEntity>(entity =>
112+
{
113+
entity.HasKey(p => p.Id);
105114
});
106115
}
107116
}
@@ -124,6 +133,13 @@ public class TestDataEntity
124133
public DateTime DateTimeValue { get; set; }
125134
public DateTimeOffset DateTimeOffsetValue { get; set; }
126135
public Guid GuidValue { get; set; }
136+
public ICollection<ChildEntity> ChildEntity { get; set; } = default!;
137+
}
138+
139+
public class ChildEntity
140+
{
141+
public int Id { get; set; }
142+
public int TestDataEntityId { get; set; }
127143
}
128144
}
129145
#endif

tests/QueryableValues.SqlServer.Tests/Integration/SimpleTypeTests.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,78 @@ async Task AssertCount<T>(Func<int, T> getValue)
728728
Assert.Equal(expectedItemCount, actualItemCount);
729729
}
730730
}
731+
732+
[Fact]
733+
public async Task JoinWithInclude()
734+
{
735+
var values = new Guid[]
736+
{
737+
Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6"),
738+
Guid.Empty
739+
};
740+
741+
var query =
742+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
743+
join id in _db.AsQueryableValues(values) on td.GuidValue equals id
744+
orderby td.Id
745+
select td;
746+
747+
var actual = await query.ToListAsync();
748+
749+
Assert.Equal(2, actual.Count);
750+
751+
Assert.Equal(1, actual[0].Id);
752+
Assert.Equal(2, actual[0].ChildEntity.Count);
753+
754+
Assert.Equal(3, actual[1].Id);
755+
Assert.Equal(1, actual[1].ChildEntity.Count);
756+
}
757+
758+
[Fact]
759+
public async Task JoinWithIncludeAndTake()
760+
{
761+
var values = new Guid[]
762+
{
763+
Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6"),
764+
Guid.Empty
765+
};
766+
767+
var query =
768+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
769+
join id in _db.AsQueryableValues(values).Take(1) on td.GuidValue equals id
770+
orderby td.Id
771+
select td;
772+
773+
var actual = await query.ToListAsync();
774+
775+
Assert.Single(actual);
776+
777+
Assert.Equal(3, actual[0].Id);
778+
Assert.Equal(1, actual[0].ChildEntity.Count);
779+
}
780+
781+
[Fact]
782+
public async Task JoinWithIncludeAndSkip()
783+
{
784+
var values = new Guid[]
785+
{
786+
Guid.Parse("f6379213-750f-42df-91b9-73756f28c4b6"),
787+
Guid.Empty
788+
};
789+
790+
var query =
791+
from td in _db.TestData.AsNoTracking().Include(p => p.ChildEntity)
792+
join id in _db.AsQueryableValues(values).Skip(1) on td.GuidValue equals id
793+
orderby td.Id
794+
select td;
795+
796+
var actual = await query.ToListAsync();
797+
798+
Assert.Single(actual);
799+
800+
Assert.Equal(1, actual[0].Id);
801+
Assert.Equal(2, actual[0].ChildEntity.Count);
802+
}
731803
}
732804

733805
[Collection("DbContext")]

0 commit comments

Comments
 (0)