public void WithValueIf_True_OnPassed_NowHasValue_WithValueFactory()
        {
            var mock = IValueFactoryMock <string> .GetMock("value", "orValue");

            var result = Result.WithValue("oldValue")
                         .WithValueIf(true, () => mock.Object.Value());

            result.ShouldBeOfType <Passed <string> >();
            result.Value.ShouldBe("value");
            mock.Verify(m => m.Value(), Times.Once);
        }
        public void WithValueIf_False_OnPassed_RetainsOldValue_WithValueFactory()
        {
            var mock = IValueFactoryMock <string> .GetMock("value", "orValue");

            var result = Result.WithValue("oldValue")
                         .WithValueIf(false, () => mock.Object.Value());

            result.ShouldBeOfType <Passed <string> >();
            result.Value.ShouldBe("oldValue");
            mock.Verify(m => m.Value(), Times.Never);
        }
        public void WithValueIf_True_OnFailed_ValueIsDropped_WithValueFactory()
        {
            var mock = IValueFactoryMock <string> .GetMock("value", "orValue");

            var result = Result.WithValue("oldValue")
                         .Fail()
                         .WithValueIf(true, () => mock.Object.Value());

            result.ShouldBeOfType <Failed <string> >();
            ShouldThrowExtensions.ShouldThrow <ResultException>(() => result.Value);
            mock.Verify(m => m.Value(), Times.Never);
        }