Reputation: 3572
I want to have either a Single as return type, or incase of null, an empty maybe.
First, I call a method to get a boolean value:
Single<Boolean> isRemembered()
Then, if this method returns true, call this method:
Single<String> getRemembered()
If, isRemembered() returns true, getRemembered() is never null value.
Here is my attempt at the stream:
public Maybe<String> getRememberIfExists(){
return sharedPreferencesRepositoryType.isRemembered()
.flatMapMaybe(aBoolean -> {
if(aBoolean){
return sharedPreferencesRepositoryType.getRemembered()
.flatMapMaybe(Maybe::just);
}else{
return Maybe.empty();
}
});
}
I wrote a test for both when isRemembered() returns true and false:
@Test
public void getRememberIfExists() {
when(repository.getRemembered()).thenReturn(Single.just(REMEMBERED));
when(repository.isRemembered()).thenReturn(Single.just(true));
TestObserver<String> observer = interactor.getRememberIfExists()
.test();
verify(repository).isRemembered();
verify(repository).getRemembered();
observer.assertNoErrors()
.assertComplete()
.assertValueCount(1);
assertEquals(REMEMBERED, observer.values().get(0));
}
@Test
public void getRememberIfExistsError(){
when(repository.isRemembered()).thenReturn(Single.just(false));
TestObserver<String> testObserver = interactor.getRememberIfExists()
.test();
verify(repository).isRemembered();
testObserver.assertComplete();
testObserver.assertEmpty();
}
The first test is successful. The second fails:
java.lang.AssertionError: Completed! (latch = 0, values = 0, errors = 0, completions = 1)
at:
testObserver.assertEmpty()
Any suggestions on how to correctly write my getRememberIfExists() method above?
Upvotes: 1
Views: 2377
Reputation: 2779
According to the reference doc, assertEmpty
Returns a (singleton) Maybe instance that calls onComplete immediately.
So use "assertNoValues" instead of "assertEmpty":
@Test
public void getRememberIfExistsError(){
when(repository.isRemembered()).thenReturn(Single.just(false));
TestObserver<String> testObserver = interactor.getRememberIfExists()
.test();
verify(repository).isRemembered();
testObserver.assertComplete();
testObserver.assertNoValues()
}
Upvotes: 4