Skip to content

Commit 451ceb7

Browse files
committed
2 parents f3dd26b + 6964992 commit 451ceb7

18 files changed

Lines changed: 1047 additions & 0 deletions
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
select 'embedded-script'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
select 'file-script'

Shuttle.Core.Data.Tests/App.config

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0"?>
2+
<configuration>
3+
<appSettings>
4+
<add key="my-key" value="my-value"/>
5+
</appSettings>
6+
<connectionStrings>
7+
<clear/>
8+
<add name="Shuttle" connectionString="Data Source=.\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>
9+
</connectionStrings>
10+
</configuration>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
using System.Linq;
5+
using NUnit.Framework;
6+
using Shuttle.Core.Data.Tests.Fakes;
7+
8+
namespace Shuttle.Core.Data.Tests
9+
{
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+
}
53+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Configuration;
2+
using System.Data;
3+
using NUnit.Framework;
4+
5+
namespace Shuttle.Core.Data.Tests
6+
{
7+
[TestFixture]
8+
public class ConnectionStringServiceFixture
9+
{
10+
[Test]
11+
public void Should_be_able_to_approve_given_valid_connection_strings()
12+
{
13+
GetConnectionStringService().Approve(new ConnectionStringSettingsCollection
14+
{
15+
new ConnectionStringSettings("Shuttle",
16+
"Data Source=.\\sqlexpress;Initial Catalog=Shuttle;Integrated Security=SSPI",
17+
"System.Data.SqlClient")
18+
});
19+
}
20+
21+
[Test]
22+
public void Should_be_able_to_approve_valid_connection_strings_from_the_configuration_file()
23+
{
24+
GetConnectionStringService().Approve();
25+
}
26+
27+
private ConnectionStringService GetConnectionStringService()
28+
{
29+
#if (!NETCOREAPP2_0 && !NETSTANDARD2_0)
30+
return new ConnectionStringService();
31+
#else
32+
return new ConnectionStringService(new DefaultDbProviderFactories());
33+
#endif
34+
}
35+
36+
[Test]
37+
public void Should_be_able_to_fail_given_invalid_connection_strings()
38+
{
39+
Assert.Throws<DataException>(() =>
40+
{
41+
GetConnectionStringService().Approve(
42+
new ConnectionStringSettingsCollection
43+
{
44+
new ConnectionStringSettings("not-here",
45+
"Data Source=.;Initial Catalog=i-dont-exist;",
46+
"System.Data.SqlClient")
47+
});
48+
});
49+
}
50+
}
51+
}
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
using System.Collections.Generic;
2+
using System.Data;
3+
using System.Linq;
4+
using Moq;
5+
using NUnit.Framework;
6+
7+
namespace Shuttle.Core.Data.Tests
8+
{
9+
[TestFixture]
10+
public class DataRepositoryFixture : Fixture
11+
{
12+
[Test]
13+
public void Should_be_able_to_fetch_all_items()
14+
{
15+
var gateway = new Mock<IDatabaseGateway>();
16+
var mapper = new Mock<IDataRowMapper<object>>();
17+
var query = new Mock<IQuery>();
18+
var dataRow = new DataTable().NewRow();
19+
var anObject = new object();
20+
21+
gateway.Setup(m => m.GetRowsUsing(query.Object)).Returns(new List<DataRow> {dataRow});
22+
mapper.Setup(m => m.Map(It.IsAny<DataRow>())).Returns(new MappedRow<object>(dataRow, anObject));
23+
24+
var repository = new DataRepository<object>(gateway.Object, mapper.Object);
25+
26+
var result = repository.FetchAllUsing(query.Object).ToList();
27+
28+
Assert.IsNotNull(result);
29+
Assert.AreEqual(1, result.Count);
30+
Assert.AreSame(anObject, result[0]);
31+
}
32+
33+
[Test]
34+
public void Should_be_able_to_fetch_a_single_item()
35+
{
36+
var gateway = new Mock<IDatabaseGateway>();
37+
var mapper = new Mock<IDataRowMapper<object>>();
38+
var query = new Mock<IQuery>();
39+
var dataRow = new DataTable().NewRow();
40+
var anObject = new object();
41+
42+
gateway.Setup(m => m.GetSingleRowUsing(query.Object)).Returns(dataRow);
43+
mapper.Setup(m => m.Map(It.IsAny<DataRow>())).Returns(new MappedRow<object>(dataRow, anObject));
44+
45+
var repository = new DataRepository<object>(gateway.Object, mapper.Object);
46+
47+
var result = repository.FetchItemUsing(query.Object);
48+
49+
Assert.IsNotNull(result);
50+
Assert.AreSame(anObject, result);
51+
}
52+
53+
[Test]
54+
public void Should_be_able_to_get_default_when_fetching_a_single_item_that_is_not_found()
55+
{
56+
var gateway = new Mock<IDatabaseGateway>();
57+
var query = new Mock<IQuery>();
58+
59+
gateway.Setup(m => m.GetSingleRowUsing(query.Object)).Returns((DataRow) null);
60+
61+
var repository = new DataRepository<object>(gateway.Object, new Mock<IDataRowMapper<object>>().Object);
62+
63+
var result = repository.FetchItemUsing(query.Object);
64+
65+
Assert.IsNull(result);
66+
}
67+
68+
[Test]
69+
public void Should_be_able_to_call_contains()
70+
{
71+
var gateway = new Mock<IDatabaseGateway>();
72+
var query = new Mock<IQuery>();
73+
74+
gateway.Setup(m => m.GetScalarUsing<int>(query.Object)).Returns(1);
75+
76+
var repository = new DataRepository<object>(gateway.Object, new Mock<IDataRowMapper<object>>().Object);
77+
78+
Assert.IsTrue(repository.Contains(query.Object));
79+
}
80+
81+
[Test]
82+
public void Should_be_able_to_fetch_mapped_rows()
83+
{
84+
var gateway = new Mock<IDatabaseGateway>();
85+
var mapper = new Mock<IDataRowMapper<object>>();
86+
var query = new Mock<IQuery>();
87+
var dataRow = new DataTable().NewRow();
88+
var anObject = new object();
89+
var mappedRow = new MappedRow<object>(dataRow, anObject);
90+
91+
gateway.Setup(m => m.GetRowsUsing(query.Object)).Returns(new List<DataRow> {dataRow});
92+
mapper.Setup(m => m.Map(It.IsAny<DataRow>())).Returns(mappedRow);
93+
94+
var repository = new DataRepository<object>(gateway.Object, mapper.Object);
95+
96+
var result = repository.FetchMappedRowsUsing(query.Object).ToList();
97+
98+
Assert.IsNotNull(result);
99+
Assert.AreEqual(1, result.Count);
100+
Assert.AreSame(dataRow, result[0].Row);
101+
Assert.AreSame(anObject, result[0].Result);
102+
}
103+
104+
[Test]
105+
public void Should_be_able_to_fetch_a_single_row()
106+
{
107+
var gateway = new Mock<IDatabaseGateway>();
108+
var mapper = new Mock<IDataRowMapper<object>>();
109+
var query = new Mock<IQuery>();
110+
var dataRow = new DataTable().NewRow();
111+
var anObject = new object();
112+
var mappedRow = new MappedRow<object>(dataRow, anObject);
113+
114+
gateway.Setup(m => m.GetSingleRowUsing(query.Object)).Returns(dataRow);
115+
mapper.Setup(m => m.Map(It.IsAny<DataRow>())).Returns(mappedRow);
116+
117+
var repository = new DataRepository<object>(gateway.Object, mapper.Object);
118+
119+
var result = repository.FetchMappedRowUsing(query.Object);
120+
121+
Assert.IsNotNull(result);
122+
Assert.AreSame(dataRow, result.Row);
123+
Assert.AreSame(anObject, result.Result);
124+
}
125+
}
126+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using NUnit.Framework;
2+
3+
namespace Shuttle.Core.Data.Tests
4+
{
5+
[TestFixture]
6+
public class DatabaseContextFactoryFixture : Fixture
7+
{
8+
[Test]
9+
public void Should_be_able_to_create_a_database_context()
10+
{
11+
using (var context = GetDefaultDatabaseContextFactory().Create(DefaultConnectionStringName))
12+
{
13+
Assert.IsNotNull(context);
14+
}
15+
}
16+
17+
private static IDatabaseContextFactory GetDefaultDatabaseContextFactory()
18+
{
19+
#if (!NETCOREAPP2_0 && !NETSTANDARD2_0)
20+
return DatabaseContextFactory.Default();
21+
#else
22+
return DatabaseContextFactory.Default(new DefaultDbProviderFactories());
23+
#endif
24+
}
25+
26+
[Test]
27+
public void Should_be_able_to_get_an_existing_database_context()
28+
{
29+
var factory = GetDefaultDatabaseContextFactory();
30+
31+
using (var context = factory.Create(DefaultConnectionStringName))
32+
using (var existingContext = factory.Create(DefaultConnectionStringName))
33+
{
34+
Assert.IsNotNull(context);
35+
Assert.IsNotNull(existingContext);
36+
37+
Assert.AreSame(existingContext.Connection, context.Connection);
38+
}
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)