Skip to content

Commit 772230f

Browse files
committed
Added tests around building data lists
1 parent f3b2ccd commit 772230f

File tree

5 files changed

+141
-1
lines changed

5 files changed

+141
-1
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System.Linq;
2+
using FizzWare.NBuilder;
3+
using NTestDataBuilder.Tests.Builders;
4+
using NTestDataBuilder.Tests.Entities;
5+
using NUnit.Framework;
6+
7+
namespace NTestDataBuilder.Tests
8+
{
9+
class BuildDataListTests
10+
{
11+
[Test]
12+
public void GivenListOfBuilders_WhenCallingBuildDataList_ThenAListOfEntitiesOfTheRightSizeShouldBeReturned()
13+
{
14+
var builders = BasicCustomerBuilder.CreateListOfSize(5);
15+
16+
var entities = builders.BuildDataList<Customer, BasicCustomerBuilder>();
17+
18+
Assert.That(entities, Has.Count.EqualTo(5));
19+
}
20+
21+
[Test]
22+
public void GivenListOfBuilders_WhenCallingBuildDataList_ThenAListOfEntitiesOfTheRightTypeShouldBeReturned()
23+
{
24+
var builders = BasicCustomerBuilder.CreateListOfSize(5);
25+
26+
var entities = builders.BuildDataList<Customer, BasicCustomerBuilder>();
27+
28+
Assert.That(entities, Has.All.With.TypeOf<Customer>());
29+
}
30+
31+
[Test]
32+
public void GivenListOfBuilders_WhenCallingBuildDataList_ThenAListOfUniqueEntitiesShouldBeReturned()
33+
{
34+
var builders = BasicCustomerBuilder.CreateListOfSize(5);
35+
36+
var entities = builders.BuildDataList<Customer, BasicCustomerBuilder>();
37+
38+
Assert.That(entities, Is.Unique);
39+
}
40+
41+
[Test]
42+
public void GivenListOfBuildersWithNoCustomisation_WhenCallingExtensionMethodToBuildList_ThenListOfTheRightSizeShouldBeReturned()
43+
{
44+
var builders = CustomerBuilder.CreateListOfSize(5);
45+
46+
var entities = builders.BuildDataList();
47+
48+
Assert.That(entities, Has.Count.EqualTo(5));
49+
}
50+
51+
[Test]
52+
public void GivenListOfBuildersWithNoCustomisation_WhenCallingExtensionMethodToBuildList_ThenListOfTheRightTypeShouldBeReturned()
53+
{
54+
var builders = CustomerBuilder.CreateListOfSize(5);
55+
56+
var entities = builders.BuildDataList();
57+
58+
Assert.That(entities, Has.All.TypeOf<Customer>());
59+
}
60+
61+
[Test]
62+
public void GivenListOfBuildersWithNoCustomisation_WhenCallingExtensionMethodToBuildList_ThenAListOfUniqueEntitiesShouldBeReturned()
63+
{
64+
var builders = CustomerBuilder.CreateListOfSize(5);
65+
66+
var entities = builders.BuildDataList();
67+
68+
Assert.That(entities, Is.Unique);
69+
}
70+
71+
[Test]
72+
public void GivenListOfBuildersWithCustomisation_WhenCallingExtensionMethodToBuildList_ThenTheCustomisationShouldTakeEffect()
73+
{
74+
var generator = new SequentialGenerator<int>();
75+
var list = CustomerBuilder.CreateListOfSize(3)
76+
.All().With(b => b.WithFirstName(generator.Generate().ToString()));
77+
78+
var data = list.BuildDataList();
79+
80+
Assert.That(data.Select(c => c.FirstName), Is.EqualTo(new[]{"0", "1", "2"}));
81+
}
82+
}
83+
}

NTestDataBuilder.Tests/Builders/CustomerBuilder.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
1-
using NTestDataBuilder.Tests.Entities;
1+
using System.Collections.Generic;
2+
using FizzWare.NBuilder;
3+
using NTestDataBuilder.Tests.Entities;
24

35
namespace NTestDataBuilder.Tests.Builders
46
{
7+
static class CustomerBuilderExtensions
8+
{
9+
public static IList<Customer> BuildDataList(this IOperable<CustomerBuilder> list)
10+
{
11+
return list.BuildDataList<Customer, CustomerBuilder>();
12+
}
13+
14+
public static IList<Customer> BuildDataList(this IListBuilder<CustomerBuilder> list)
15+
{
16+
return list.BuildDataList<Customer, CustomerBuilder>();
17+
}
18+
}
19+
520
class CustomerBuilder : DataBuilder<Customer, CustomerBuilder>
621
{
722
public CustomerBuilder()

NTestDataBuilder.Tests/NTestDataBuilder.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<Reference Include="Microsoft.CSharp" />
4444
</ItemGroup>
4545
<ItemGroup>
46+
<Compile Include="BuildDataListTests.cs" />
4647
<Compile Include="Builders\BasicCustomerBuilder.cs" />
4748
<Compile Include="Builders\CustomerBuilder.cs" />
4849
<Compile Include="BuildTests.cs" />
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using FizzWare.NBuilder;
4+
5+
namespace NTestDataBuilder
6+
{
7+
/// <summary>
8+
/// Extension methods against the <see cref="DataBuilder{TEntity,TBuilder}"/> class.
9+
/// </summary>
10+
public static class DataBuilderExtensions
11+
{
12+
/// <summary>
13+
/// Builds a list of entities given an NBuilder list expression of data builders.
14+
/// </summary>
15+
/// <typeparam name="TBuilder">The type of the builder being built using NBuilder</typeparam>
16+
/// <typeparam name="TEntity"></typeparam>
17+
/// <param name="builderList"></param>
18+
/// <returns></returns>
19+
public static IList<TEntity> BuildDataList<TEntity, TBuilder>(this IOperable<TBuilder> builderList)
20+
where TBuilder : IDataBuilder<TEntity>
21+
where TEntity : class
22+
{
23+
return builderList.Build().Select(b => b.Build()).ToList();
24+
}
25+
26+
/// <summary>
27+
///
28+
/// </summary>
29+
/// <typeparam name="TBuilder"></typeparam>
30+
/// <typeparam name="TEntity"></typeparam>
31+
/// <param name="builderList"></param>
32+
/// <returns></returns>
33+
public static IList<TEntity> BuildDataList<TEntity, TBuilder>(this IListBuilder<TBuilder> builderList)
34+
where TBuilder : IDataBuilder<TEntity>
35+
where TEntity : class
36+
{
37+
return builderList.All().BuildDataList<TEntity, TBuilder>();
38+
}
39+
}
40+
}

NTestDataBuilder/NTestDataBuilder.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
</ItemGroup>
4747
<ItemGroup>
4848
<Compile Include="DataBuilder.cs" />
49+
<Compile Include="DataBuilderExtensions.cs" />
4950
<Compile Include="Properties\AssemblyInfo.cs" />
5051
</ItemGroup>
5152
<ItemGroup>

0 commit comments

Comments
 (0)