From 33208b0be1c9b7cb8f1d9787a7cd58575a9f5b3e Mon Sep 17 00:00:00 2001
From: Kostiantyn Dobarskyi <29274427+KDobarskyi@users.noreply.github.com>
Date: Fri, 28 Sep 2018 07:50:10 +0300
Subject: [PATCH] BAEL-2127 Chaining Completables in RxJava (#5323)
---
rxjava-2/pom.xml | 3 +-
.../baeldung/rxjava/CompletableUnitTest.java | 112 ++++++++++++++++++
2 files changed, 113 insertions(+), 2 deletions(-)
create mode 100644 rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java
diff --git a/rxjava-2/pom.xml b/rxjava-2/pom.xml
index 4c5ea014d7..a18b096b6d 100644
--- a/rxjava-2/pom.xml
+++ b/rxjava-2/pom.xml
@@ -38,9 +38,8 @@
3.8.0
- 2.1.3
+ 2.2.2
1.7.0
2.0.0
-
\ No newline at end of file
diff --git a/rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java b/rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java
new file mode 100644
index 0000000000..6acda310a5
--- /dev/null
+++ b/rxjava-2/src/test/java/com/baeldung/rxjava/CompletableUnitTest.java
@@ -0,0 +1,112 @@
+package com.baeldung.rxjava;
+
+import io.reactivex.Completable;
+import io.reactivex.Flowable;
+import io.reactivex.Single;
+import io.reactivex.observers.DisposableCompletableObserver;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CompletableUnitTest {
+
+ Completable first;
+ Completable second;
+ Completable error;
+ Throwable throwable = new RuntimeException();
+
+ @Before
+ public void setUpCompletables() {
+ first = Completable.fromSingle(Single.just(1));
+ second = Completable.fromRunnable(() -> {});
+ error = Single.error(throwable)
+ .ignoreElement();
+ }
+
+ @Test
+ public void whenCompletableConstructed_thenCompletedSuccessfully() {
+ Completable completed = Completable.complete();
+ completed.subscribe(new DisposableCompletableObserver() {
+ @Override
+ public void onComplete() {
+ System.out.println("Completed!");
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ e.printStackTrace();
+ }
+ });
+ Flowable flowable = Flowable.just("request received", "user logged in");
+ Completable flowableCompletable = Completable.fromPublisher(flowable);
+ Completable singleCompletable = Single.just(1)
+ .ignoreElement();
+
+ completed.andThen(flowableCompletable)
+ .andThen(singleCompletable)
+ .test()
+ .assertComplete();
+ }
+
+ @Test
+ public void whenCombiningCompletables_thenCompletedSuccessfully() {
+ first.andThen(second)
+ .test()
+ .assertComplete();
+ }
+
+ @Test
+ public void whenCombinedWithError_thenCompletedWithError() {
+ first.andThen(second)
+ .andThen(error)
+ .test()
+ .assertError(throwable);
+ }
+
+ @Test
+ public void whenCombinedWithNever_thenDoesNotComplete() {
+ first.andThen(second)
+ .andThen(Completable.never())
+ .test()
+ .assertNotComplete();
+ }
+
+ @Test
+ public void whenMergedCompletables_thenCompletedSuccessfully() {
+ Completable.mergeArray(first, second)
+ .test()
+ .assertComplete();
+ }
+
+ @Test
+ public void whenMergedWithError_thenCompletedWithError() {
+ Completable.mergeArray(first, second, error)
+ .test()
+ .assertError(throwable);
+ }
+
+ @Test
+ public void whenFlatMaped_thenCompletedSuccessfully() {
+ Completable allElementsCompletable = Flowable.just("request received", "user logged in")
+ .flatMapCompletable(message -> Completable
+ .fromRunnable(() -> System.out.println(message))
+ );
+ allElementsCompletable
+ .test()
+ .assertComplete();
+ }
+
+ @Test
+ public void whenAmbWithNever_thenCompletedSuccessfully() {
+ Completable.ambArray(first, Completable.never(), second)
+ .test()
+ .assertComplete();
+ }
+
+ @Test
+ public void whenAmbWithError_thenCompletedWithError() {
+ Completable.ambArray(error, first, second)
+ .test()
+ .assertError(throwable);
+ }
+
+}