added main classes
This commit is contained in:
55
Raliway.Tests/EnsureExtensions/Satisfy.cs
Normal file
55
Raliway.Tests/EnsureExtensions/Satisfy.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
namespace Raliway.Tests.EnsureExtensions;
|
||||
|
||||
public class Satisfy
|
||||
{
|
||||
[Fact]
|
||||
public void WhenRequirementWasSatisfied_ShouldBeSuccessful()
|
||||
{
|
||||
var result = Ensure.That(69)
|
||||
.Satisfies(i => i < 100)
|
||||
.Result();
|
||||
|
||||
Assert.True(result.IsSuccess);
|
||||
Assert.Equal(69, result.Value);
|
||||
}
|
||||
[Fact]
|
||||
public void WhenRequirementWasNotSatisfied_ShouldBeFailureWithDefaultError()
|
||||
{
|
||||
var error = Error.New(Ensure.DefaultErrorType, "Value {69} does not satisfy the requirement.");
|
||||
var result = Ensure.That(69)
|
||||
.Satisfies(i => i > 100)
|
||||
.Result();
|
||||
|
||||
Assert.True(result.IsFailure);
|
||||
Assert.Equal(error, result.Error);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenAllRequirementsWasSatisfied_ShouldBeSuccessful()
|
||||
{
|
||||
var result = Ensure.That<string?>("69")
|
||||
.NotNull()
|
||||
.NotEmpty()
|
||||
.NotWhitespace()
|
||||
.Satisfies(s => s == "69")
|
||||
.Result();
|
||||
|
||||
Assert.True(result.IsSuccess);
|
||||
Assert.Equal("69", result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenAnyRequirementWasNotSatisfied_ShouldBeFailureWithFirstError()
|
||||
{
|
||||
var error = Error.New(Ensure.DefaultErrorType, "Value {(string?)\" \"} is empty or consists exclusively of white-space characters.");
|
||||
var result = Ensure.That((string?)" ")
|
||||
.NotNull()
|
||||
.NotEmpty()
|
||||
.NotWhitespace()
|
||||
.Satisfies(s => s == "69")
|
||||
.Result();
|
||||
|
||||
Assert.True(result.IsFailure);
|
||||
Assert.Equal(error, result.Error);
|
||||
}
|
||||
}
|
||||
45
Raliway.Tests/Errors/Serialization.cs
Normal file
45
Raliway.Tests/Errors/Serialization.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
namespace Railway.Tests.Errors;
|
||||
|
||||
public class Serialization
|
||||
{
|
||||
[Fact]
|
||||
public void WhenSerializingManyErrors()
|
||||
{
|
||||
// Given
|
||||
Error many_errors = new ManyErrors(new Error[]{
|
||||
new ExpectedError("err1", "msg1"){
|
||||
ExtensionData = {
|
||||
["ext"] = "ext_value"
|
||||
}
|
||||
},
|
||||
new ExceptionalError(new Exception("msg2")),
|
||||
});
|
||||
// When
|
||||
var result = JsonSerializer.Serialize(many_errors);
|
||||
// Then
|
||||
Assert.Equal(
|
||||
expected: "[{\"$$err\":0,\"Type\":\"err1\",\"Message\":\"msg1\",\"ext\":\"ext_value\"},{\"$$err\":1,\"Type\":\"Exception\",\"Message\":\"msg2\"}]",
|
||||
result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WhenDeserializingManyErrors()
|
||||
{
|
||||
// Given
|
||||
var json = "[{\"$$err\":0,\"Type\":\"err1\",\"Message\":\"msg1\",\"ext\":\"ext_value\"},{\"$$err\":1,\"Type\":\"Exception\",\"Message\":\"msg2\"}]";
|
||||
// When
|
||||
var result = JsonSerializer.Deserialize<Error[]>(json);
|
||||
// Then
|
||||
Assert.True(result?.Length == 2);
|
||||
Assert.Equal(
|
||||
expected: new ManyErrors(new Error[]{
|
||||
new ExpectedError("err1", "msg1"),
|
||||
new ExceptionalError(new Exception("msg2")),
|
||||
}),
|
||||
result
|
||||
);
|
||||
Assert.Equal(
|
||||
expected: "ext_value",
|
||||
result[0].ExtensionData["ext"].ToString());
|
||||
}
|
||||
}
|
||||
30
Raliway.Tests/Raliway.Tests.csproj
Normal file
30
Raliway.Tests/Raliway.Tests.csproj
Normal file
@@ -0,0 +1,30 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<AssemblyName>Just.Railway.Tests</AssemblyName>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.6.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Railway\Railway.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
142
Raliway.Tests/Results/GeneralUsage.cs
Normal file
142
Raliway.Tests/Results/GeneralUsage.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
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()
|
||||
{
|
||||
// Given
|
||||
|
||||
// When
|
||||
var result = Result.Success()
|
||||
.Append(() => Result.Success(1))
|
||||
.Append("test")
|
||||
.Map((i, s) => $"{s}_{i}")
|
||||
.Append("some")
|
||||
.Bind((s1, s2) => Result.Success(string.Join(';', s1, s2)))
|
||||
.Match(
|
||||
onSuccess: s => s.ToUpper(),
|
||||
onFailure: _ =>
|
||||
{
|
||||
Assert.Fail();
|
||||
return "";
|
||||
}
|
||||
);
|
||||
|
||||
Assert.Equal("TEST_1;SOME", result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ChainedResultExtensions_WhenThereIsAnError()
|
||||
{
|
||||
// Given
|
||||
|
||||
// When
|
||||
var error = Error.New("test");
|
||||
|
||||
|
||||
var result = Result.Success()
|
||||
.Append(() => Result.Failure<int>(error))
|
||||
.Append("test")
|
||||
.Map((i, s) =>
|
||||
{
|
||||
Assert.Fail();
|
||||
return Result.Success("");
|
||||
})
|
||||
.Append("some")
|
||||
.Bind((s1, s2) =>
|
||||
{
|
||||
Assert.Fail();
|
||||
return Result.Success("");
|
||||
})
|
||||
.Match(
|
||||
onSuccess: _ =>
|
||||
{
|
||||
Assert.Fail();
|
||||
return "";
|
||||
},
|
||||
onFailure: err =>
|
||||
{
|
||||
Assert.Equal(error, err);
|
||||
return "satisfied";
|
||||
}
|
||||
);
|
||||
|
||||
// Then
|
||||
Assert.Equal("satisfied", result);
|
||||
}
|
||||
}
|
||||
3
Raliway.Tests/Usings.cs
Normal file
3
Raliway.Tests/Usings.cs
Normal file
@@ -0,0 +1,3 @@
|
||||
global using System.Text.Json;
|
||||
global using Xunit;
|
||||
global using Just.Railway;
|
||||
Reference in New Issue
Block a user