Skip to content

Instantly share code, notes, and snippets.

@just-kip
Created January 19, 2018 07:27
Show Gist options
  • Save just-kip/4bb8aa134ac77663001cce5bf5a770d2 to your computer and use it in GitHub Desktop.
Save just-kip/4bb8aa134ac77663001cce5bf5a770d2 to your computer and use it in GitHub Desktop.
RxJava repeatWhen example
@Test
fun test_repeating_api_request() {
val scheduler = TestScheduler()
var apiRequestCount = 0
val apiRequest = {
if (apiRequestCount < 5) {
apiRequestCount++
Observable.just("wait")
} else {
Observable.just("finished")
}
}
val repeating = Observable
.defer(apiRequest)
.repeatWhen { it.delay(5, TimeUnit.SECONDS, scheduler) }
.filter { it == "finished" }
.take(1)
.flatMap { Observable.just(it) }
val test = repeating.test()
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertValue { it == "finished" }
test.assertComplete()
}
@Test
fun test_repeating_api_error() {
val scheduler = TestScheduler()
var apiRequestCount = 0
val apiRequest = {
if (apiRequestCount < 5) {
apiRequestCount++
Observable.just("wait")
} else {
Observable.error(Exception("error"))
}
}
val repeating = Observable
.defer(apiRequest)
.repeatWhen { it.delay(5, TimeUnit.SECONDS, scheduler) }
.filter { it == "finished" }
.take(1)
.flatMap { Observable.just(it) }
val test = repeating.test()
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertNoValues()
scheduler.advanceTimeBy(5, TimeUnit.SECONDS)
test.assertError { it.message == "error" }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment