Skip to content

Commit

Permalink
v1.0.0-alpha.14 - improve step chaining, refactor to improvve some co…
Browse files Browse the repository at this point in the history
…de reuse
  • Loading branch information
JonnyOrman committed Apr 11, 2022
1 parent faa169b commit f1f4982
Show file tree
Hide file tree
Showing 240 changed files with 3,782 additions and 4,215 deletions.
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Each test has its own state that allows you to register variables during arrange
public void CreateEntity() =>
GivenA<Creator>
.AndGiven(new EntityParameters("EntityName"))
.WhenIt(action => action.Sut.Create(action.GetThe<EntityParameters>()))
.WhenIt(arrangement => arrangement.Sut.Create(arrangement.GetThe<EntityParameters>()))
.ThenTheResult(result => result.Id).ShouldBe(1)
.ThenTheResult(result => result.Name).ShouldBe("EntityName");
```
Expand All @@ -36,7 +36,7 @@ public void CreateEntity() =>
GivenA<Creator>
.AndGiven(new EntityParameters("EntityName"), "ParametersToUse")
.AndGiven(new EntityParameters("AnotherEntityName"), "SomeOtherParameters")
.WhenIt(action => action.Sut.Create(action.GetObject<EntityParameters>("ParametersToUse")))
.WhenIt(arrangement => arrangement.Sut.Create(arrangement.GetThe<EntityParameters>("ParametersToUse")))
.ThenTheResult(result => result.Id).ShouldBe(1)
.ThenTheResult(result => result.Name).ShouldBe("EntityName");
```
Expand All @@ -54,11 +54,11 @@ public void ProcessValidParameters() =>
.WithA<ICreator>()
.ThatDoes<Entity>(arrangement => creator => creator.Create(arrangement.GetThe<EntityParameters>()))
.AndReturns(arrangement => arrangement.GetThe<Entity>())
.WhenIt(action => action.Sut.Process(action.GetThe<EntityParameters>()))
.Then<IValidator>()
.WhenIt(arrangement => arrangement.Sut.Process(arrangement.GetThe<EntityParameters>()))
.ThenThe<IValidator>()
.Should<bool>(arrangement => validator => validator.IsValid(arrangement.GetThe<EntityParameters>()))
.Once()
.Then<ICreator>()
.ThenThe<ICreator>()
.Should<Entity>(arrangement => creator => creator.Create(arrangement.GetThe<EntityParameters>()))
.Once()
.ThenTheResultShouldBe(arrangement => arrangement.GetThe<Entity>());
Expand All @@ -70,5 +70,5 @@ See the [XpressTest.Examples](https://github.com/JonnyOrman/XpressTest/tree/main

Install by running the following:
```
dotnet add package XpressTest --version 1.0.0-alpha.13
dotnet add package XpressTest --version 1.0.0-alpha.14
```
9 changes: 8 additions & 1 deletion XpressTest.Examples/Src/Builder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace XpressTest.Examples.Src;

public class Builder
public class Builder : IBuilder
{
private readonly ICollection<IBuilderItem> _builderItems;

Expand All @@ -16,6 +16,13 @@ public void Add(IBuilderItem builderItem)
{
_builderItems.Add(builderItem);
}

public IBuilder AddAndReturn(IBuilderItem builderItem)
{
_builderItems.Add(builderItem);

return this;
}

public string Build()
{
Expand Down
10 changes: 10 additions & 0 deletions XpressTest.Examples/Src/IBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace XpressTest.Examples.Src;

public interface IBuilder
{
void Add(IBuilderItem builderItem);

IBuilder AddAndReturn(IBuilderItem builderItem);

string Build();
}
197 changes: 132 additions & 65 deletions XpressTest.Examples/Tests/BuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ public void BuildItems_Example1() =>
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

Expand All @@ -29,102 +29,169 @@ public void BuildItems_Example2() =>
.AndGivenA<IBuilderItem>("BuilderItem3")
.ThatDoes(builderItem => builderItem.GetValue())
.AndReturns("c")
.WhenIt(action => action.Sut.Add(action.GetMockObject<IBuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetMockObject<IBuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetMockObject<IBuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetTheMockObject<IBuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetTheMockObject<IBuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetTheMockObject<IBuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

[Fact]
public void BuildItems_Example3() =>
GivenA<Builder>
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBeA<string>();

[Fact]
public void BuildItems_Example4() =>
GivenA<Builder>
.AndGiven(new BuilderItem("a"))
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetThe<BuilderItem>()))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.AndGiven(new BuilderItem("a"))
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>()))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBeA<string>();

[Fact]
public void BuildItems_Example5() =>
GivenA<Builder>
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"))
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetThe<BuilderItem>()))
.ThenWhenIt(sut => sut.Build())
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"), "BuilderItem2")
.AndGiven(new BuilderItem("c"))
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>()))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBeA<string>();

