Skip to content

Commit

Permalink
added sample unit test to MeetupViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
oshamahue committed Jul 7, 2019
1 parent 44d5a94 commit 95b80f2
Show file tree
Hide file tree
Showing 41 changed files with 84 additions and 9 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Expand Up @@ -43,4 +43,4 @@ dependencies {
androidTestImplementation(TestLibraries.espressoCore)
}

apply(mapOf("plugin" to "com.google.gms.google-services"))
//apply(mapOf("plugin" to "com.google.gms.google-services"))
Binary file modified buildSrc/build/classes/kotlin/main/AndroidxLibraries.class
Binary file not shown.
Binary file modified buildSrc/build/classes/kotlin/main/FirebaseLibraries.class
Binary file not shown.
Binary file modified buildSrc/build/classes/kotlin/main/TestLibraries.class
Binary file not shown.
Binary file modified buildSrc/build/classes/kotlin/main/ThirdPartyLibraries.class
Binary file not shown.
Binary file modified buildSrc/build/classes/kotlin/main/Versions.class
Binary file not shown.
Binary file modified buildSrc/build/kotlin/compileKotlin/build-history.bin
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
10
4
11
5
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified buildSrc/build/kotlin/compileKotlin/last-build.bin
Binary file not shown.
Binary file modified buildSrc/build/libs/buildSrc.jar
Binary file not shown.
10 changes: 8 additions & 2 deletions buildSrc/src/main/java/Dependencies.kt
@@ -1,12 +1,13 @@
object CoreLibraries {
const val kotlin = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlinVersion}"
const val coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-M2"

const val coroutines =
"org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutinesVersion}"
const val koin = "org.koin:koin-android:${Versions.coinVersion}"
const val koinViewModel = "org.koin:koin-android-viewmodel:${Versions.coinVersion}"
}



object ThirdPartyLibraries {
const val retrofit = "com.squareup.retrofit2:retrofit:2.6.0"
const val moshi = "com.squareup.moshi:moshi-kotlin:${Versions.moshiVersion}"
Expand Down Expand Up @@ -35,4 +36,9 @@ object TestLibraries {
const val runnner = "com.android.support.test:runner:${Versions.testRunnerVersion}"
const val espressoCore =
"com.android.support.test.espresso:espresso-core:${Versions.espressoCoreVersion}"
const val mockk = "io.mockk:mockk:${Versions.mockKversion}"

const val archCoreTesting = "android.arch.core:core-testing:1.0.0"
const val coroutinesTesting =
"org.jetbrains.kotlinx:kotlinx-coroutines-test:${Versions.coroutinesVersion}"
}
2 changes: 2 additions & 0 deletions buildSrc/src/main/java/Versions.kt
Expand Up @@ -5,6 +5,7 @@ object Release {

object Versions {

const val mockKversion = "1.9.3"
/**
* Sdk Versions
*/
Expand All @@ -17,6 +18,7 @@ object Versions {
*/
const val gradleVersion = "3.5.0-beta05"
const val kotlinVersion = "1.3.41"
const val coroutinesVersion = "1.3.0-M2"
const val appCompatVersion = "1.0.2"
const val firebaseVersion = "17.0.0"
const val constraintLayoutVersion = "1.1.3"
Expand Down
7 changes: 7 additions & 0 deletions meetupviewmodel/build.gradle.kts
Expand Up @@ -10,6 +10,10 @@ dependencies {
implementation(AndroidxLibraries.viewModel)
implementation(CoreLibraries.koin)
implementation(CoreLibraries.koinViewModel)
testImplementation(TestLibraries.mockk)
testImplementation(TestLibraries.jUnit)
testImplementation(TestLibraries.archCoreTesting)
testImplementation(TestLibraries.coroutinesTesting)
}

android {
Expand All @@ -18,6 +22,9 @@ android {
minSdkVersion(Versions.minSdkVersion)
targetSdkVersion(Versions.targetSdkVersion)
}
testOptions {
unitTests.isReturnDefaultValues = true
}
}
buildscript {

Expand Down
Expand Up @@ -8,10 +8,8 @@ import com.gdgistanbul.model.Event
import com.gdgistanbul.repo.MeetupRepo
import kotlinx.coroutines.launch

class MeetupViewModel(val meetupRepo: MeetupRepo) : ViewModel() {
init {
refreshEvents()
}
class MeetupViewModel(private val meetupRepo: MeetupRepo) : ViewModel() {


val eventsLiveData = MutableLiveData<List<Event>>()
val toastLiveData = MutableLiveData<String>()
Expand Down
@@ -0,0 +1,62 @@
package com.gdgistanbul.viewmodel

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.lifecycle.Observer
import com.gdgistanbul.model.Event
import com.gdgistanbul.repo.MeetupRepo
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.newSingleThreadContext
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.setMain
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestRule

class MeetupViewModelTest {
@get:Rule
var rule: TestRule = InstantTaskExecutorRule()

private val mainThreadSurrogate = newSingleThreadContext("UI thread")

@MockK
lateinit var meetupRepo: MeetupRepo

@Before
fun initTests() {
Dispatchers.setMain(mainThreadSurrogate)
MockKAnnotations.init(this)
}

@Test
fun `refreshEvents success`() = runBlocking {
val eventList: List<Event> = mockk()
coEvery { meetupRepo.getEvents() } returns eventList
val observer: Observer<List<Event>> = mockk()
val viewModel = MeetupViewModel(meetupRepo)
viewModel.eventsLiveData.observeForever(observer)
viewModel.refreshEvents().join()
verify { observer.onChanged(eventList) }

}


@Test
fun `refreshEvents failure`() = runBlocking {

val viewModel: MeetupViewModel = MeetupViewModel(meetupRepo)
}

@After
fun tearDown() {
Dispatchers.resetMain() // reset main dispatcher to the original Main dispatcher
mainThreadSurrogate.close()
}
}

0 comments on commit 95b80f2

Please sign in to comment.