LanguageExt extensions for FluentAssertions.
$ dotnet add package FluentAssertions.LanguageExtSpecial thanks to @sparerd for the many new features.
Install-Package FluentAssertions.LanguageExt
BeSome()BeSome(expected)BeSome(action)BeNone()using FluentAssertions;
using FluentAssertions.LanguageExt;
...
var option = Prelude.Some(123);
var optionnone = Option<int>.None;
option.Should().BeSome();
option.Should().BeSome(8);
option.Should().BeSome(s => s.Should().Be(8));
option.Should().BeSome().Which.Should().Be(8);
optionnone.Should().BeNone();
Be(expected)BeLeft()BeLeft(action)BeRight()BeRight(action)BeBottom()using FluentAssertions;
using FluentAssertions.LanguageExt;
...
Either<int, string> left = Prelude.Left(8);
Either<int, string> right = Prelude.Right("a");
left.Should().BeLeft();
left.Should().BeLeft(l => l.Should().Be(8));
left.Should().BeLeft().Which.Should().Be(8);
left.Should().Be(8);
right.Should().BeRight();
right.Should().BeRight(r => r.Should().Be("a"));
right.Should().BeRight().Which.Should().Be("a");
right.Should().Be("a");
There's a breaking change when using BeFail() with the .Which extension.
When using the BeFail() assertion on a Validation<TFail, TSucc>, the .Which extension returns only a single failure instance even though the Validation type has a Seq<TFail>. This prevents proper assertions on the failures returned from a Validation using the .Which extension.
This has now been fixed.
The return signature for BeFail() has changed from AndWhichConstraint<LanguageExtValidationAssertions<TFail, TSuccess>, TFail> to AndWhichConstraint<LanguageExtValidationAssertions<TFail, TSuccess>, Seq<TFail>>
BeFail()BeSuccess()BeSuccess(action)Be(expected)BeFail()BeSuccess()BeFail()BeSome()BeSome(action)BeNone()BeNoneOrFail()Be(expected)BeSuccess()BeSuccess(action)BeFail()BeBottom()Be(expected)using FluentAssertions;
using FluentAssertions.LanguageExt;
...
Fin<int> successFin = Prelude.FinSucc(8);
Fin<int> failedFin = Prelude.FinFail<int>("Error message");
successFin.Should().BeSuccess();
successFin.Should().BeSuccess(v => v.Should().Be(8));
successFin.Should().BeSuccess().Which.Should().Be(8);
successFin.Should().Be(8);
failedFin.Should().BeFail();
failedFin.Should().BeFail().Which.Message.Should().Be("Error message");