def test_rescue_failure(): """Ensures that rescue works for Failure container.""" def factory(inner_value) -> RCR[int, int, str]: return RCR.from_failure(inner_value * 2) assert RCR.from_success(5).rescue(factory, )(0) == RCR.from_success(5)(0) assert RCR.from_failure(5).rescue(factory, )(0) == RCR.from_failure(10)(0)
def test_bind_regular_context(): """Ensures that regular ``RequiresContext`` can be bound.""" def factory(inner_value: int) -> RequiresContext[int, float]: return RequiresContext(lambda deps: inner_value / deps) first: RCR[int, int, str] = RCR.from_success(1) third: RCR[int, int, str] = RCR.from_failure('a') assert first.bind_context(factory)(2) == IOSuccess(0.5) assert RCR.from_success(2).bind_context(factory, )(1) == IOSuccess(2.0) assert third.bind_context(factory)(1) == IOFailure('a')
def test_bind(): """Ensures that bind works.""" def factory(inner_value: int) -> RCR[int, float, str]: if inner_value > 0: return RCR(lambda deps: IOSuccess(inner_value / deps)) return RCR.from_failure(str(inner_value)) input_value = 5 bound: RCR[int, int, str] = RCR.from_success(input_value) assert bound.bind(factory)(2) == factory(input_value)(2) assert bound.bind(factory)(2) == IOSuccess(2.5) assert RCR.from_success(0).bind( factory, )(2) == factory(0)(2) == IOFailure('0')
def test_bind_io_result(): """Ensures that io ``Result`` can be bound.""" def factory(inner_value: int) -> IOResult[int, str]: if inner_value > 0: return IOSuccess(inner_value + 1) return IOFailure('nope') first: RCR[int, int, str] = RCR.from_success(1) third: RCR[int, int, str] = RCR.from_failure('a') assert first.bind_ioresult(factory)(RCR.empty) == IOSuccess(2) assert RCR.from_success(0).bind_ioresult(factory, )( RCR.empty) == IOFailure('nope') assert third.bind_ioresult(factory)(RCR.empty) == IOFailure('a')
def test_rescue_with_context_io_result(): """Ensures that functions can be composed and return type is correct.""" rescued = rescue(_context_io_result_function) assert rescued( RequiresContextIOResult.from_success(1), )(1) == IOSuccess(1) assert rescued( RequiresContextIOResult.from_failure(1), )(1) == IOSuccess(2) assert rescued( RequiresContextIOResult.from_failure(0), )(1) == IOFailure('nope')
def test_requires_context_io_aliases(): """Ensures that ReaderIOResult correctly typecast.""" container: ReaderIOResultE[int, float] = _function(1) container2: ReaderIOResult[int, float, Exception] = _function(1) container3: ReaderIOResultE[int, float] = ReaderIOResultE.from_success(10.0, ) container4: ReaderIOResultE[int, float] = ReaderIOResult.from_success(10.0) assert container(0) == container2(0) == container3(0) == container4(0) assert container(0) == RequiresContextIOResult.from_success(10.0)(0)
(Some(Some([])), Some([])), # Nope: (Failure(Failure('a')), Failure(Failure('a'))), (IOFailure(IOFailure('a')), IOFailure(IOFailure('a'))), ]) def test_flatten(container, merged): """Ensures that `flatten` is always returning the correct type.""" assert flatten(container) == merged @pytest.mark.parametrize(('container', 'merged'), [ ( RequiresContextResult.from_success( RequiresContextResult.from_success(1), ), RequiresContextResult.from_success(1), ), ( RequiresContextIOResult.from_success( RequiresContextIOResult.from_success(1), ), RequiresContextIOResult.from_success(1), ), ( RequiresContext.from_value(RequiresContext.from_value(1)), RequiresContext.from_value(1), ), ]) def test_flatten_context(container, merged): """Ensures that `flatten` is always returning the correct type.""" assert flatten(container)(...) == merged(...)
def test_bind_with_context_io_result(): """Ensures that functions can be composed and return type is correct.""" binded = bind(_context_io_result_function) assert binded(RequiresContextIOResult.from_success(3))(5) == IOSuccess(8)
def test_requires_context_result_immutable(): """Ensures that container is immutable.""" with pytest.raises(ImmutableStateError): RequiresContextIOResult.from_success(1).abc = 1
def test_return_true_with_requires_context_io_result_container( ): # noqa: E501,WPS118 """Ensures `is_io` function will return True for RequiresContextIOResult.""" assert is_io(RequiresContextIOResult.from_success(1.5)) is True
def test_requires_context_result_immutable_deepcopy(): # noqa: WPS118 """Ensures that helper returns it self when passed to deepcopy function.""" requires_context = RequiresContextIOResult.from_success(1) assert requires_context is deepcopy(requires_context)
def factory(inner_value) -> RCR[int, int, str]: return RCR.from_success(inner_value * 2)
def _function(arg: int) -> RequiresContextIOResultE[int, float]: if arg == 0: return RequiresContextIOResult.from_failure( ZeroDivisionError('Divided by 0'), ) return RequiresContextIOResult.from_success(10 / arg)
def test_requires_context_io_resulte(): """Ensures that RequiresContextIOResultE correctly typecast.""" container: RequiresContextIOResult[int, float, Exception] = _function(1) assert container(0) == RequiresContextIOResult.from_success(10.0)(0)