Skip to content

Commit

Permalink
[#3573] Move to Mockery (#3574)
Browse files Browse the repository at this point in the history
  • Loading branch information
mustafaozhan authored Jun 21, 2024
1 parent e044dae commit 567dde0
Show file tree
Hide file tree
Showing 36 changed files with 289 additions and 670 deletions.
5 changes: 1 addition & 4 deletions android/viewmodel/widget/android-viewmodel-widget.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
libs.plugins.apply {
alias(androidLibrary)
alias(kotlinAndroid)
alias(ksp)
alias(mokkery)
}
}

Expand Down Expand Up @@ -30,13 +30,10 @@ dependencies {
implementation(kermit)

testImplementation(test)
testImplementation(mockative)
testImplementation(coroutinesTest)
}
}

kspTest(libs.processors.mockative)

Modules.Common.Core.apply {
implementation(project(model))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ import com.oztechan.ccc.client.storage.app.AppStorage
import com.oztechan.ccc.client.storage.calculation.CalculationStorage
import com.oztechan.ccc.common.core.model.Conversion
import com.oztechan.ccc.common.core.model.Currency
import io.mockative.Mock
import io.mockative.any
import io.mockative.classOf
import io.mockative.coEvery
import io.mockative.coVerify
import io.mockative.configure
import io.mockative.every
import io.mockative.mock
import io.mockative.verify
import dev.mokkery.MockMode
import dev.mokkery.answering.returns
import dev.mokkery.every
import dev.mokkery.everySuspend
import dev.mokkery.matcher.any
import dev.mokkery.mock
import dev.mokkery.verify
import dev.mokkery.verify.VerifyMode
import dev.mokkery.verifySuspend
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.onSubscription
Expand All @@ -47,18 +47,13 @@ internal class WidgetViewModelTest {
)
}

@Mock
private val calculationStorage =
configure(mock(classOf<CalculationStorage>())) { stubsUnitByDefault = true }
private val calculationStorage = mock<CalculationStorage>(MockMode.autoUnit)

@Mock
private val backendApiService = mock(classOf<BackendApiService>())
private val backendApiService = mock<BackendApiService>()

@Mock
private val currencyDataSource = mock(classOf<CurrencyDataSource>())
private val currencyDataSource = mock<CurrencyDataSource>()

@Mock
private val appStorage = mock(classOf<AppStorage>())
private val appStorage = mock<AppStorage>()

