added missing Append extensions
All checks were successful
.NET Test / test (push) Successful in 3m18s
.NET Publish / publish (push) Successful in 3m28s

This commit is contained in:
2023-12-12 19:02:11 +04:00
parent 9ae185342b
commit b8ea74ec5b
6 changed files with 299 additions and 88 deletions

View File

@@ -2,80 +2,6 @@ namespace Raliway.Tests.Results;
public class GeneralUsage
{
[Fact]
public void TwoResultCombination_WhenThereIsAnError()
{
// Given
var result1 = Result.Success(1);
var result2 = Result.Failure(Error.New("some error"));
// When
var result = Result.Combine(result1, result2);
// Then
Assert.True(result.IsFailure);
Assert.Equal(result2.Error, result.Error);
}
[Fact]
public void TwoResultCombination_WhenThereAreTwoErrors()
{
// Given
var result1 = Result.Failure<byte>(Error.New("1"));
var result2 = Result.Failure(Error.New("2"));
// When
var result = Result.Combine(result1, result2);
// Then
Assert.True(result.IsFailure);
Assert.Equal(result1.Error + result2.Error, result.Error);
}
[Fact]
public void TwoResultCombination_WhenThereIsNoError()
{
// Given
var result1 = Result.Success(1);
var result2 = Result.Success(3.14);
// When
var result = Result.Combine(result1, result2);
// Then
Assert.True(result.IsSuccess);
}
[Fact]
public void ThreeResultCombination_WhenThereIsAnError()
{
// Given
var result1 = Result.Success(1);
var result2 = Result.Success(3.14);
var result3 = Result.Failure(Error.New("some error"));
// When
Result<(int, double)> result = Result.Combine(result1, result2, result3);
// Then
Assert.True(result.IsFailure);
Assert.Equal(result3.Error, result.Error);
}
[Fact]
public void ThreeResultCombination_WhenThereAreTwoErrors()
{
// Given
var result1 = Result.Failure<int?>(Error.New("1"));
var result2 = Result.Success(3.14);
var result3 = Result.Failure(Error.New("3"));
// When
Result<(int?, double)> result = Result.Combine(result1, result2, result3);
// Then
Assert.True(result.IsFailure);
Assert.Equal(result1.Error + result3.Error, result.Error);
}
[Fact]
public void ThreeResultCombination_WhenThereIsNoError()
{
// Given
var result1 = Result.Success(1);
var result2 = Result.Success(3.14);
var result3 = Result.Success();
// When
var result = Result.Combine(result1, result2, result3);
// Then
Assert.True(result.IsSuccess);
}
[Fact]
public void ChainedResultExtensions_WhenThereIsNoError()
{
@@ -104,10 +30,9 @@ public class GeneralUsage
public void ChainedResultExtensions_WhenThereIsAnError()
{
// Given
var error = Error.New("test");
// When
var error = Error.New("test");
var result = Result.Success()
.Append(() => Result.Failure<int>(error))
@@ -115,7 +40,7 @@ public class GeneralUsage
.Map((i, s) =>
{
Assert.Fail();
return Result.Success("");
return "";
})
.Append("some")
.Bind((s1, s2) =>
@@ -139,4 +64,68 @@ public class GeneralUsage
// Then
Assert.Equal("satisfied", result);
}
[Fact]
public async Task ChainedResultAsyncExtensions_WhenThereIsNoError()
{
// Given
// When
var result = await Result.Success()
.Append(() => ValueTask.FromResult(Result.Success(1)))
.Append("test")
.Map((i, s) => $"{s}_{i}")
.Append("some")
.Bind(async (s1, s2) => await ValueTask.FromResult(Result.Success(string.Join(';', s1, s2))))
.Match(
onSuccess: s => s.ToUpper(),
onFailure: _ =>
{
Assert.Fail();
return "";
}
);
Assert.Equal("TEST_1;SOME", result);
}
[Fact]
public async Task ChainedResultAsyncExtensions_WhenThereIsAnError()
{
// Given
var error = Error.New("test");
// When
var result = await Result.Success()
.Append(() => Task.FromResult(Result.Failure<int>(error)))
.Append("test")
.Map((i, s) =>
{
Assert.Fail();
return "";
})
.Append("some")
.Bind(async (s1, s2) =>
{
Assert.Fail();
await Task.CompletedTask;
return Result.Success("");
})
.Match(
onSuccess: _ =>
{
Assert.Fail();
return "";
},
onFailure: err =>
{
Assert.Equal(error, err);
return "satisfied";
}
);
// Then
Assert.Equal("satisfied", result);
}
}