Skip to content

Commit

Permalink
extended .tapAsync unit tests for exception propagation + refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
skrasekmichael committed Apr 3, 2024
1 parent 0f16875 commit 412369d
Show file tree
Hide file tree
Showing 65 changed files with 315 additions and 144 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Data;

public sealed record BasicError(string Key, string Message) : Error(Key, Message);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Data;

public sealed class BasicException : Exception
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Data;

public sealed class Callback
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Data;

public static class Errors
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Data;

public sealed record Obj(string? Value)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Extensions;

public static class ErrorExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests;
namespace RailwayResult.FunctionalExtensions.Tests.Extensions;

public static class ResultExtensions
{
Expand Down
12 changes: 6 additions & 6 deletions tests/RailwayResult.FunctionalExtensions.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

global using Xunit;

global using O = RailwayResult.FunctionalExtensions.Tests.Obj;
global using O = RailwayResult.FunctionalExtensions.Tests.Data.Obj;
global using RC = RailwayResult.Result<string?>;
global using R1 = RailwayResult.Result<RailwayResult.FunctionalExtensions.Tests.Obj>;
global using R1N = RailwayResult.Result<RailwayResult.FunctionalExtensions.Tests.Obj?>;
global using R2 = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Obj, RailwayResult.FunctionalExtensions.Tests.Obj)>;
global using R2N = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Obj?, RailwayResult.FunctionalExtensions.Tests.Obj?)>;
global using R3 = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Obj, RailwayResult.FunctionalExtensions.Tests.Obj, RailwayResult.FunctionalExtensions.Tests.Obj)>;
global using R1 = RailwayResult.Result<RailwayResult.FunctionalExtensions.Tests.Data.Obj>;
global using R1N = RailwayResult.Result<RailwayResult.FunctionalExtensions.Tests.Data.Obj?>;
global using R2 = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Data.Obj, RailwayResult.FunctionalExtensions.Tests.Data.Obj)>;
global using R2N = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Data.Obj?, RailwayResult.FunctionalExtensions.Tests.Data.Obj?)>;
global using R3 = RailwayResult.Result<(RailwayResult.FunctionalExtensions.Tests.Data.Obj, RailwayResult.FunctionalExtensions.Tests.Data.Obj, RailwayResult.FunctionalExtensions.Tests.Data.Obj)>;

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class AndTests : BaseTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class TheoryData_R1_And : TheoryData<Func<R1, R2>, R1, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
using RailwayResult.FunctionalExtensions.Tests.Data;
using RailwayResult.FunctionalExtensions.Tests.Extensions;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class TheoryData_R1_AndAsync : TheoryData<Func<R1, Task<R2>>, R1, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class TheoryData_R2_And : TheoryData<Func<R2, R3>, R2, R3?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class TheoryData_TaskOfR1_And : TheoryData<Func<Task<R1>, Task<R2>>, R1, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.AndTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.AndTests;

public sealed class TheoryData_TaskOfR2_And : TheoryData<Func<Task<R2>, Task<R3>>, R2, R3?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
namespace RailwayResult.FunctionalExtensions.Tests.TapTests;
using RailwayResult.FunctionalExtensions.Tests.Data;
using RailwayResult.FunctionalExtensions.Tests.Extensions;

namespace RailwayResult.FunctionalExtensions.Tests.Tests;