[Fact]
public void BuildItems_Example6() =>
GivenA<Builder>
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"))
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetThe<BuilderItem>()))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.AndGiven(new BuilderItem("a"), "BuilderItem1")
.AndGiven(new BuilderItem("b"))
.AndGiven(new BuilderItem("c"), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>()))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBeA<string>();

[Fact]
public void BuildItems_Example7() =>
GivenA<Builder>
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string3")), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string3")), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

[Fact]
public void BuildItems_Example8() =>
GivenA<Builder>
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string1")))
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string3")), "BuilderItem3")
.WhenIt(action => action.Sut.Add(action.GetThe<BuilderItem>()))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string1")))
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string3")), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>()))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

[Fact]
public void BuildItems_Example9() =>
GivenA<Builder>
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetObject<string>("string3")))
.WhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem1")))
.ThenWhenIt(action => action.Sut.Add(action.GetObject<BuilderItem>("BuilderItem2")))
.ThenWhenIt(action => action.Sut.Add(action.GetThe<BuilderItem>()))
.ThenWhenIt(sut => sut.Build())
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string3")))
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>()))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");


[Fact]
public void BuildItems_Example10() =>
GivenA<Builder>
.AndGiven("a")
.AndGiven("b", "string2")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>()), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string3")), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");


[Fact]
public void BuildItems_Example11() =>
GivenA<Builder>
.AndGiven("a", "string1")
.AndGiven("b", "string2")
.AndGiven("c")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string2")), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>()), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

[Fact]
public void BuildItems_Example12() =>
GivenA<Builder>
.AndGiven("a", "string1")
.AndGiven("b")
.AndGiven("c", "string3")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string1")), "BuilderItem1")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>()), "BuilderItem2")
.AndGiven(arrangement => new BuilderItem(arrangement.GetThe<string>("string3")), "BuilderItem3")
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem1")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem2")))
.ThenWhenIt(arrangement => arrangement.Sut.Add(arrangement.GetThe<BuilderItem>("BuilderItem3")))
.ThenWhenIt(sut => sut.Build())
.ThenTheResultShouldBe("abc");

[Fact]
public void AddItemAndReturn_Example1() =>
GivenA<Builder>
.AndGivenA<IBuilderItem>()
.WhenIt(arrangement => arrangement.Sut.AddAndReturn(arrangement.GetTheMockObject<IBuilderItem>()))
.ThenTheResultShouldBe(arrangement => arrangement.Sut);

[Fact]
public void AddItemAndReturn_Example2() =>
GivenA<Builder>
.AndGivenA<IBuilderItem>()
.WhenIt<IBuilder>(arrangement => sut => sut.AddAndReturn(arrangement.GetTheMockObject<IBuilderItem>()))
.ThenTheResultShouldBe(arrangement => arrangement.Sut);

[Fact]
public void AddItem() =>
GivenA<Builder>
.AndGivenA<IBuilderItem>()
.WhenIt(arrangement => arrangement.Sut.Add(arrangement.GetTheMockObject<IBuilderItem>()));
}
10 changes: 7 additions & 3 deletions XpressTest.Examples/Tests/CalculatorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ public void MultiplyNumbers_Example4() =>
GivenA<Calculator>
.AndGiven(3, "Value1")
.AndGiven(2, "Value2")
.WhenIt<int>(arrangement => calculator => calculator.Multiply(arrangement.GetObject<int>("Value1"), arrangement.GetObject<int>("Value2")))
.WhenIt<int>(arrangement => calculator => calculator.Multiply(
arrangement.GetThe<int>("Value1"),
arrangement.GetThe<int>("Value2")))
.ThenTheResultShouldBe(6);

[Fact]
Expand All @@ -41,8 +43,10 @@ public void MultiplyNumbers_Example5() =>
.AndGiven(3, "Value1")
.AndGiven(2, "Value2")
.AndGiven(6, "ExpectedResult")
.WhenIt<int>(arrangement => calculator => calculator.Multiply(arrangement.GetObject<int>("Value1"), arrangement.GetObject<int>("Value2")))
.ThenTheResultShouldBe(arrangement => arrangement.GetObject<int>("ExpectedResult"));
.WhenIt<int>(arrangement => calculator => calculator.Multiply(
arrangement.GetThe<int>("Value1"),
arrangement.GetThe<int>("Value2")))
.ThenTheResultShouldBe(arrangement => arrangement.GetThe<int>("ExpectedResult"));

[Fact]
public void DivideNumbers() =>
Expand Down
Loading

0 comments on commit f1f4982

Please sign in to comment.