Skip to content

Commit b98da1b

Browse files
committed
Merge pull request #15 from robdmoore/enumequivclasses-sharedlistanonfixtures-defaultnamesuppliers
v2 additions
2 parents 8959bd4 + d7cf362 commit b98da1b

23 files changed

+229
-13
lines changed

BREAKING_CHANGES.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ If you want to fix a static value for a property then by all means you can still
1919
Version 2.0.0
2020
-------------
2121

22-
The way that lists are generated no longer uses NBuilder - the new syntax is backwards compatible with NBuilder except that the namespace you need to include is different. You can also refactor your list generation to be a lot more terse, but that is optional. Any `BuildList` extension methods you created will now need to be deleted since they are no longer needed.
22+
The way that lists are generated no longer uses NBuilder - the new syntax is backwards compatible with NBuilder except that the namespace you need to include is different. You can also refactor your list generation to be a lot more terse, but that is optional. Any `BuildList` extension methods you created will now need to be deleted since they are no longer needed. You also need to ensure that all of the methods you call are marked virtual so the list generation can proxy those method calls.
2323

2424
### Reason
2525
In order to support a new, much terser syntax for generating lists we rewrote the list generation code ourselves. You can now do this:
@@ -44,7 +44,7 @@ You also no longer need a custom extension method for the `BuildList` method so
4444

4545
### Fix
4646

47-
Simply add the following to the files that generate lists of builders and the existing syntax should work:
47+
Simply add the following to the files that generate lists of builders and change your builder modification methods to be virtual and the existing syntax should work:
4848

