diff --git a/app/build.gradle b/app/build.gradle index 15cbda4..1f1487e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -80,5 +80,13 @@ dependencies { implementation 'com.google.dagger:dagger:2.42' kapt 'com.google.dagger:dagger-compiler:2.42' + //Mockito + testImplementation "org.mockito:mockito-core:3.12.4" + testImplementation 'org.mockito:mockito-inline:2.8.9' + testImplementation('com.nhaarman:mockito-kotlin:1.5.0') { + exclude group: 'org.jetbrains.kotlin' + exclude group: 'org.mockito' + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/githubclient/mvp/presenter/MainPresenter.kt b/app/src/main/java/com/example/githubclient/mvp/presenter/MainPresenter.kt index 72946b8..4920c83 100644 --- a/app/src/main/java/com/example/githubclient/mvp/presenter/MainPresenter.kt +++ b/app/src/main/java/com/example/githubclient/mvp/presenter/MainPresenter.kt @@ -12,7 +12,7 @@ class MainPresenter : MvpPresenter() { @Inject lateinit var screens: IScreens - override fun onFirstViewAttach() { + public override fun onFirstViewAttach() { super.onFirstViewAttach() router.replaceScreen(screens.users()) } diff --git a/app/src/main/java/com/example/githubclient/mvp/presenter/RepositoryPresenter.kt b/app/src/main/java/com/example/githubclient/mvp/presenter/RepositoryPresenter.kt index 643f1dd..cd4505a 100644 --- a/app/src/main/java/com/example/githubclient/mvp/presenter/RepositoryPresenter.kt +++ b/app/src/main/java/com/example/githubclient/mvp/presenter/RepositoryPresenter.kt @@ -12,7 +12,7 @@ class RepositoryPresenter(private val githubUserRepositories: GithubUserReposito @Inject lateinit var router: Router - override fun onFirstViewAttach() { + public override fun onFirstViewAttach() { super.onFirstViewAttach() viewState.init() githubUserRepositories?.let { viewState.setId(it.id) } diff --git a/app/src/test/java/com/example/githubclient/MainPresenterTest.kt b/app/src/test/java/com/example/githubclient/MainPresenterTest.kt new file mode 100644 index 0000000..f67e18e --- /dev/null +++ b/app/src/test/java/com/example/githubclient/MainPresenterTest.kt @@ -0,0 +1,59 @@ +package com.example.githubclient + +import com.example.githubclient.mvp.presenter.MainPresenter +import com.example.githubclient.mvp.view.MainView +import com.example.githubclient.navigation.IScreens +import com.github.terrakok.cicerone.Router +import com.github.terrakok.cicerone.Screen +import com.nhaarman.mockito_kotlin.atLeastOnce +import com.nhaarman.mockito_kotlin.mock +import com.nhaarman.mockito_kotlin.times +import com.nhaarman.mockito_kotlin.whenever +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.MockitoAnnotations + +class MainPresenterTest { + private lateinit var presenter: MainPresenter + + @Mock + private lateinit var view: MainView + + @Mock + private lateinit var router: Router + + @Mock + private lateinit var screens: IScreens + + @Before + fun setUp() { + MockitoAnnotations.openMocks(this) + + presenter = MainPresenter() + presenter.router = router + presenter.screens = screens + presenter.attachView(view) + + } + + @Test + fun onFirstViewAttach_Test() { + val expectedScreen = mock() + whenever(screens.users()).thenReturn(expectedScreen) + + presenter.onFirstViewAttach() + + Mockito.verify(screens, atLeastOnce()).users() + Mockito.verify(router, times(1)).replaceScreen(expectedScreen) + } + + @Test + fun backClicked_shouldExitRouter() { + + presenter.backClicked() + + Mockito.verify(router, times(1)).exit() + } +} \ No newline at end of file diff --git a/app/src/test/java/com/example/githubclient/RepositoryPresenterTest.kt b/app/src/test/java/com/example/githubclient/RepositoryPresenterTest.kt new file mode 100644 index 0000000..013ee70 --- /dev/null +++ b/app/src/test/java/com/example/githubclient/RepositoryPresenterTest.kt @@ -0,0 +1,64 @@ +package com.example.githubclient + +import com.example.githubclient.mvp.model.entity.GithubUserRepositories +import com.example.githubclient.mvp.presenter.RepositoryPresenter +import com.example.githubclient.mvp.view.RepositoryView +import com.github.terrakok.cicerone.Router +import com.nhaarman.mockito_kotlin.atMost +import com.nhaarman.mockito_kotlin.mock +import com.nhaarman.mockito_kotlin.times +import com.nhaarman.mockito_kotlin.verify +import com.nhaarman.mockito_kotlin.whenever +import org.junit.Before +import org.junit.Test +import org.mockito.Mock +import org.mockito.MockitoAnnotations + +class RepositoryPresenterTest { + private lateinit var presenter: RepositoryPresenter + + @Mock + private lateinit var view: RepositoryView + + @Mock + private lateinit var router: Router + + @Mock + private lateinit var githubRepository: GithubUserRepositories + + @Before + fun setUp() { + MockitoAnnotations.openMocks(this) + + githubRepository = mock() + presenter = RepositoryPresenter(githubRepository) + presenter.router = router + presenter.attachView(view) + } + + @Test + fun onFirstViewAttach_Test() { + whenever(githubRepository.id) + .thenReturn("1") + .thenReturn("2") + whenever(githubRepository.name) + .thenReturn("Ololo") + .thenReturn("Ururu") + whenever(githubRepository.forksCount) + .thenReturn(5) + .thenReturn(10) + + presenter.onFirstViewAttach() + + verify(githubRepository, atMost(2)).id + verify(githubRepository, atMost(2)).name + verify(githubRepository, atMost(2)).forksCount + } + + @Test + fun backPressed_Test() { + presenter.backPressed() + + verify(router, times(1)).exit() + } +} \ No newline at end of file