diff --git a/README.md b/README.md index cb72d5b1..22fc39ec 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ![](https://lh3.googleusercontent.com/4TuJnPqSlW7HgtlKVpqu6vKfmSr9a2eGh0Cm-CdIy2CymTHhiyEWKbbryLqFuuP5qAQ=h600-rw) ## Motivation -The main purpose of this app is to demonstrate usage of [Dagger2](https://github.com/google/dagger) and [RxJava](https://github.com/ReactiveX/RxJava) +The main purpose of this app is to demonstrate usage of [Dagger2](https://github.com/google/dagger) and [RxJava2](https://github.com/ReactiveX/RxJava) - A homescreen widget that shows your stock portolio in a resizable grid. - This app fetches stock quotes from this API: https://www.robindahood.com diff --git a/app/src/test/kotlin/com/github/premnirmal/ticker/mock/MockNetworkModule.kt b/app/src/test/kotlin/com/github/premnirmal/ticker/mock/MockNetworkModule.kt index ac39f8f5..a3f49444 100644 --- a/app/src/test/kotlin/com/github/premnirmal/ticker/mock/MockNetworkModule.kt +++ b/app/src/test/kotlin/com/github/premnirmal/ticker/mock/MockNetworkModule.kt @@ -11,7 +11,7 @@ import com.google.gson.GsonBuilder import dagger.Module import dagger.Provides import okhttp3.OkHttpClient -import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import javax.inject.Singleton @@ -42,21 +42,21 @@ class MockNetworkModule { } @Provides @Singleton - internal fun provideRxJavaFactory(): RxJavaCallAdapterFactory { - return RxJavaCallAdapterFactory.create() + internal fun provideRxJavaFactory(): RxJava2CallAdapterFactory { + return RxJava2CallAdapterFactory.create() } @Provides @Singleton internal fun provideRobindahood(context: Context, okHttpClient: OkHttpClient, gson: Gson, converterFactory: GsonConverterFactory, - rxJavaFactory: RxJavaCallAdapterFactory): Robindahood { + rxJavaFactory: RxJava2CallAdapterFactory): Robindahood { return Mocker.provide(Robindahood::class.java) } @Provides @Singleton internal fun provideSuggestionsApi(context: Context, okHttpClient: OkHttpClient, gson: Gson, converterFactory: GsonConverterFactory, - rxJavaFactory: RxJavaCallAdapterFactory): SuggestionApi { + rxJavaFactory: RxJava2CallAdapterFactory): SuggestionApi { return Mocker.provide(SuggestionApi::class.java) } diff --git a/app/src/test/kotlin/com/github/premnirmal/ticker/mock/RxSchedulersOverrideRule.kt b/app/src/test/kotlin/com/github/premnirmal/ticker/mock/RxSchedulersOverrideRule.kt index 34385d13..deb18458 100644 --- a/app/src/test/kotlin/com/github/premnirmal/ticker/mock/RxSchedulersOverrideRule.kt +++ b/app/src/test/kotlin/com/github/premnirmal/ticker/mock/RxSchedulersOverrideRule.kt @@ -1,41 +1,40 @@ package com.github.premnirmal.ticker.mock +import io.reactivex.Scheduler +import io.reactivex.android.plugins.RxAndroidPlugins +import io.reactivex.internal.schedulers.ExecutorScheduler +import io.reactivex.plugins.RxJavaPlugins import org.junit.rules.TestRule import org.junit.runner.Description import org.junit.runners.model.Statement -import io.reactivex.Scheduler -import io.reactivex.android.plugins.RxAndroidPlugins -import io.reactivex.android.plugins.RxAndroidSchedulersHook -import io.reactivex.functions.Func1 -import io.reactivex.plugins.RxJavaHooks -import io.reactivex.schedulers.Schedulers +import java.util.concurrent.Executor class RxSchedulersOverrideRule : TestRule { - private val androidSchedulersHook = object : RxAndroidSchedulersHook() { - override fun getMainThreadScheduler(): Scheduler { - return Schedulers.immediate() + private val immediate = object : Scheduler() { + + override fun createWorker(): Worker { + return ExecutorScheduler.ExecutorWorker(Executor { it.run() }) } } - internal val immediateScheduler = Func1 { Schedulers.immediate() } - override fun apply(base: Statement, description: Description): Statement { return object : Statement() { @Throws(Throwable::class) override fun evaluate() { - RxAndroidPlugins.getInstance().reset() - RxAndroidPlugins.getInstance().registerSchedulersHook(androidSchedulersHook) + RxJavaPlugins.setInitIoSchedulerHandler { _ -> immediate } + RxJavaPlugins.setInitComputationSchedulerHandler { _ -> immediate } + RxJavaPlugins.setInitNewThreadSchedulerHandler { _ -> immediate } + RxJavaPlugins.setInitSingleSchedulerHandler { _ -> immediate } + RxAndroidPlugins.setInitMainThreadSchedulerHandler { _ -> immediate } - RxJavaHooks.reset() - RxJavaHooks.setOnIOScheduler(immediateScheduler) - RxJavaHooks.setOnNewThreadScheduler(immediateScheduler) - - base.evaluate() - - RxAndroidPlugins.getInstance().reset() - RxJavaHooks.reset() + try { + base.evaluate() + } finally { + RxJavaPlugins.reset() + RxAndroidPlugins.reset() + } } } } diff --git a/app/src/test/kotlin/com/github/premnirmal/ticker/network/StocksApiTest.kt b/app/src/test/kotlin/com/github/premnirmal/ticker/network/StocksApiTest.kt index f6cd4220..8ba68014 100644 --- a/app/src/test/kotlin/com/github/premnirmal/ticker/network/StocksApiTest.kt +++ b/app/src/test/kotlin/com/github/premnirmal/ticker/network/StocksApiTest.kt @@ -6,6 +6,8 @@ import com.github.premnirmal.ticker.mock.Mocker import com.github.premnirmal.ticker.network.data.Quote import com.github.premnirmal.ticker.network.data.QuoteNet import com.google.gson.reflect.TypeToken +import io.reactivex.Observable +import io.reactivex.observers.TestObserver import org.junit.After import org.junit.Before import org.junit.Test @@ -13,8 +15,6 @@ import org.mockito.ArgumentMatchers.anyString import org.mockito.Matchers import org.mockito.Mockito.`when` import org.mockito.Mockito.verify -import io.reactivex.Observable -import io.reactivex.observers.TestSubscriber class StocksApiTest : BaseUnitTest() { @@ -44,13 +44,13 @@ class StocksApiTest : BaseUnitTest() { @Test fun testGetStocks() { val testTickerList = TEST_TICKER_LIST - val subscriber = TestSubscriber>() + val subscriber = TestObserver>() stocksApi.getStocks(testTickerList).subscribe(subscriber) subscriber.assertNoErrors() verify(robinhood).getStocks(anyString()) - val onNextEvents = subscriber.onNextEvents + val onNextEvents = subscriber.events[0] assertTrue(onNextEvents.size == 1) - val stocks = onNextEvents[0] + val stocks = onNextEvents[0] as List<*> assertEquals(testTickerList.size, stocks.size) }