mirror of
https://github.com/hmalik144/StackExchangeUsers.git
synced 2026-03-18 07:26:36 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package com.example.h_mal.stackexchangeusers
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
class ExampleUnitTest {
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.example.h_mal.stackexchangeusers.data.repositories
|
||||
|
||||
import com.example.h_mal.stackexchangeusers.data.network.api.ApiClass
|
||||
import com.example.h_mal.stackexchangeusers.data.network.model.ApiResponse
|
||||
import com.example.h_mal.stackexchangeusers.data.preferences.PreferenceProvider
|
||||
import com.example.h_mal.stackexchangeusers.data.room.AppDatabase
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNotNull
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.MockitoAnnotations
|
||||
import retrofit2.Response
|
||||
import okhttp3.ResponseBody
|
||||
import okio.IOException
|
||||
import kotlin.test.assertFailsWith
|
||||
|
||||
class RepositoryTest {
|
||||
|
||||
lateinit var repository: Repository
|
||||
|
||||
@Mock
|
||||
lateinit var api: ApiClass
|
||||
@Mock
|
||||
lateinit var db: AppDatabase
|
||||
@Mock
|
||||
lateinit var prefs: PreferenceProvider
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
repository = RepositoryImpl(api, db, prefs)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fetchUserFromApi_positiveResponse() = runBlocking {
|
||||
// GIVEN
|
||||
val input = "12345"
|
||||
val mockApiResponse = mock(ApiResponse::class.java)
|
||||
val mockResponse = Response.success(mockApiResponse)
|
||||
|
||||
// WHEN
|
||||
Mockito.`when`(api.getUsersFromApi(input)).thenReturn(
|
||||
mockResponse
|
||||
)
|
||||
Mockito.`when`(prefs.getLastSavedAt(input)).thenReturn(null)
|
||||
|
||||
// THEN
|
||||
val getUser = repository.getUsersFromApi(input)
|
||||
assertNotNull(getUser)
|
||||
assertEquals(mockApiResponse, getUser)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fetchUserFromApi_negativeResponse() = runBlocking {
|
||||
//GIVEN
|
||||
//mock retrofit error response
|
||||
val mockBody = mock(ResponseBody::class.java)
|
||||
val mockRaw = mock(okhttp3.Response::class.java)
|
||||
val re = Response.error<String>(mockBody, mockRaw)
|
||||
|
||||
//WHEN
|
||||
Mockito.`when`(api.getUsersFromApi("12345")).then { re }
|
||||
|
||||
//THEN - assert exception is not null
|
||||
val ioExceptionReturned = assertFailsWith<IOException> {
|
||||
repository.getUsersFromApi("12345")
|
||||
}
|
||||
assertNotNull(ioExceptionReturned)
|
||||
assertNotNull(ioExceptionReturned.message)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun fetchUserFromApi_alreadySearched() = runBlocking {
|
||||
// GIVEN
|
||||
val mockApiResponse = mock(ApiResponse::class.java)
|
||||
val mockResponse = Response.success(mockApiResponse)
|
||||
|
||||
//WHEN
|
||||
Mockito.`when`(api.getUsersFromApi("12345")).thenReturn(
|
||||
mockResponse
|
||||
)
|
||||
Mockito.`when`(prefs.getLastSavedAt("12345")).thenReturn(System.currentTimeMillis())
|
||||
|
||||
// THEN
|
||||
val getUser = repository.getUsersFromApi("12345")
|
||||
assertEquals(getUser, null)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.example.h_mal.stackexchangeusers.ui.main
|
||||
|
||||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.Observer
|
||||
import com.example.h_mal.stackexchangeusers.data.network.model.ApiResponse
|
||||
import com.example.h_mal.stackexchangeusers.data.network.model.User
|
||||
import com.example.h_mal.stackexchangeusers.data.repositories.Repository
|
||||
import com.example.h_mal.stackexchangeusers.data.repositories.RepositoryImpl
|
||||
import com.example.h_mal.stackexchangeusers.data.room.entities.UserItem
|
||||
import com.example.h_mal.stackexchangeusers.ui.MainViewModel
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.rules.TestRule
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.MockitoAnnotations
|
||||
import java.io.IOException
|
||||
import kotlin.test.assertFalse
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class MainViewModelTest {
|
||||
|
||||
@get:Rule
|
||||
var rule: TestRule = InstantTaskExecutorRule()
|
||||
|
||||
lateinit var viewModel: MainViewModel
|
||||
|
||||
@Mock
|
||||
lateinit var repository: Repository
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
viewModel = MainViewModel(repository)
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getApiFromRepository_SuccessfulReturn() = runBlocking{
|
||||
//GIVEN
|
||||
val mockApiResponse = mock(ApiResponse::class.java)
|
||||
|
||||
//WHEN
|
||||
Mockito.`when`(repository.getUsersFromApi("12345")).thenReturn(mockApiResponse)
|
||||
|
||||
//THEN
|
||||
viewModel.getUsers("12345")
|
||||
viewModel.operationState.observeForever{
|
||||
it.getContentIfNotHandled()?.let {result ->
|
||||
assertFalse { result }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getApiFromRepository_unsuccessfulReturn() = runBlocking{
|
||||
// WHEN
|
||||
Mockito.`when`(repository.getUsersFromApi("12345")).thenAnswer{ throw IOException("throwed") }
|
||||
|
||||
// THEN
|
||||
viewModel.getUsers("fsdfsdf")
|
||||
viewModel.operationError.observeForever{
|
||||
it.getContentIfNotHandled()?.let {result ->
|
||||
assertEquals(result, "throwed")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user