Skip to content

Commit 069dd26

Browse files
DataSourceLoader.LoadAsync (#377)
1 parent 901dcf9 commit 069dd26

19 files changed

Lines changed: 577 additions & 50 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using Xunit;
6+
7+
namespace DevExtreme.AspNet.Data.Tests {
8+
9+
public static class AsyncTestHelper {
10+
11+
public interface IDataItem {
12+
int Value { get; set; }
13+
}
14+
15+
public static IEnumerable<T> CreateTestData<T>(Func<T> itemFactory) where T : IDataItem {
16+
for(var i = 1; i <= 3; i++) {
17+
var item = itemFactory();
18+
item.Value = i;
19+
yield return item;
20+
}
21+
}
22+
23+
public static async Task RunAsync<T>(IQueryable<T> data) {
24+
var loadOptions = new SampleLoadOptions {
25+
RequireTotalCount = true,
26+
Take = 1,
27+
RemoteGrouping = true
28+
};
29+
30+
{
31+
var loadResult = await DataSourceLoader.LoadAsync(data, loadOptions);
32+
Assert.Equal(3, loadResult.totalCount);
33+
Assert.Single(loadResult.data);
34+
}
35+
36+
{
37+
loadOptions.TotalSummary = new[] {
38+
new SummaryInfo { SummaryType = "sum", Selector = nameof(IDataItem.Value) }
39+
};
40+
41+
var loadResult = await DataSourceLoader.LoadAsync(data, loadOptions);
42+
Assert.Equal(6m, loadResult.summary[0]);
43+
}
44+
45+
Assert.Contains(loadOptions.ExpressionLog, i => i.EndsWith(".Count()"));
46+
Assert.Contains(loadOptions.ExpressionLog, i => i.EndsWith(".Take(1)"));
47+
Assert.Contains(loadOptions.ExpressionLog, i => i.Contains(".GroupBy"));
48+
}
49+
50+
}
51+
52+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Xunit;
5+
6+
namespace DevExtreme.AspNet.Data.Tests.EF6 {
7+
using DataItem = Async_DataItem;
8+
9+
public class Async_DataItem : AsyncTestHelper.IDataItem {
10+
public int ID { get; set; }
11+
public int Value { get; set; }
12+
}
13+
14+
public class Async {
15+
16+
[Fact]
17+
public async Task Scenario() {
18+
await TestDbContext.ExecAsync(async context => {
19+
var set = context.Set<DataItem>();
20+
set.AddRange(AsyncTestHelper.CreateTestData(() => new DataItem()));
21+
await context.SaveChangesAsync();
22+
23+
await AsyncTestHelper.RunAsync(set);
24+
});
25+
}
26+
27+
}
28+
29+
}

net/DevExtreme.AspNet.Data.Tests.EF6/DevExtreme.AspNet.Data.Tests.EF6.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
<None Include="packages.config" />
8080
</ItemGroup>
8181
<ItemGroup>
82+
<Compile Include="Async.cs" />
8283
<Compile Include="AssemblyInfo.cs" />
8384
<Compile Include="Bug179.cs" />
8485
<Compile Include="Bug184.cs" />

net/DevExtreme.AspNet.Data.Tests.EF6/TestDbContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder) {
3232
modelBuilder.Entity<RemoteGroupingStress_DataItem>();
3333
modelBuilder.Entity<Summary_DataItem>();
3434
modelBuilder.Entity<PaginateViaPrimaryKey_DataItem>().HasKey(i => new { i.K1, i.K2 });
35+
modelBuilder.Entity<Async_DataItem>();
3536
}
3637

3738
public static async Task ExecAsync(Func<TestDbContext, Task> action) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Xunit;
4+
5+
namespace DevExtreme.AspNet.Data.Tests.EFCore {
6+
7+
public class Async {
8+
9+
public class DataItem : AsyncTestHelper.IDataItem {
10+
public int ID { get; set; }
11+
public int Value { get; set; }
12+
}
13+
14+
[Fact]
15+
public async Task Scenario() {
16+
await TestDbContext.ExecAsync(async context => {
17+
var set = context.Set<DataItem>();
18+
set.AddRange(AsyncTestHelper.CreateTestData(() => new DataItem()));
19+
await context.SaveChangesAsync();
20+
21+
await AsyncTestHelper.RunAsync(set);
22+
});
23+
}
24+
25+
}
26+
27+
}

net/DevExtreme.AspNet.Data.Tests.EFCore/TestDbContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) {
2121
modelBuilder.Entity<Bug120.DataItem>();
2222
modelBuilder.Entity<Bug326.Entity>();
2323
modelBuilder.Entity<PaginateViaPrimaryKey.DataItem>().HasKey("K1", "K2");
24+
modelBuilder.Entity<Async.DataItem>();
2425
}
2526

