Guest User

Untitled

a guest
Jun 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. package com.gabrielfv.desafioconcrete.api
  2.  
  3. import com.gabrielfv.desafioconcrete.api.models.ApiResponse
  4. import com.gabrielfv.desafioconcrete.api.models.Pull
  5. import com.gabrielfv.desafioconcrete.api.models.Repo
  6. import io.reactivex.Observable
  7. import io.reactivex.observers.TestObserver
  8. import org.junit.Before
  9. import org.junit.Test
  10. import org.mockito.Mockito.`when`
  11. import org.mockito.Mockito.mock
  12. import retrofit2.Retrofit
  13. import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
  14. import retrofit2.mock.BehaviorDelegate
  15. import retrofit2.mock.MockRetrofit
  16. import retrofit2.mock.NetworkBehavior
  17. import java.util.concurrent.TimeUnit
  18.  
  19. class GithubApiTest {
  20. lateinit var api: GithubApi
  21. lateinit var mockGithubApiService: MockGithubApiService
  22. lateinit var repoResponse: List<Repo>
  23. lateinit var pullResponse: List<Pull>
  24.  
  25. val networkBehavior = NetworkBehavior.create()
  26.  
  27. inner class MockGithubApiService(
  28. private val delegate: BehaviorDelegate<GithubApiService>) : GithubApiService {
  29. override fun searchRepos(
  30. query: String,
  31. sortBy: String?,
  32. order: String?,
  33. page: Int?): Observable<ApiResponse>? {
  34. val response = mock(ApiResponse::class.java)
  35. `when`(response.items).thenReturn(repoResponse)
  36. `when`(response.count).thenReturn(repoResponse.size)
  37.  
  38. return delegate.returningResponse(response).searchRepos(query, sortBy, order, page)
  39. }
  40.  
  41. override fun getRepoPulls(
  42. owner: String,
  43. name: String,
  44. page: Int): Observable<List<Pull>>? {
  45. val response = pullResponse
  46. return delegate.returningResponse(response).getRepoPulls(owner, name, page)
  47. }
  48. }
  49.  
  50. @Before
  51. fun setUp() {
  52. repoResponse = listOf(
  53. mock(Repo::class.java),
  54. mock(Repo::class.java)
  55. )
  56.  
  57. pullResponse = listOf(
  58. mock(Pull::class.java),
  59. mock(Pull::class.java),
  60. mock(Pull::class.java)
  61. )
  62.  
  63. val retrofit = Retrofit.Builder()
  64. .baseUrl(Constants.GITHUB_API_BASE_URL)
  65. .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  66. .build()
  67.  
  68. val mockRetrofit = MockRetrofit.Builder(retrofit)
  69. .networkBehavior(networkBehavior)
  70. .build()
  71.  
  72. mockGithubApiService = MockGithubApiService(
  73. mockRetrofit.create(GithubApiService::class.java))
  74. }
  75.  
  76. @Test
  77. fun apiSearchCallReadsCorrectly() {
  78. givenNetworkFailurePercentIs(0)
  79. val observer: TestObserver<ApiResponse> = TestObserver()
  80. mockGithubApiService.searchRepos("")
  81. ?.subscribe(observer)
  82.  
  83. observer.assertNoErrors()
  84. observer.assertValue { res ->
  85. res.items.size == repoResponse.size && res.items.all { item -> item in repoResponse }
  86. }
  87. observer.assertComplete()
  88. }
  89.  
  90. @Test
  91. fun apiPullsCallReadsCorrectly() {
  92. givenNetworkFailurePercentIs(0)
  93. val observer: TestObserver<List<Pull>> = TestObserver()
  94. mockGithubApiService.getRepoPulls("", "")
  95. ?.subscribe(observer)
  96.  
  97. observer.assertNoErrors()
  98. observer.assertValue { res ->
  99. res.size == pullResponse.size && res.all { item -> item in pullResponse }
  100. }
  101. observer.assertComplete()
  102.  
  103. }
  104.  
  105. private fun givenNetworkFailurePercentIs(pct: Int) {
  106. networkBehavior.setDelay(0, TimeUnit.MILLISECONDS)
  107. networkBehavior.setVariancePercent(0)
  108. networkBehavior.setFailurePercent(pct)
  109. }
  110. }
Add Comment
Please, Sign In to add comment