4949
```
5050
using NTestDataBuilder.Lists;

NTestDataBuilder.Tests/BuildListTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,17 @@ public void GivenListOfBuildersWithARangeOfCustomisationMethods_WhenBuildingEnti
8484
customers[4].LastName.ShouldBe("Last Last");
8585
customers.ShouldAllBe(c => c.YearJoined == 1999);
8686
}
87+
88+
[Fact]
89+
public void WhenBuildingEntities_ThenTheAnonymousValueFixtureIsSharedAcrossBuilders()
90+
{
91+
var customers = CustomerBuilder.CreateListOfSize(5).BuildList();
92+
93+
customers[0].CustomerClass.ShouldBe(CustomerClass.Normal);
94+
customers[1].CustomerClass.ShouldBe(CustomerClass.Bronze);
95+
customers[2].CustomerClass.ShouldBe(CustomerClass.Silver);
96+
customers[3].CustomerClass.ShouldBe(CustomerClass.Gold);
97+
customers[4].CustomerClass.ShouldBe(CustomerClass.Platinum);
98+
}
8799
}
88100
}

NTestDataBuilder.Tests/Builders/BasicCustomerBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class BasicCustomerBuilder : TestDataBuilder<Customer, BasicCustomerBuild
88
{
99
protected override Customer BuildObject()
1010
{
11-
return new Customer("First Name", "Last Name", 2013);
11+
return new Customer("customer1", "First Name", "Last Name", 2013, CustomerClass.Normal);
1212
}
1313

1414
public new BasicCustomerBuilder Set<TValue>(Expression<Func<Customer, TValue>> property, TValue value)

NTestDataBuilder.Tests/Builders/CustomerBuilder.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ public virtual CustomerBuilder WhoJoinedIn(int yearJoined)
2222
protected override Customer BuildObject()
2323
{
2424
return new Customer(
25+
Get(x => x.Identifier),
2526
Get(x => x.FirstName),
2627
Get(x => x.LastName),
27-
Get(x => x.YearJoined)
28+
Get(x => x.YearJoined),
29+
Get(x => x.CustomerClass)
2830
);
2931
}
3032
}

NTestDataBuilder.Tests/Entities/Customer.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,20 @@ public class Customer
66
{
77
protected Customer() {}
88

9-
public Customer(string firstName, string lastName, int yearJoined)
9+
public Customer(string identifier, string firstName, string lastName, int yearJoined, CustomerClass customerClass)
1010
{
11+
if (string.IsNullOrEmpty(identifier))
12+
throw new ArgumentNullException("identifier");
1113
if (string.IsNullOrEmpty(firstName))
1214
throw new ArgumentNullException("firstName");
1315
if (string.IsNullOrEmpty(lastName))
1416
throw new ArgumentNullException("lastName");
1517

18+
Identifier = identifier;
1619
FirstName = firstName;
1720
LastName = lastName;
1821
YearJoined = yearJoined;
22+
CustomerClass = customerClass;
1923
}
2024

2125
public virtual int CustomerForHowManyYears(DateTime since)
@@ -25,8 +29,10 @@ public virtual int CustomerForHowManyYears(DateTime since)
2529
return since.Year - YearJoined;
2630
}
2731

32+
public virtual string Identifier { get; private set; }
2833
public virtual string FirstName { get; private set; }
2934
public virtual string LastName { get; private set; }
3035
public virtual int YearJoined { get; private set; }
36+
public virtual CustomerClass CustomerClass { get; private set; }
3137
}
3238
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace NTestDataBuilder.Tests.Entities
2+
{
3+
public enum CustomerClass
4+
{
5+
Normal,
6+
Bronze,
7+
Silver,
8+
Gold,
9+
Platinum
10+
}
11+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using NTestDataBuilder.EquivalenceClasses;
2+
using Shouldly;
3+
using Xunit;
4+
5+
namespace NTestDataBuilder.Tests.EquivalenceClasses
6+
{
7+
public class EnumEquivalenceClassesTests
8+
{
9+
public AnonymousValueFixture Any { get; private set; }
10+
11+
public EnumEquivalenceClassesTests()
12+
{
13+
Any = new AnonymousValueFixture();
14+
}
15+
16+
[Fact]
17+
public void WhenGettingAnyOfEnum_ThenReturnSequentialEnumValueEveryTimeUntilItWrapsAroundAgain()
18+
{
19+
var values = new[]
20+
{
21+
Any.Of<TestEnum>(),
22+
Any.Of<TestEnum>(),
23+
Any.Of<TestEnum>(),
24+
Any.Of<TestEnum>(),
25+
Any.Of<TestEnum>()
26+
};
27+
28+
values.ShouldBe(new []{TestEnum.One, TestEnum.Two, TestEnum.Three, TestEnum.Four, TestEnum.One});
29+
}
30+
31+
[Fact]
32+
public void WhenGettingAnyEnumExceptOneValue_ThenReturnSequentialEnumValueExceptTheExceptionEveryTimeUntilItWrapsAroundAgain()
33+
{
34+
var values = new[]
35+
{
36+
Any.Except(TestEnum.Two),
37+
Any.Except(TestEnum.Two),
38+
Any.Except(TestEnum.Two),
39+
Any.Except(TestEnum.Two)
40+
};
41+
42+
values.ShouldBe(new[] { TestEnum.One, TestEnum.Three, TestEnum.Four, TestEnum.One });
43+
}
44+
}
45+
46+
enum TestEnum
47+
{
48+
One,
49+
Two,
50+
Three,
51+
Four
52+
}
53+
}

NTestDataBuilder.Tests/EquivalenceClasses/DictionaryEquivalenceClassesTests.cs renamed to NTestDataBuilder.Tests/EquivalenceClasses/PersonEquivalenceClassesTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
namespace NTestDataBuilder.Tests.EquivalenceClasses
1212
{
13-
public class DictionaryEquivalenceClassesTests
13+
public class PersonEquivalenceClassesTests
1414
{
1515
public static AnonymousValueFixture Any { get; private set; }
1616

17-
public DictionaryEquivalenceClassesTests()
17+
public PersonEquivalenceClassesTests()
1818
{
1919
Any = new AnonymousValueFixture();
2020
}

NTestDataBuilder.Tests/GetAnonymousTests.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NTestDataBuilder.Lists;
1+
using NTestDataBuilder.DataSources.Person;
2+
using NTestDataBuilder.Lists;
23
using NTestDataBuilder.Tests.Builders;
34
using NTestDataBuilder.Tests.TestHelpers;
45
using Shouldly;
@@ -48,10 +49,28 @@ public void GivenNoValueHasBeenSetForAPropertyAndAGlobalSupplierHasBeenRegistere
4849
_b.Get(x => x.FirstName).ShouldBe(globalVal);
4950
}
5051

52+
[Fact]
53+
public void GivenNoValueHasBeenSetForAPropertyNamedFirstName_WhenRetrievingTheValueForTheProperty_ThenReturnAFirstName()
54+
{
55+
var firstName = _b.Get(x => x.FirstName);
56+
57+
new PersonNameFirstSource().Data
58+
.ShouldContain(firstName);
59+
}
60+
61+
[Fact]
62+
public void GivenNoValueHasBeenSetForAPropertyNamedLastName_WhenRetrievingTheValueForTheProperty_ThenReturnALastName()
63+
{
64+
var lastName = _b.Get(x => x.LastName);
65+
66+
new PersonNameLastSource().Data
67+
.ShouldContain(lastName);
68+
}
69+
5170
[Fact]
5271
public void GivenNoValueHasBeenSetForAStringProperty_WhenRetrievingTheValueForThatProperty_ThenReturnPropertyNameFollowedByGuid()
5372
{
54-
_b.Get(x => x.FirstName).ShouldMatch("^FirstName[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$");
73+
_b.Get(x => x.Identifier).ShouldMatch("^Identifier[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$");
5574
}
5675

5776
[Fact]

NTestDataBuilder.Tests/NTestDataBuilder.Tests.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
</Reference>
5050
</ItemGroup>
5151
<ItemGroup>
52+
<Compile Include="Entities\CustomerClass.cs" />
5253
<Compile Include="DataSources\DataSourceTests.cs" />
5354
<Compile Include="DataSources\Dictionaries\CacheTests.cs" />
5455
<Compile Include="DataSources\Dictionaries\FileDictionaryRepositoryIntegrationTests.cs" />
@@ -57,8 +58,9 @@
5758
<Compile Include="DataSources\Generators\RandomGeneratorTests.cs" />
5859
<Compile Include="DataSources\Generators\SequentiaGeneratorTests.cs" />
5960
<Compile Include="DataSources\DataSourceConventionTests.cs" />
60-
<Compile Include="EquivalenceClasses\DictionaryEquivalenceClassesTests.cs" />
61+
<Compile Include="EquivalenceClasses\PersonEquivalenceClassesTests.cs" />
6162
<Compile Include="EquivalenceClasses\IntegerEquivalenceClassesTests.cs" />
63+
<Compile Include="EquivalenceClasses\EnumEquivalenceClassesTests.cs" />
6264
<Compile Include="EquivalenceClasses\StringEquivalenceClassesTests.cs" />
6365
<Compile Include="AsProxyTests.cs" />
6466
<Compile Include="BuildListTests.cs" />

0 commit comments

Comments
 (0)