package br.ufs.github.rxassertions.tests;
import br.ufs.github.rxassertions.RxAssertions;
import org.assertj.core.api.Condition;
import org.junit.Test;
import rx.Completable;
import rx.Observable;
import rx.Single;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by ubiratansoares on 5/11/16.
*/
public class RxAssertionsTests {
@Test public void factoryMethod_BlockingObservable_ReturnsNotNull() {
assertThat(RxAssertions.assertThat(Observable.just(1).toBlocking()))
.isNotNull();
}
@Test public void factoryMethod_RegularObservable_ReturnsNotNull() {
assertThat(RxAssertions.assertThat(Observable.just("Test")))
.isNotNull();
}
@Test public void factoryMethod_Single_ReturnsNotNull() {
Single<Boolean> single = Single.fromCallable(() -> Boolean.TRUE);
assertThat(RxAssertions.assertThat(single)).isNotNull();
}
@Test public void factoryMethod_Completable_ReturnsNotNull() {
Completable completable = Completable.fromCallable(() -> "Done");
assertThat(RxAssertions.assertThat(completable)).isNotNull();
}
@Test public void emissionsCount() {
RxAssertions.assertThat(Observable.range(1, 10))
.emissionsCount(10);
}
@Test public void canChain_TwoAssertions() {
RxAssertions.assertThat(Observable.range(1, 5))
.emissionsCount(5)
.completes();
}
@Test public void simpleFail() {
Observable<?> error = Observable.error(new IllegalArgumentException());
RxAssertions.assertThat(error).fails().notCompletes();
}
@Test public void failWithException() {
Observable<?> error = Observable.error(new IllegalStateException());
RxAssertions.assertThat(error).failsWithThrowable(IllegalStateException.class);
}
@Test public void noEmissions() {
RxAssertions.assertThat(Observable.empty())
.emitsNothing()
.completes()
.withoutErrors();
}
@Test public void regularObservable_CompletesWithEmissions() {
RxAssertions.assertThat(Observable.just("RxJava", "Assertions"))
.completes()
.withoutErrors()
.emits("RxJava", "Assertions");
}
@Test public void completable_completesWithoutErrors() {
Completable trivial = Completable.fromObservable(Observable.range(1, 5));
RxAssertions.assertThat(trivial)
.completes()
.withoutErrors();
}
@Test public void single_CompletesWithExpectedValue() {
Single<String> single = Single.fromCallable(() -> "RxJava");
RxAssertions.assertThat(single).completes().expectedSingleValue("RxJava");
}
@Test public void multipleEmissions_AreMatchedOnCondition() {
List<String> expected = Arrays.asList("These", "are", "Expected", "Values");
Observable<String> values = Observable.from(expected);
Condition<String> notNullAndNotEmpty = new Condition<String>() {
@Override public boolean matches(String value) {
return value != null && !value.isEmpty();
}
};
RxAssertions.assertThat(values)
.completes()
.eachItemMatches(notNullAndNotEmpty);
}
@Test public void singleEmission_IsMatchedOnCondition() {
List<String> expected = Arrays.asList("These", "are", "the", "values");
Observable<String> values = Observable.from(expected);
Condition<String> withThreeChars = new Condition<String>() {
@Override public boolean matches(String value) {
return value != null && value.length() == 3;
}
};
RxAssertions.assertThat(values)
.completes()
.oneEmissionMatches(withThreeChars);
}
@Test public void multipleEmissions_AreNotMatchedOnCondition() {
List<String> expected = Arrays.asList("These", "are", "Expected", "Values");
Observable<String> values = Observable.from(expected);
Condition<String> greaterThanTen = new Condition<String>() {
@Override public boolean matches(String value) {
return value != null && value.length() > 10;
}
};
RxAssertions.assertThat(values)
.completes()
.allItemsNotMaching(greaterThanTen);
}
@Test public void emissions_Contains_DesiredValues() {
Observable<Integer> values = Observable.range(1, 100);
RxAssertions.assertThat(values)
.completes()
.emits(10)
.emits(20);
}
}