package com.github.davidmoten.rx.jdbc;
import static com.github.davidmoten.rx.RxUtil.toEmpty;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.github.davidmoten.rx.RxUtil;
import rx.Observable;
public class TransactionOnNextOperatorTest {
@Test
public void testBeginTransactionOnNextForThreePasses() {
Database db = DatabaseCreator.db();
Observable<Integer> min = Observable
// do 3 times
.just(11, 12, 13)
// begin transaction for each item
.compose(db.beginTransactionOnNext_())
// update all scores to the item
.compose(db.update("update person set score=?").parameterTransformer())
// to empty parameter list
.map(toEmpty())
// increase score
.compose(db.update("update person set score=score + 5").parameterListTransformer())
// only expect one result so can flatten
.compose(RxUtil.<Integer> flatten())
// commit transaction
.compose(db.commitOnNext_())
// to empty lists
.map(toEmpty())
// return count
.compose(db.select("select min(score) from person").dependsOnTransformer()
.getAs(Integer.class));
assertIs(18, min);
}
static <T> void assertIs(T t, Observable<T> observable) {
assertEquals(t, observable.toBlocking().single());
}
}