Initial commit

This commit is contained in:
2020-07-18 21:49:10 +01:00
commit e32750639f
198 changed files with 4403 additions and 0 deletions

View File

@@ -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)
}
}

View File

@@ -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)
}
}

View File

@@ -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")
}
}
}
}