2627
public static async Task ExecAsync(Func<TestDbContext, Task> action) {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using FluentNHibernate.Mapping;
2+
using System;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using Xunit;
6+
7+
namespace DevExtreme.AspNet.Data.Tests.NH {
8+
9+
public class Async {
10+
11+
public class DataItem : AsyncTestHelper.IDataItem {
12+
public virtual int Id { get; set; }
13+
public virtual int Value { get; set; }
14+
}
15+
16+
public class DataItemMap : ClassMap<DataItem> {
17+
public DataItemMap() {
18+
Table(nameof(Async) + "_" + nameof(DataItem));
19+
Id(p => p.Id);
20+
Map(p => p.Value);
21+
}
22+
}
23+
24+
[Fact]
25+
public async Task Scenario() {
26+
await SessionFactoryHelper.ExecAsync(async session => {
27+
using(var tx = session.BeginTransaction()) {
28+
foreach(var i in AsyncTestHelper.CreateTestData(() => new DataItem()))
29+
session.Save(i);
30+
await tx.CommitAsync();
31+
}
32+
33+
await AsyncTestHelper.RunAsync(session.Query<DataItem>());
34+
});
35+
}
36+
37+
}
38+
39+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using DevExpress.Xpo;
2+
using System;
3+
using System.Threading.Tasks;
4+
using Xunit;
5+
6+
namespace DevExtreme.AspNet.Data.Tests.Xpo {
7+
8+
public class Async {
9+
10+
[Persistent(nameof(Async) + "_" + nameof(DataItem))]
11+
public class DataItem : AsyncTestHelper.IDataItem {
12+
[Key(AutoGenerate = true)]
13+
public int ID { get; set; }
14+
public int Value { get; set; }
15+
}
16+
17+
[Fact]
18+
public async Task Scenario() {
19+
await UnitOfWorkHelper.ExecAsync(async uow => {
20+
foreach(var i in AsyncTestHelper.CreateTestData(() => new DataItem()))
21+
uow.Save(i);
22+
23+
uow.CommitChanges();
24+
await AsyncTestHelper.RunAsync(uow.Query<DataItem>());
25+
});
26+
}
27+
28+
}
29+
30+
}

net/DevExtreme.AspNet.Data.Tests.Xpo/DevExtreme.AspNet.Data.Tests.Xpo.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8-
<PackageReference Include="DevExpress.Xpo" Version="18.1.3" />
8+
<PackageReference Include="DevExpress.Xpo" Version="18.2.10" />
99
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
1010
<PackageReference Include="xunit" Version="2.3.1" />
1111
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />

net/DevExtreme.AspNet.Data.Tests.Xpo/UnitOfWorkHelper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public static async Task ExecAsync(Func<UnitOfWork, Task> action) {
2222
typeof(RemoteGroupingStress.DataItem),
2323
typeof(Summary.DataItem),
2424
typeof(Bug339.DataItem),
25-
typeof(PaginateViaPrimaryKey.DataItem)
25+
typeof(PaginateViaPrimaryKey.DataItem),
26+
typeof(Async.DataItem)
2627
);
2728

2829
var provider = XpoDefault.GetConnectionProvider(

0 commit comments

Comments
 (0)