private val base = "EUR"
private val firstBase = "USD"
Expand Down Expand Up @@ -92,10 +87,10 @@ internal class WidgetViewModelTest {
.returns(3)

runTest {
coEvery { backendApiService.getConversion(base) }
everySuspend { backendApiService.getConversion(base) }
.returns(conversion)

coEvery { currencyDataSource.getActiveCurrencies() }
everySuspend { currencyDataSource.getActiveCurrencies() }
.returns(activeCurrencyList)
}
}
Expand All @@ -106,7 +101,7 @@ internal class WidgetViewModelTest {
every { calculationStorage.currentBase }
.returns(firstBase)

coEvery { backendApiService.getConversion(firstBase) }
everySuspend { backendApiService.getConversion(firstBase) }
.returns(conversion)

repeat(activeCurrencyList.count() + 1) {
Expand All @@ -123,7 +118,7 @@ internal class WidgetViewModelTest {
every { calculationStorage.currentBase }
.returns(base)

coEvery { backendApiService.getConversion(base) }
everySuspend { backendApiService.getConversion(base) }
.returns(conversion)

repeat(activeCurrencyList.count() + 1) {
Expand All @@ -140,7 +135,7 @@ internal class WidgetViewModelTest {
every { calculationStorage.currentBase }
.returns(lastBase)

coEvery { backendApiService.getConversion(lastBase) }
everySuspend { backendApiService.getConversion(lastBase) }
.returns(conversion)

repeat(activeCurrencyList.count() + 1) {
Expand Down Expand Up @@ -177,11 +172,9 @@ internal class WidgetViewModelTest {

viewModel.event.onRefreshClick()

coVerify { backendApiService.getConversion(base) }
.wasInvoked()
verifySuspend { backendApiService.getConversion(base) }

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }
}

@Test
Expand All @@ -191,11 +184,9 @@ internal class WidgetViewModelTest {

viewModel.event.onRefreshClick()

coVerify { backendApiService.getConversion(base) }
.wasNotInvoked()
verifySuspend(VerifyMode.not) { backendApiService.getConversion(base) }

coVerify { currencyDataSource.getActiveCurrencies() }
.wasNotInvoked()
verifySuspend(VerifyMode.not) { currencyDataSource.getActiveCurrencies() }
}

@Test
Expand Down Expand Up @@ -225,11 +216,9 @@ internal class WidgetViewModelTest {

viewModel.event.onRefreshClick()

coVerify { currencyDataSource.getActiveCurrencies() }
.wasNotInvoked()
verifySuspend(VerifyMode.not) { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase = any<String>() }
.wasNotInvoked()
verify(VerifyMode.not) { calculationStorage.currentBase = any<String>() }
}

// region Event
Expand All @@ -241,22 +230,18 @@ internal class WidgetViewModelTest {

viewModel.event.onNextClick()

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase = lastBase }
.wasInvoked()

every { calculationStorage.currentBase }
.returns(lastBase)

viewModel.event.onNextClick()

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase = firstBase }
.wasInvoked()
}

@Test
Expand All @@ -267,22 +252,18 @@ internal class WidgetViewModelTest {

viewModel.event.onPreviousClick()

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase = firstBase }
.wasInvoked()

every { calculationStorage.currentBase }
.returns(firstBase)

viewModel.event.onPreviousClick()

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase = lastBase }
.wasInvoked()
}

@Test
Expand All @@ -292,14 +273,11 @@ internal class WidgetViewModelTest {

viewModel.event.onRefreshClick()

coVerify { backendApiService.getConversion(base) }
.wasInvoked()
verifySuspend { backendApiService.getConversion(base) }

coVerify { currencyDataSource.getActiveCurrencies() }
.wasInvoked()
verifySuspend { currencyDataSource.getActiveCurrencies() }

verify { calculationStorage.currentBase }
.wasInvoked()
}

@Test
Expand Down
1 change: 0 additions & 1 deletion backend/app/backend-app.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ plugins {
libs.plugins.apply {
application
alias(kotlinJvm)
alias(ksp)
}
}

Expand Down
9 changes: 5 additions & 4 deletions backend/controller/api/backend-controller-api.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import dev.mokkery.gradle.ApplicationRule

plugins {
libs.plugins.apply {
alias(kotlinJvm)
alias(ksp)
alias(mokkery)
}
}

mokkery.rule.set(ApplicationRule.Listed("test"))

dependencies {
libs.common.apply {
implementation(kermit)
implementation(koinCore)

testImplementation(mockative)
testImplementation(coroutinesTest)
testImplementation(test)
}

kspTest(libs.processors.mockative)

Modules.Common.Core.apply {
implementation(project(network))
implementation(project(model))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ package com.oztechan.ccc.backend.controller.api
import com.oztechan.ccc.backend.controller.api.mapper.toExchangeRateAPIModel
import com.oztechan.ccc.common.core.model.Conversion
import com.oztechan.ccc.common.datasource.conversion.ConversionDataSource
import io.mockative.Mock
import io.mockative.classOf
import io.mockative.coEvery
import io.mockative.coVerify
import io.mockative.mock
import dev.mokkery.answering.returns
import dev.mokkery.everySuspend
import dev.mokkery.mock
import dev.mokkery.verifySuspend
import kotlinx.coroutines.test.runTest
import kotlin.test.Test
import kotlin.test.assertEquals
Expand All @@ -17,22 +16,20 @@ internal class APIControllerTest {
APIControllerImpl(conversionDataSource)
}

@Mock
private val conversionDataSource = mock(classOf<ConversionDataSource>())
private val conversionDataSource = mock<ConversionDataSource>()

@Test
fun `getExchangeRateByBase returns getConversionByBase from ConversionDataSource`() =
runTest {
val base = "EUR"
val result = Conversion(base)

coEvery { conversionDataSource.getConversionByBase(base) }
everySuspend { conversionDataSource.getConversionByBase(base) }
.returns(result)

assertEquals(result.toExchangeRateAPIModel(), subject.getExchangeRateByBase(base))

coVerify { conversionDataSource.getConversionByBase(base) }
.wasInvoked()
verifySuspend { conversionDataSource.getConversionByBase(base) }
}

@Test
Expand All @@ -41,12 +38,11 @@ internal class APIControllerTest {
val base = "eur"
val result = Conversion(base.uppercase())

coEvery { conversionDataSource.getConversionByBase(base.uppercase()) }
everySuspend { conversionDataSource.getConversionByBase(base.uppercase()) }
.returns(result)

assertEquals(result.toExchangeRateAPIModel(), subject.getExchangeRateByBase(base))

coVerify { conversionDataSource.getConversionByBase(base.uppercase()) }
.wasInvoked()
verifySuspend { conversionDataSource.getConversionByBase(base.uppercase()) }
}
}
9 changes: 5 additions & 4 deletions backend/service/premium/backend-service-premium.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
import dev.mokkery.gradle.ApplicationRule

plugins {
libs.plugins.apply {
alias(kotlinJvm)
alias(ksp)
alias(mokkery)
}
}

mokkery.rule.set(ApplicationRule.Listed("test"))

dependencies {
libs.common.apply {
implementation(koinCore)
implementation(coroutines)
implementation(kermit)

testImplementation(mockative)
testImplementation(coroutinesTest)
testImplementation(test)
}

kspTest(libs.processors.mockative)

Modules.Common.Core.apply {
implementation(project(network))
implementation(project(model))
Expand Down
Loading

0 comments on commit 567dde0

Please sign in to comment.