-
Notifications
You must be signed in to change notification settings - Fork 211
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.droidcba.kedditbysteps.api | ||
|
||
import retrofit2.Call | ||
|
||
/** | ||
* News API | ||
* | ||
* @author juancho. | ||
*/ | ||
interface NewsAPI { | ||
fun getNews(after: String, limit: String): Call<RedditNewsResponse> | ||
} |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
package com.droidcba.kedditbysteps | ||
|
||
import com.droidcba.kedditbysteps.api.* | ||
import com.droidcba.kedditbysteps.commons.RedditNews | ||
import com.droidcba.kedditbysteps.features.news.NewsManager | ||
import okhttp3.MediaType | ||
import okhttp3.ResponseBody | ||
import org.junit.Before | ||
import org.junit.Test | ||
import org.mockito.Mockito | ||
import org.mockito.Mockito.`when` | ||
import org.mockito.Mockito.anyString | ||
import retrofit2.Call | ||
import retrofit2.Response | ||
import rx.observers.TestSubscriber | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
import java.util.* | ||
|
||
/** | ||
* Unit Tests for NewsManager | ||
* | ||
* @author juancho. | ||
*/ | ||
class NewsManagerTest { | ||
|
||
var testSub = TestSubscriber<RedditNews>() | ||
var apiMock = mock<NewsAPI>() | ||
var callMock = mock<Call<RedditNewsResponse>>() | ||
|
||
@Before | ||
fun setup() { | ||
testSub = TestSubscriber<RedditNews>() | ||
apiMock = mock<NewsAPI>() | ||
callMock = mock<Call<RedditNewsResponse>>() | ||
`when`(apiMock.getNews(anyString(), anyString())).thenReturn(callMock) | ||
} | ||
|
||
@Test | ||
fun testSuccess_basic() { | ||
// prepare | ||
val redditNewsResponse = RedditNewsResponse(RedditDataResponse(listOf(), null, null)) | ||
val response = Response.success(redditNewsResponse) | ||
|
||
`when`(callMock.execute()).thenReturn(response) | ||
|
||
// call | ||
val newsManager = NewsManager(apiMock) | ||
newsManager.getNews("").subscribe(testSub) | ||
|
||
// assert | ||
testSub.assertNoErrors() | ||
testSub.assertValueCount(1) | ||
testSub.assertCompleted() | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
pboos
|
||
} | ||
|
||
@Test | ||
fun testSuccess_checkOneNews() { | ||
// prepare | ||
val newsData = RedditNewsDataResponse( | ||
"author", | ||
"title", | ||
10, | ||
Date().time, | ||
"thumbnail", | ||
"url" | ||
) | ||
val newsResponse = RedditChildrenResponse(newsData) | ||
val redditNewsResponse = RedditNewsResponse(RedditDataResponse(listOf(newsResponse), null, null)) | ||
val response = Response.success(redditNewsResponse) | ||
|
||
`when`(callMock.execute()).thenReturn(response) | ||
|
||
// call | ||
val newsManager = NewsManager(apiMock) | ||
newsManager.getNews("").subscribe(testSub) | ||
|
||
// assert | ||
testSub.assertNoErrors() | ||
testSub.assertValueCount(1) | ||
testSub.assertCompleted() | ||
|
||
assert(testSub.onNextEvents[0].news[0].author == newsData.author) | ||
assert(testSub.onNextEvents[0].news[0].title == newsData.title) | ||
} | ||
|
||
@Test | ||
fun testError() { | ||
// prepare | ||
val responseError = Response.error<RedditNewsResponse>(500, | ||
ResponseBody.create(MediaType.parse("application/json"), "")) | ||
|
||
`when`(callMock.execute()).thenReturn(responseError) | ||
|
||
// call | ||
val newsManager = NewsManager(apiMock) | ||
newsManager.getNews("").subscribe(testSub) | ||
|
||
// assert | ||
assert(testSub.onErrorEvents.size == 1) | ||
This comment has been minimized.
Sorry, something went wrong.
pboos
|
||
} | ||
} | ||
|
||
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java) |
Moving from Rx1 to Rx2 involves in different changes. To be honest I didn't research about this as I already changed the code to replace Rx with Coroutines