Skip to content

Commit

Permalink
Add ThenWhenIt options for SUT actions without arrangements and SUT f…
Browse files Browse the repository at this point in the history
…unctions with arrangements
  • Loading branch information
JonnyOrman authored May 5, 2022
1 parent 91bc125 commit 003f1c9
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace XpressTest.Testing.UnitTests;

public class GivebANamedObjectSetter
public class GivenANamedObjectSetter
{
[Fact]
public void WhenItSetsANamedObjectThenItAddsTheNamedObjectToTheArrangement()
Expand Down
44 changes: 43 additions & 1 deletion Code/XpressTest.Testing.UnitTests/GivenAVoidAsserter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,28 @@ public void WhenItVerifiesASutArrangementActionThenItInvokesTheAction()
actionInvoked.Should().BeTrue();
}

[Fact]
public void WhenItVerifiesAnotherSutActionThenItInvokesTheActionAndReturnsTheVoidAsserter()
{
var actionInvoked = false;

Action<object> action = sutArrangement => { actionInvoked = true; };

var sutArrangement = Substitute.For<ISutArrangement<object>>();

var sut = new VoidAsserter<object>(
sutArrangement,
null,
null
);

var result = sut.ThenWhenIt(action);

actionInvoked.Should().BeTrue();

result.Should().Be(sut);
}

[Fact]
public void WhenItVerifiesAnotherSutArrangementActionThenItInvokesTheActionAndReturnsTheVoidAsserter()
{
Expand All @@ -123,7 +145,7 @@ public void WhenItVerifiesAnotherSutArrangementActionThenItInvokesTheActionAndRe
}

[Fact]
public void WhenItVerifiesAFuncThenItReturnsAResultAsserter()
public void WhenItVerifiesASutFuncThenItReturnsAResultAsserter()
{
Func<object, object> func = obj => new object();

Expand All @@ -141,6 +163,26 @@ public void WhenItVerifiesAFuncThenItReturnsAResultAsserter()

result.Should().BeOfType<ResultAsserter<object, object>>();
}

[Fact]
public void WhenItVerifiesASutArrangementFuncThenItReturnsAResultAsserter()
{
Func<ISutArrangement<object>, object> func = obj => new object();

var sutArrangement = Substitute.For<ISutArrangement<object>>();

var exceptionAsserter = Substitute.For<IExceptionAsserter>();

var sut = new VoidAsserter<object>(
sutArrangement,
null,
exceptionAsserter
);

var result = sut.ThenWhenIt(func);

result.Should().BeOfType<ResultAsserter<object, object>>();
}

[Fact]
public void WhenItVerifiesAnExceptionIsThrownThenItVerifiesTheExceptionIsThrown()
Expand Down
8 changes: 8 additions & 0 deletions Code/XpressTest/IThenWhenItAsserter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,19 @@ namespace XpressTest;

public interface IThenWhenItAsserter<TSut>
{
IVoidAsserter<TSut> ThenWhenIt(
Action<TSut> action
);

IVoidAsserter<TSut> ThenWhenIt(
Action<ISutArrangement<TSut>> action
);

IResultAsserter<TSut, TActionResult> ThenWhenIt<TActionResult>(
Func<TSut, TActionResult> func
);

IResultAsserter<TSut, TActionResult> ThenWhenIt<TActionResult>(
Func<ISutArrangement<TSut>, TActionResult> func
);
}
42 changes: 42 additions & 0 deletions Code/XpressTest/VoidAsserter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ Action<ISutArrangement<TSut>> action
action.Invoke(assertion);
}

public IVoidAsserter<TSut> ThenWhenIt(Action<TSut> action)
{
action.Invoke(_sutArrangement.Sut);

return this;
}

public IVoidAsserter<TSut> ThenWhenIt(Action<ISutArrangement<TSut>> action)
{
action.Invoke(_sutArrangement);
Expand Down Expand Up @@ -107,6 +114,41 @@ Func<TSut, TResult> func
);
}

public IResultAsserter<TSut, TResult> ThenWhenIt<TResult>(
Func<ISutArrangement<TSut>, TResult> func
)
{
var result = func.Invoke(_sutArrangement);

var resultPropertyTargeter = new ResultPropertyTargeter<TSut, TResult>(
result,
_sutArrangement
);

var mockCounterVerifierCreatorComposer =
new MockCountVerifierCreatorComposer<TSut, IResultAsserter<TSut, TResult>>(
_sutArrangement
);

var asyncMockCounterVerifierCreatorComposer =
new AsyncMockCounterVerifierCreatorComposer<TSut, IAsyncResultAsserter<TSut, TResult>>(
_sutArrangement
);

var resultMockVerifierCreator = new ResultMockVerifierCreator<TSut, TResult>(
mockCounterVerifierCreatorComposer,
asyncMockCounterVerifierCreatorComposer
);

return new ResultAsserter<TSut, TResult>(
result,
_sutArrangement,
resultPropertyTargeter,
resultMockVerifierCreator,
_exceptionAsserter
);
}

public void ThenItShouldThrow<TException>()
where TException : Exception
{
Expand Down
5 changes: 3 additions & 2 deletions Code/XpressTest/XpressTest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>1.0.0</Version>
<Version>1.1.0</Version>
<IsTestProject>false</IsTestProject>
<Authors>Jonathan Orman</Authors>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<ProjectUrl>https://github.com/JonnyOrman/XpressTest</ProjectUrl>
<PackageProjectUrl>https://github.com/JonnyOrman/XpressTest</PackageProjectUrl>
<PackageDescription>Write expressive, fluent BDD style unit tests in C# .NET</PackageDescription>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

Expand Down

0 comments on commit 003f1c9

Please sign in to comment.