Skip to content

Commit 0a09aa6

Browse files
authored
Merge pull request #11 from Shuttle/async
Async
2 parents cafcba4 + bf05f1c commit 0a09aa6

File tree

84 files changed

+2425
-2083
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+2425
-2083
lines changed

README.md

Lines changed: 84 additions & 150 deletions
Large diffs are not rendered by default.

Shuttle.Core.Data.Tests/AssemblerExtensionsFixture.cs

Lines changed: 43 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,48 @@
55
using NUnit.Framework;
66
using Shuttle.Core.Data.Tests.Fakes;
77

8-
namespace Shuttle.Core.Data.Tests
8+
namespace Shuttle.Core.Data.Tests;
9+
10+
[TestFixture]
11+
public class AssemblerExtensionsFixture
912
{
10-
[TestFixture]
11-
public class AssemblerExtensionsFixture
12-
{
13-
[Test]
14-
public void Should_be_able_to_assemble_item()
15-
{
16-
var now = DateTime.Now;
17-
var mappedData = new MappedData();
18-
19-
var orderTable = new DataTable();
20-
21-
orderTable.Columns.Add("OrderNumber", typeof(string));
22-
orderTable.Columns.Add("OrderDate", typeof(DateTime));
23-
24-
const string orderNumber = "ON-10";
25-
26-
mappedData.Add(new MappedRow<Order>(orderTable.Rows.Add(orderNumber, now), new Order(orderNumber, now)));
27-
28-
var orderLineTable = new DataTable();
29-
30-
orderLineTable.Columns.Add("OrderNumber", typeof(string));
31-
orderLineTable.Columns.Add("ProductId", typeof(string));
32-
orderLineTable.Columns.Add("Quantity", typeof(int));
33-
orderLineTable.Columns.Add("UnitCost", typeof(double));
34-
35-
mappedData.Add(new List<MappedRow<OrderLine>>
36-
{
37-
new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-1", 5, 10), new OrderLine("SKU-1", 5, 10)),
38-
new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-2", 1, 65), new OrderLine("SKU-2", 1, 65)),
39-
new MappedRow<OrderLine>(orderLineTable.Rows.Add(orderNumber, "SKU-3", 10, 10.5), new OrderLine("SKU-3", 10, 10.5))
40-
});
41-
42-
var order = new OrderAssembler().AssembleItem(mappedData);
43-
44-
Assert.AreEqual(orderNumber, order.OrderNumber);
45-
Assert.AreEqual(now, order.OrderDate);
46-
Assert.AreEqual(3, order.Lines.Count());
47-
Assert.AreEqual(50, order.Lines.ElementAt(0).TotalCost());
48-
Assert.AreEqual(65, order.Lines.ElementAt(1).TotalCost());
49-
Assert.AreEqual(105, order.Lines.ElementAt(2).TotalCost());
50-
Assert.AreEqual(220, order.Total());
51-
}
52-
}
13+
[Test]
14+
public void Should_be_able_to_assemble_item()
15+
{
16+
var now = DateTime.Now;
17+
var mappedData = new MappedData();
18+
19+
var orderTable = new DataTable();
20+
21+
orderTable.Columns.Add("OrderNumber", typeof(string));
22+
orderTable.Columns.Add("OrderDate", typeof(DateTime));
23+
24+
const string orderNumber = "ON-10";
25+
26+
mappedData.Add(new MappedRow<Order>(orderTable.Rows.Add(orderNumber, now), new Order(orderNumber, now)));
27+
28+
var orderLineTable = new DataTable();
29+
30+
orderLineTable.Columns.Add("OrderNumber", typeof(string));
31+
orderLineTable.Columns.Add("ProductId", typeof(string));
32+
orderLineTable.Columns.Add("Quantity", typeof(int));
33+
orderLineTable.Columns.Add("UnitCost", typeof(double));
34+
35+
mappedData.Add(new List<MappedRow<OrderLine>>
36+
{
37+
new(orderLineTable.Rows.Add(orderNumber, "SKU-1", 5, 10), new OrderLine("SKU-1", 5, 10)),
38+
new(orderLineTable.Rows.Add(orderNumber, "SKU-2", 1, 65), new OrderLine("SKU-2", 1, 65)),
39+
new(orderLineTable.Rows.Add(orderNumber, "SKU-3", 10, 10.5), new OrderLine("SKU-3", 10, 10.5))
40+
});
41+
42+
var order = new OrderAssembler().AssembleItem(mappedData);
43+
44+
Assert.AreEqual(orderNumber, order.OrderNumber);
45+
Assert.AreEqual(now, order.OrderDate);
46+
Assert.AreEqual(3, order.Lines.Count());
47+
Assert.AreEqual(50, order.Lines.ElementAt(0).TotalCost());
48+
Assert.AreEqual(65, order.Lines.ElementAt(1).TotalCost());
49+
Assert.AreEqual(105, order.Lines.ElementAt(2).TotalCost());
50+
Assert.AreEqual(220, order.Total());
51+
}
5352
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
3+
using NUnit.Framework;
4+
5+
namespace Shuttle.Core.Data.Tests;
6+
7+
public class AsyncFixture : MappingFixture
8+
{
9+
private readonly Query _rowsQuery = new(@"
10+
select
11+
Id,
12+
Name,
13+
Age
14+
from
15+
BasicMapping
16+
");
17+
18+
[Test]
19+
public void Should_be_able_to_use_the_same_database_context_across_tasks_async()
20+
{
21+
var tasks = new List<Task>();
22+
23+
using (GetDatabaseContext())
24+
{
25+
for (int i = 0; i < 10; i++)
26+
{
27+
tasks.Add(GetDatabaseGateway().GetRowsAsync(_rowsQuery));
28+
}
29+
30+
Task.WaitAll(tasks.ToArray());
31+
}
32+
}
33+
34+
[Test]
35+
public async Task Should_be_able_to_use_the_same_database_context_across_synchronized_tasks_async()
36+
{
37+
using (GetDatabaseContext())
38+
{
39+
await GetRowsAsync(0);
40+
}
41+
}
42+
43+
private async Task GetRowsAsync(int depth)
44+
{
45+
if (depth < 5)
46+
{
47+
await GetRowsAsync(depth + 1);
48+
}
49+
50+
_ = await GetDatabaseGateway().GetRowsAsync(_rowsQuery);
51+
}
52+
}

0 commit comments

Comments
 (0)