Skip to content

Commit

Permalink
feature(Result): add overload of the Map method
Browse files Browse the repository at this point in the history
  • Loading branch information
daht-x authored Jan 4, 2024
1 parent deed8b0 commit 4f016c2
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
9 changes: 9 additions & 0 deletions source/Monads/Result.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,5 +119,14 @@ public Result<TSuccessToMap, TFailure> Map<TSuccessToMap>(TSuccessToMap successT
=> IsFailed
? new(Failure)
: new(successToMap);

/// <summary>Creates a new result with a different expected success.</summary>
/// <param name="createSuccessToMap">Creates the expected success to map.</param>
/// <typeparam name="TSuccessToMap">Type of expected success to map.</typeparam>
/// <returns>A new result with a different expected success.</returns>
public Result<TSuccessToMap, TFailure> Map<TSuccessToMap>(Func<TSuccess, TSuccessToMap> createSuccessToMap)
=> IsFailed
? new(Failure)
: new(createSuccessToMap(Success));
}
#pragma warning restore CA1062
40 changes: 40 additions & 0 deletions test/unit/Monads/ResultTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,8 @@ public void Ensure_SuccessfulResultPlusCreateAuxiliaryPlusFalsePredicatePlusCrea

#region Map

#region Overload

[Fact]
[Trait(root, map)]
public void Map_FailedResultPlusSuccessToMap_FailedResult()
Expand Down Expand Up @@ -355,4 +357,42 @@ public void Map_SuccessfulResultPlusSuccessToMap_SuccessfulResult()
}

#endregion

#region Overload

[Fact]
[Trait(root, map)]
public void Map_FailedResultPlusCreateSuccessToMap_FailedResult()
{
//Arrange
const string expectedFailure = ResultFixture.Failure;
Func<Constellation, Start> createSuccessToMap = static _ => ResultFixture.SuccessToMap;

//Act
Result<Start, string> actualResult = ResultMother.Fail(expectedFailure)
.Map(createSuccessToMap);

//Assert
ResultAsserter.AreFailed(expectedFailure, actualResult);
}

[Fact]
[Trait(root, map)]
public void Map_SuccessfulResultPlusCreateSuccessToMap_SuccessfulResult()
{
//Arrange
Start expectedSuccess = ResultFixture.SuccessToMap;
Func<Constellation, Start> createSuccessToMap = _ => expectedSuccess;

//Act
Result<Start, string> actualResult = ResultMother.Succeed()
.Map(createSuccessToMap);

//Assert
ResultAsserter.AreSuccessful(expectedSuccess, actualResult);
}

#endregion

#endregion
}

0 comments on commit 4f016c2

Please sign in to comment.