Skip to content

Commit dfe05e6

Browse files
Kishan Kumar MauryaKishan Kumar Maurya
authored andcommitted
Unit test added for Usecase and repository
1 parent 696d168 commit dfe05e6

File tree

3 files changed

+227
-0
lines changed

3 files changed

+227
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.example.githubfirebaseissue.repository
2+
3+
import com.example.githubfirebaseissue.api.GithubApi
4+
import com.example.githubfirebaseissue.model.Comment
5+
import com.example.githubfirebaseissue.model.Issue
6+
import com.example.githubfirebaseissue.testutil.Rx2SchedulersOverrideRule
7+
import com.nhaarman.mockitokotlin2.verify
8+
import io.reactivex.Single
9+
import org.junit.Before
10+
11+
import org.junit.Rule
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
import org.mockito.Mock
15+
import org.mockito.Mockito.`when`
16+
import org.mockito.Mockito.mock
17+
import org.mockito.junit.MockitoJUnitRunner
18+
import retrofit2.HttpException
19+
import retrofit2.Response
20+
import okhttp3.MediaType.Companion.toMediaTypeOrNull
21+
import okhttp3.ResponseBody.Companion.toResponseBody
22+
23+
24+
@RunWith(MockitoJUnitRunner::class)
25+
class GithubRepositoryImplTest {
26+
27+
@JvmField
28+
@Rule
29+
val rx2SchedulersOverrideRule = Rx2SchedulersOverrideRule()
30+
31+
private lateinit var repo: GithubRepository
32+
33+
@Mock
34+
private lateinit var endpoint: GithubApi
35+
36+
@Before
37+
fun setUp() {
38+
repo = GithubRepositoryImpl(endpoint)
39+
}
40+
41+
@Test
42+
fun `should return issues when fetching FireBase ios issue`() {
43+
val expectedResponse = listOf(mock(Issue::class.java))
44+
`when`(endpoint.getFireBaseIosIssues()).thenReturn(Single.create {
45+
it.onSuccess(
46+
expectedResponse
47+
)
48+
})
49+
endpoint.getFireBaseIosIssues()
50+
.test()
51+
.assertComplete()
52+
.assertNoErrors()
53+
.assertValue(expectedResponse)
54+
}
55+
56+
57+
@Test
58+
fun `should return error when fetching FireBase ios issue`() {
59+
60+
val body = Response.error<Issue>(
61+
400,
62+
"{\"key\":[\"something went wrong\"]}".toResponseBody("application/json".toMediaTypeOrNull())
63+
)
64+
val exception = HttpException(body)
65+
66+
`when`(endpoint.getFireBaseIosIssues()).thenReturn(Single.error(exception))
67+
repo.getFireBaseIosIssues()
68+
.test()
69+
.assertValueCount(0)
70+
.assertError { it is HttpException }
71+
72+
verify(endpoint).getFireBaseIosIssues()
73+
74+
}
75+
76+
77+
@Test
78+
fun `should return comments when fetching FireBase ios issue comments`() {
79+
val expectedResponse = listOf(mock(Comment::class.java))
80+
`when`(endpoint.getFireBaseIosUserComments(1234)).thenReturn(Single.create {
81+
it.onSuccess(
82+
expectedResponse
83+
)
84+
})
85+
endpoint.getFireBaseIosUserComments(1234)
86+
.test()
87+
.assertComplete()
88+
.assertNoErrors()
89+
.assertValue(expectedResponse)
90+
}
91+
92+
93+
@Test
94+
fun `should return error when fetching FireBase ios issue comments`() {
95+
96+
val body = Response.error<Comment>(
97+
400,
98+
"{\"key\":[\"something went wrong\"]}".toResponseBody("application/json".toMediaTypeOrNull())
99+
)
100+
val exception = HttpException(body)
101+
102+
`when`(endpoint.getFireBaseIosUserComments(1234)).thenReturn(Single.error(exception))
103+
repo.getFireBaseIosUserComments(1234)
104+
.test()
105+
.assertValueCount(0)
106+
.assertError { it is HttpException }
107+
108+
verify(endpoint).getFireBaseIosUserComments(1234)
109+
110+
}
111+
112+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.githubfirebaseissue.testutil
2+
3+
import io.reactivex.android.plugins.RxAndroidPlugins
4+
import io.reactivex.plugins.RxJavaPlugins
5+
import io.reactivex.schedulers.Schedulers
6+
import org.junit.rules.TestRule
7+
import org.junit.runner.Description
8+
import org.junit.runners.model.Statement
9+
10+
class Rx2SchedulersOverrideRule : TestRule {
11+
12+
override fun apply(base: Statement?, description: Description?): Statement =
13+
object : Statement() {
14+
override fun evaluate() {
15+
RxJavaPlugins.setIoSchedulerHandler { _ -> Schedulers.trampoline() }
16+
RxJavaPlugins.setComputationSchedulerHandler { _ -> Schedulers.trampoline() }
17+
RxJavaPlugins.setNewThreadSchedulerHandler { _ -> Schedulers.trampoline() }
18+
RxAndroidPlugins.setInitMainThreadSchedulerHandler { _ -> Schedulers.trampoline() }
19+
20+
try {
21+
base?.evaluate()
22+
} finally {
23+
RxJavaPlugins.reset()
24+
RxAndroidPlugins.reset()
25+
}
26+
}
27+
}
28+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.example.githubfirebaseissue.usecase
2+
3+
import com.example.githubfirebaseissue.model.Comment
4+
import com.example.githubfirebaseissue.model.Issue
5+
import com.example.githubfirebaseissue.repository.GithubRepositoryImpl
6+
import com.example.githubfirebaseissue.testutil.Rx2SchedulersOverrideRule
7+
import io.reactivex.Single
8+
import junit.framework.Assert
9+
import org.junit.Before
10+
11+
import org.junit.Rule
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
import org.mockito.Mock
15+
import org.mockito.Mockito.*
16+
import org.mockito.junit.MockitoJUnitRunner
17+
18+
19+
@RunWith(MockitoJUnitRunner::class)
20+
class GetFireBaseIssueUseCaseImplTest {
21+
22+
23+
@JvmField
24+
@Rule
25+
val rx2SchedulersOverrideRule = Rx2SchedulersOverrideRule()
26+
27+
private lateinit var usecase: GetFireBaseIssueUseCase
28+
29+
@Mock
30+
private lateinit var repo: GithubRepositoryImpl
31+
32+
@Before
33+
fun setUp() {
34+
usecase = GetFireBaseIssueUseCaseImpl(repo)
35+
}
36+
37+
38+
@Test
39+
fun `should return FireBase ios issues successfully`() {
40+
41+
val issueResponse = mock(Issue::class.java)
42+
val issueList = mutableListOf<Issue>()
43+
issueList.add(issueResponse)
44+
`when`(repo.getFireBaseIosIssues()).thenReturn(Single.just(issueList.toList()))
45+
46+
usecase.getFireBaseIosIssues()
47+
.test()
48+
.assertComplete()
49+
.assertValueCount(1)
50+
.assertValue {
51+
Assert.assertEquals(issueList, it)
52+
true
53+
}
54+
55+
verify(repo).getFireBaseIosIssues()
56+
verifyNoMoreInteractions(repo)
57+
58+
}
59+
60+
61+
@Test
62+
fun `should return FireBase ios comment successfully`() {
63+
64+
val commentResponse = mock(Comment::class.java)
65+
val commentList = mutableListOf<Comment>()
66+
commentList.add(commentResponse)
67+
68+
val number = 1234
69+
`when`(repo.getFireBaseIosUserComments(number)).thenReturn(Single.just(commentList.toList()))
70+
71+
usecase.getFireBaseIssuesComments(number)
72+
.test()
73+
.assertComplete()
74+
.assertValueCount(1)
75+
.assertValue {
76+
Assert.assertEquals(commentList, it)
77+
true
78+
}
79+
80+
verify(repo).getFireBaseIosUserComments(number)
81+
verifyNoMoreInteractions(repo)
82+
83+
}
84+
85+
86+
87+
}

0 commit comments

Comments
 (0)