-
Notifications
You must be signed in to change notification settings - Fork 27
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use Full Dagger Graph for unit tests (#467)
* Use Full Dagger Graph for unit tests * Add FakeNavigator and consolidate coe fake modules * Write some integration ViewModel tests * Remove Mockito and annotations dependencies * Some class moves * Do not test history size * Add RepoDetailViewModelTest * Added assertion on Snackbar being triggered
- Loading branch information
Showing
25 changed files
with
1,271 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
core-testing/src/main/java/com/jraska/github/client/FakeModules.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.jraska.github.client | ||
|
||
import com.jraska.github.client.android.FakeCoreAndroidModule | ||
import com.jraska.github.client.http.FakeHttpModule | ||
import dagger.Module | ||
|
||
@Module( | ||
includes = arrayOf( | ||
FakeCoreModule::class, | ||
FakeCoreAndroidModule::class, | ||
FakeConfigModule::class, | ||
FakeHttpModule::class, | ||
) | ||
) | ||
object FakeModules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package com.jraska.github.client.android | ||
|
||
import com.jraska.github.client.Fakes | ||
import com.jraska.github.client.navigation.Navigator | ||
import com.jraska.github.client.rx.AppSchedulers | ||
import com.jraska.github.client.ui.SnackbarData | ||
import com.jraska.github.client.ui.SnackbarDisplay | ||
import dagger.Module | ||
import dagger.Provides | ||
import io.reactivex.plugins.RxJavaPlugins | ||
import javax.inject.Singleton | ||
|
||
@Module | ||
object FakeCoreAndroidModule { | ||
@Provides | ||
@Singleton | ||
fun schedulers(): AppSchedulers { | ||
RxJavaPlugins.setErrorHandler { /* empty for now */ } // TODO: 09/04/2021 Better test implementation https://github.com/jraska/github-client/pull/467/checks?check_run_id=2301305103 | ||
|
||
return Fakes.trampoline() | ||
} | ||
|
||
@Provides | ||
@Singleton | ||
fun provideNavigator(): Navigator { | ||
return Fakes.recordingNavigator() | ||
} | ||
|
||
@Provides | ||
@Singleton | ||
internal fun provideFakeSnackbarDisplay(): FakeSnackbarDisplay { | ||
return FakeSnackbarDisplay() | ||
} | ||
|
||
@Provides | ||
internal fun provideSnackbarDisplay(fake: FakeSnackbarDisplay): SnackbarDisplay = fake | ||
} |
14 changes: 14 additions & 0 deletions
14
core-testing/src/main/java/com/jraska/github/client/android/FakeSnackbarDisplay.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.jraska.github.client.android | ||
|
||
import com.jraska.github.client.ui.SnackbarData | ||
import com.jraska.github.client.ui.SnackbarDisplay | ||
|
||
class FakeSnackbarDisplay : SnackbarDisplay { | ||
private val snackbarsInvoked = mutableListOf<SnackbarData>() | ||
|
||
fun snackbarsInvoked(): List<SnackbarData> = snackbarsInvoked | ||
|
||
override fun showSnackbar(snackbarData: SnackbarData) { | ||
snackbarsInvoked.add(snackbarData) | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
core-testing/src/main/java/com/jraska/github/client/android/RecordingNavigator.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package com.jraska.github.client.android | ||
|
||
import com.jraska.github.client.navigation.Navigator | ||
import okhttp3.HttpUrl | ||
|
||
class RecordingNavigator: Navigator { | ||
val screensStarted: MutableList<Any> = mutableListOf() | ||
|
||
override fun launchOnWeb(httpUrl: HttpUrl) { | ||
screensStarted.add(httpUrl) | ||
} | ||
|
||
override fun startUserDetail(login: String) { | ||
screensStarted.add(login) | ||
} | ||
|
||
override fun startRepoDetail(fullPath: String) { | ||
screensStarted.add(fullPath) | ||
} | ||
|
||
override fun showSettings() { | ||
screensStarted.add("settings") | ||
} | ||
|
||
override fun showAbout() { | ||
screensStarted.add("about") | ||
} | ||
|
||
override fun startConsole() { | ||
screensStarted.add("console") | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.jraska.github.client.http | ||
|
||
import dagger.Module | ||
import dagger.Provides | ||
import okhttp3.mockwebserver.MockWebServer | ||
import javax.inject.Singleton | ||
|
||
@Module | ||
class FakeHttpModule { | ||
val mockWebServer = MockWebServer() | ||
|
||
@Provides // will be singleton anyway as we have field | ||
fun mockWebServer() = mockWebServer | ||
|
||
@Provides | ||
@Singleton | ||
fun provideRetrofit() = HttpTest.retrofit(mockWebServer.url("/")) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 55 additions & 2 deletions
57
feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,58 @@ | ||
package com.jraska.github.client.repo | ||
|
||
import org.junit.Assert.* | ||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule | ||
import com.jraska.github.client.http.enqueue | ||
import com.jraska.github.client.repo.di.DaggerTestRepoComponent | ||
import com.jraska.github.client.repo.di.TestRepoComponent | ||
import com.jraska.github.client.repo.model.GitHubApiRepoRepositoryTest | ||
import com.jraska.livedata.test | ||
import org.assertj.core.api.Assertions.assertThat | ||
import org.junit.Before | ||
import org.junit.Rule | ||
import org.junit.Test | ||
|
||
class RepoDetailViewModelTest | ||
internal class RepoDetailViewModelTest { | ||
|
||
@get:Rule | ||
val testRule = InstantTaskExecutorRule() | ||
|
||
lateinit var component: TestRepoComponent | ||
lateinit var repoDetailViewModel: RepoDetailViewModel | ||
|
||
@Before | ||
fun setUp() { | ||
component = DaggerTestRepoComponent.create() | ||
repoDetailViewModel = component.repoDetailViewModel() | ||
} | ||
|
||
@Test | ||
fun whenLoad_thenLoadsProperRepoDetail() { | ||
component.mockWebServer.enqueue("response/repo_detail.json") | ||
component.mockWebServer.enqueue("response/repo_pulls.json") | ||
|
||
val showRepo = repoDetailViewModel.repoDetail("jraska/github-client") | ||
.test() | ||
.value() as RepoDetailViewModel.ViewState.ShowRepo | ||
|
||
assertThat(showRepo.repo).usingRecursiveComparison().isEqualTo(GitHubApiRepoRepositoryTest.expectedRepoDetail()) | ||
} | ||
|
||
@Test | ||
fun whenClicks_thenOpensGitHub() { | ||
repoDetailViewModel.onGitHubIconClicked("jraska/github-client") | ||
|
||
assertThat(component.fakeSnackbarDisplay.snackbarsInvoked().last().text).isEqualTo(R.string.repo_detail_open_web_text) | ||
} | ||
|
||
@Test | ||
fun whenError_thenLoadsErrorState() { | ||
component.mockWebServer.enqueue("response/error.json") | ||
component.mockWebServer.enqueue("response/error.json") | ||
|
||
val state = repoDetailViewModel.repoDetail("jraska/github-client") | ||
.test() | ||
.value() | ||
|
||
assertThat(state).isInstanceOf(RepoDetailViewModel.ViewState.Error::class.java) | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.jraska.github.client.repo.di | ||
|
||
import com.jraska.github.client.FakeModules | ||
import com.jraska.github.client.android.FakeSnackbarDisplay | ||
import com.jraska.github.client.repo.RepoDetailViewModel | ||
import com.jraska.github.client.repo.RepoModule | ||
import dagger.Component | ||
import okhttp3.mockwebserver.MockWebServer | ||
import javax.inject.Singleton | ||
|
||
@Singleton | ||
@Component(modules = [RepoModule::class, FakeModules::class]) | ||
internal interface TestRepoComponent { | ||
fun repoDetailViewModel(): RepoDetailViewModel | ||
|
||
val mockWebServer: MockWebServer | ||
|
||
val fakeSnackbarDisplay: FakeSnackbarDisplay | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"message": "Not Found", | ||
"documentation_url": "https://docs.github.com/rest" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.