public abstract class BaseTapTests
{
protected Callback Callback { get; } = new();

protected void Verify(Func<Result, Callback, Result> method, Result input, Result? expectedOutput, bool wasCallbackCalled)
protected void Verify(Func<Result, Callback, Result> method, Result input, Result? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
Expand All @@ -15,22 +18,11 @@ protected void Verify(Func<Result, Callback, Result> method, Result input, Resul
{
method.Invoke(input, Callback).ShouldBe(expectedOutput);
}
}

protected void Verify<T1, T2>(Func<T1, Callback, Result<T2>> method, T1 input, Result<T2>? expectedOutput, bool wasCallbackCalled)
{
if (expectedOutput is null)
{
var accessor = () => method.Invoke(input, Callback);
accessor.Should().ThrowExactly<BasicException>();
}
else
{
method.Invoke(input, Callback).ShouldBe(expectedOutput);
}
Callback.WasCalled.Should().Be(wasCallbackInvoked);
}

protected void Verify<T1, T2>(Func<Result<T1>, Callback, Result<T2>> method, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackCalled)
protected void Verify<T1, T2>(Func<Result<T1>, Callback, Result<T2>> method, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
Expand All @@ -41,23 +33,27 @@ protected void Verify<T1, T2>(Func<Result<T1>, Callback, Result<T2>> method, Res
{
method.Invoke(input, Callback).ShouldBe(expectedOutput);
}

Callback.WasCalled.Should().Be(wasCallbackInvoked);
}

protected async Task VerifyAsync(Func<Task<Result>, Callback, Task<Result>> asyncMethod, Result input, Result? expectedOutput, bool wasCallbackCalled)
protected async Task VerifyAsync(Func<Result, Callback, Task<Result>> asyncMethod, Result input, Result? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
var accessor = async () => await asyncMethod.Invoke(Task.FromResult(input), Callback);
var accessor = async () => await asyncMethod.Invoke(input, Callback);
await accessor.Should().ThrowExactlyAsync<BasicException>();
}
else
{
var result = await asyncMethod.Invoke(Task.FromResult(input), Callback);
var result = await asyncMethod.Invoke(input, Callback);
result.ShouldBe(expectedOutput);
}

Callback.WasCalled.Should().Be(wasCallbackInvoked);
}

protected async Task VerifyAsync<T1, T2>(Func<Task<T1>, Callback, Task<Result<T2>>> asyncMethod, T1 input, Result<T2>? expectedOutput, bool wasCallbackCalled)
protected async Task VerifyAsync(Func<Task<Result>, Callback, Task<Result>> asyncMethod, Result input, Result? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
Expand All @@ -69,9 +65,11 @@ protected async Task VerifyAsync<T1, T2>(Func<Task<T1>, Callback, Task<Result<T2
var result = await asyncMethod.Invoke(Task.FromResult(input), Callback);
result.ShouldBe(expectedOutput);
}

Callback.WasCalled.Should().Be(wasCallbackInvoked);
}

protected async Task VerifyAsync<T1, T2>(Func<Task<Result<T1>>, Callback, Task<Result<T2>>> asyncMethod, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackCalled)
protected async Task VerifyAsync<T1, T2>(Func<Task<Result<T1>>, Callback, Task<Result<T2>>> asyncMethod, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
Expand All @@ -83,23 +81,11 @@ protected async Task VerifyAsync<T1, T2>(Func<Task<Result<T1>>, Callback, Task<R
var result = await asyncMethod.Invoke(Task.FromResult(input), Callback);
result.ShouldBe(expectedOutput);
}
}

protected async Task VerifyAsync<T>(Func<Result<T>, Callback, Task<Result>> asyncMethod, Result<T> input, Result? expectedOutput, bool wasCallbackCalled)
{
if (expectedOutput is null)
{
var accessor = async () => await asyncMethod.Invoke(input, Callback);
await accessor.Should().ThrowExactlyAsync<BasicException>();
}
else
{
var result = await asyncMethod.Invoke(input, Callback);
result.ShouldBe(expectedOutput);
}
Callback.WasCalled.Should().Be(wasCallbackInvoked);
}

protected async Task VerifyAsync<T1, T2>(Func<Result<T1>, Callback, Task<Result<T2>>> asyncMethod, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackCalled)
protected async Task VerifyAsync<T1, T2>(Func<Result<T1>, Callback, Task<Result<T2>>> asyncMethod, Result<T1> input, Result<T2>? expectedOutput, bool wasCallbackInvoked)
{
if (expectedOutput is null)
{
Expand All @@ -111,5 +97,7 @@ protected async Task VerifyAsync<T1, T2>(Func<Result<T1>, Callback, Task<Result<
var result = await asyncMethod.Invoke(input, Callback);
result.ShouldBe(expectedOutput);
}

Callback.WasCalled.Should().Be(wasCallbackInvoked);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
namespace RailwayResult.FunctionalExtensions.Tests;
using RailwayResult.FunctionalExtensions.Tests.Data;
using RailwayResult.FunctionalExtensions.Tests.Extensions;

namespace RailwayResult.FunctionalExtensions.Tests.Tests;

public abstract class BaseTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using RailwayResult.FunctionalExtensions.Tests.EnsureTests;

namespace RailwayResult.FunctionalExtensions.Tests.EnsureNotNullTests;
namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class EnsureNotNullTests : BaseTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_Obj_EnsureNotNull : TheoryData<Func<O?, R1>, O?, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_R1_EnsureNotNull : TheoryData<Func<R1N, R1>, R1N, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_R2_EnsureNotNull : TheoryData<Func<R2N, R2>, R2N, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_TaskOfObj_EnsureNotNull : TheoryData<Func<Task<O?>, Task<R1>>, O?, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_TaskOfR1_EnsureNotNull : TheoryData<Func<Task<R1N>, Task<R1>>, R1N, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureNotNullTests;

public sealed class TheoryData_TaskOfR2_EnsureNotNull : TheoryData<Func<Task<R2N>, Task<R2>>, R2N, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class EnsureTests : BaseTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public static class Rules
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_Obj_Ensure : TheoryData<Func<O, R1>, O, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_R1_Ensure : TheoryData<Func<R1, R1>, R1, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_R2_Ensure : TheoryData<Func<R2, R2>, R2, R2?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_TaskOfObj_Ensure : TheoryData<Func<Task<O>, Task<R1>>, O, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_TaskOfR1_Ensure : TheoryData<Func<Task<R1>, Task<R1>>, R1, R1?>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RailwayResult.FunctionalExtensions.Tests.EnsureTests;
using RailwayResult.FunctionalExtensions.Tests.Data;

namespace RailwayResult.FunctionalExtensions.Tests.Tests.EnsureTests;

public sealed class TheoryData_TaskOfR2_Ensure : TheoryData<Func<Task<R2>, Task<R2>>, R2, R2?>
{
Expand Down
Loading

0 comments on commit 412369d

Please sign in to comment.