Skip to content

Commit 740da0b

Browse files
authored
chore(deps): remove mokkery dependency (#11143)
2 parents ac5b982 + 1022a6c commit 740da0b

33 files changed

Lines changed: 399 additions & 450 deletions

File tree

feature/mail/message/list/internal/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
plugins {
22
id(ThunderbirdPlugins.Library.androidCompose)
3-
alias(libs.plugins.dev.mokkery)
43
}
54

65
android {

feature/mail/message/list/internal/src/test/kotlin/net/thunderbird/feature/mail/message/list/internal/domain/usecase/CreateArchiveFolderTest.kt

Lines changed: 67 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@ package net.thunderbird.feature.mail.message.list.internal.domain.usecase
22

33
import app.cash.turbine.test
44
import assertk.assertThat
5+
import assertk.assertions.containsExactly
56
import assertk.assertions.hasMessage
7+
import assertk.assertions.isEmpty
68
import assertk.assertions.isEqualTo
79
import assertk.assertions.isInstanceOf
810
import assertk.assertions.prop
911
import com.fsck.k9.backend.api.FolderInfo
1012
import com.fsck.k9.mail.folders.FolderServerId
11-
import dev.mokkery.matcher.any
12-
import dev.mokkery.spy
13-
import dev.mokkery.verify
14-
import dev.mokkery.verify.VerifyMode.Companion.exactly
15-
import dev.mokkery.verifySuspend
1613
import kotlin.test.Test
1714
import kotlin.uuid.ExperimentalUuidApi
1815
import kotlin.uuid.Uuid
@@ -44,7 +41,7 @@ class CreateArchiveFolderTest {
4441
// Arrange
4542
val accountUuid = Uuid.random().toHexString()
4643
val accounts = createAccountList(accountUuid = accountUuid)
47-
val accountManager = spy(FakeLegacyAccountManager(accounts))
44+
val accountManager = FakeLegacyAccountManager(accounts)
4845
val testSubject = createTestSubject(accountManager = accountManager)
4946
val folderName = ""
5047

@@ -59,7 +56,7 @@ class CreateArchiveFolderTest {
5956
.prop("folderName") { it.folderName }
6057
.isEqualTo(folderName)
6158

62-
verify(exactly(0)) { accountManager.getById(id = any()) }
59+
assertThat(accountManager.getByIdCalls).isEmpty()
6360

6461
awaitComplete()
6562
}
@@ -71,7 +68,7 @@ class CreateArchiveFolderTest {
7168
// Arrange
7269
val accountUuid = Uuid.random().toHexString()
7370
val accounts = createAccountList()
74-
val accountManager = spy(FakeLegacyAccountManager(accounts))
71+
val accountManager = FakeLegacyAccountManager(accounts)
7572
val testSubject = createTestSubject(accountManager = accountManager)
7673
val folderName = "TheFolder"
7774

@@ -84,7 +81,7 @@ class CreateArchiveFolderTest {
8481
.prop("error") { it.error }
8582
.isEqualTo(CreateArchiveFolderOutcome.Error.AccountNotFound)
8683

87-
verify(exactly(1)) { accountManager.getById(AccountIdFactory.of(accountUuid)) }
84+
assertThat(accountManager.getByIdCalls).containsExactly(AccountIdFactory.of(accountUuid))
8885
awaitComplete()
8986
}
9087
}
@@ -97,7 +94,7 @@ class CreateArchiveFolderTest {
9794
val accounts = createAccountList(accountUuid)
9895
val exception = MessagingException("this is an error")
9996
val backendFolderUpdater = FakeBackendFolderUpdater(exception)
100-
val remoteFolderCreatorFactory = spy(FakeRemoteFolderCreatorFactory(outcome = null))
97+
val remoteFolderCreatorFactory = FakeRemoteFolderCreatorFactory(outcome = null)
10198
val testSubject = createTestSubject(
10299
accounts = accounts,
103100
backendStorageFactory = FakeBackendStorageFactory(backendFolderUpdater),
@@ -116,9 +113,7 @@ class CreateArchiveFolderTest {
116113
.prop("throwable") { it.throwable }
117114
.hasMessage(exception.message)
118115

119-
verifySuspend(exactly(0)) {
120-
remoteFolderCreatorFactory.create(accountId = any())
121-
}
116+
assertThat(remoteFolderCreatorFactory.createCalls).isEmpty()
122117

123118
awaitComplete()
124119
}
@@ -135,7 +130,7 @@ class CreateArchiveFolderTest {
135130
returnEmptySetWhenCreatingFolders = true,
136131
),
137132
)
138-
val remoteFolderCreatorFactory = spy(FakeRemoteFolderCreatorFactory(outcome = null))
133+
val remoteFolderCreatorFactory = FakeRemoteFolderCreatorFactory(outcome = null)
139134
val testSubject = createTestSubject(
140135
accounts = accounts,
141136
backendStorageFactory = backendStorageFactory,
@@ -153,22 +148,9 @@ class CreateArchiveFolderTest {
153148
.prop("folderName") { it.folderName }
154149
.isEqualTo(folderName)
155150

156-
verify(exactly(1)) {
157-
// verify doesn't support verifying the extension function `createFolder`,
158-
// thus we verify the call of `createFolders(list)` instead.
159-
backendStorageFactory.backendFolderUpdater.createFolders(
160-
listOf(
161-
FolderInfo(
162-
serverId = folderName,
163-
name = folderName,
164-
type = LegacyFolderType.ARCHIVE,
165-
),
166-
),
167-
)
168-
}
169-
verifySuspend(exactly(0)) {
170-
remoteFolderCreatorFactory.create(accountId = any())
171-
}
151+
assertThat(backendStorageFactory.backendFolderUpdater.createFoldersCalls)
152+
.containsExactly(createExpectedFolderInfo(folderName))
153+
assertThat(remoteFolderCreatorFactory.createCalls).isEmpty()
172154
awaitComplete()
173155
}
174156
}
@@ -197,19 +179,8 @@ class CreateArchiveFolderTest {
197179
.prop("data") { it.data }
198180
.isEqualTo(CreateArchiveFolderOutcome.Success.LocalFolderCreated)
199181

200-
verify(exactly(1)) {
201-
// verify doesn't support verifying the extension function `createFolder`,
202-
// thus we verify the call of `createFolders(list)` instead.
203-
backendStorageFactory.backendFolderUpdater.createFolders(
204-
listOf(
205-
FolderInfo(
206-
serverId = folderName,
207-
name = folderName,
208-
type = LegacyFolderType.ARCHIVE,
209-
),
210-
),
211-
)
212-
}
182+
assertThat(backendStorageFactory.backendFolderUpdater.createFoldersCalls)
183+
.containsExactly(createExpectedFolderInfo(folderName))
213184

214185
cancelAndIgnoreRemainingEvents()
215186
}
@@ -242,19 +213,8 @@ class CreateArchiveFolderTest {
242213
.prop("serverId") { it.serverId }
243214
.isEqualTo(FolderServerId(folderName))
244215

245-
verify(exactly(1)) {
246-
// verify doesn't support verifying the extension function `createFolder`,
247-
// thus we verify the call of `createFolders(list)` instead.
248-
backendStorageFactory.backendFolderUpdater.createFolders(
249-
listOf(
250-
FolderInfo(
251-
serverId = folderName,
252-
name = folderName,
253-
type = LegacyFolderType.ARCHIVE,
254-
),
255-
),
256-
)
257-
}
216+
assertThat(backendStorageFactory.backendFolderUpdater.createFoldersCalls)
217+
.containsExactly(createExpectedFolderInfo(folderName))
258218

259219
cancelAndIgnoreRemainingEvents()
260220
}
@@ -293,19 +253,8 @@ class CreateArchiveFolderTest {
293253
),
294254
)
295255

296-
verify(exactly(1)) {
297-
// verify doesn't support verifying the extension function `createFolder`,
298-
// thus we verify the call of `createFolders(list)` instead.
299-
backendStorageFactory.backendFolderUpdater.createFolders(
300-
listOf(
301-
FolderInfo(
302-
serverId = folderName,
303-
name = folderName,
304-
type = LegacyFolderType.ARCHIVE,
305-
),
306-
),
307-
)
308-
}
256+
assertThat(backendStorageFactory.backendFolderUpdater.createFoldersCalls)
257+
.containsExactly(createExpectedFolderInfo(folderName))
309258

310259
cancelAndIgnoreRemainingEvents()
311260
}
@@ -317,7 +266,7 @@ class CreateArchiveFolderTest {
317266
// Arrange
318267
val accountUuid = Uuid.random().toHexString()
319268
val accounts = createAccountList(accountUuid)
320-
val accountManager = spy(FakeLegacyAccountManager(accounts))
269+
val accountManager = FakeLegacyAccountManager(accounts)
321270
val backendStorageFactory = FakeBackendStorageFactory(
322271
FakeBackendFolderUpdater(),
323272
)
@@ -349,44 +298,26 @@ class CreateArchiveFolderTest {
349298
.prop("data") { it.data }
350299
.isEqualTo(CreateArchiveFolderOutcome.Success.Created)
351300

352-
verify(exactly(1)) { accountManager.getById(AccountIdFactory.of(accountUuid)) }
353-
verify(exactly(1)) {
354-
// verify doesn't support verifying the extension function `createFolder`,
355-
// thus we verify the call of `createFolders(list)` instead.
356-
backendStorageFactory.backendFolderUpdater.createFolders(
357-
listOf(
358-
FolderInfo(
359-
serverId = folderName,
360-
name = folderName,
361-
type = LegacyFolderType.ARCHIVE,
362-
),
301+
assertThat(accountManager.getByIdCalls).containsExactly(AccountIdFactory.of(accountUuid))
302+
assertThat(backendStorageFactory.backendFolderUpdater.createFoldersCalls)
303+
.containsExactly(createExpectedFolderInfo(folderName))
304+
305+
assertThat(remoteFolderCreatorFactory.instance.createCalls)
306+
.containsExactly(
307+
FakeRemoteFolderCreatorFactory.CreateCall(
308+
folderServerId = FolderServerId(folderName),
309+
mustCreate = false,
310+
folderType = LegacyFolderType.ARCHIVE,
363311
),
364312
)
365-
}
366313

367-
verifySuspend(exactly(1)) {
368-
remoteFolderCreatorFactory.instance.create(
369-
folderServerId = FolderServerId(folderName),
370-
mustCreate = false,
371-
folderType = LegacyFolderType.ARCHIVE,
372-
)
373-
}
314+
assertThat(specialFolderUpdaterFactory.specialFolderUpdater.setSpecialFolderCalls)
315+
.transform { calls -> calls.map { it.type to it.selection } }
316+
.containsExactly(FolderType.ARCHIVE to SpecialFolderSelection.MANUAL)
374317

375-
verify(exactly(1)) {
376-
specialFolderUpdaterFactory.specialFolderUpdater.setSpecialFolder(
377-
type = FolderType.ARCHIVE,
378-
folderId = any(),
379-
selection = SpecialFolderSelection.MANUAL,
380-
)
381-
}
382-
383-
verify(exactly(1)) {
384-
specialFolderUpdaterFactory.specialFolderUpdater.updateSpecialFolders()
385-
}
318+
assertThat(specialFolderUpdaterFactory.specialFolderUpdater.updateSpecialFoldersCalls).isEqualTo(1)
386319

387-
verify(exactly(1)) {
388-
accountManager.saveAccount(account = any())
389-
}
320+
assertThat(accountManager.savedAccounts.map { it.id }).containsExactly(AccountIdFactory.of(accountUuid))
390321

391322
awaitComplete()
392323
}
@@ -421,22 +352,47 @@ class CreateArchiveFolderTest {
421352
val id = if (it == 0) AccountIdFactory.of(accountUuid) else AccountIdFactory.create()
422353
FakeLegacyAccount(id = id)
423354
}
355+
356+
private fun createExpectedFolderInfo(folderName: String) = listOf(
357+
FolderInfo(
358+
serverId = folderName,
359+
name = folderName,
360+
type = LegacyFolderType.ARCHIVE,
361+
),
362+
)
424363
}
425364

426-
private open class FakeRemoteFolderCreatorFactory(
427-
protected open val outcome: Outcome<RemoteFolderCreationOutcome.Success, RemoteFolderCreationOutcome.Error>?,
365+
private class FakeRemoteFolderCreatorFactory(
366+
private val outcome: Outcome<RemoteFolderCreationOutcome.Success, RemoteFolderCreationOutcome.Error>?,
428367
) : RemoteFolderCreator.Factory {
429-
open var instance: RemoteFolderCreator = spy<RemoteFolderCreator>(FakeRemoteFolderCreator())
430-
protected set
368+
val createCalls = mutableListOf<AccountId>()
369+
val instance = FakeRemoteFolderCreator()
370+
371+
override suspend fun create(accountId: AccountId): RemoteFolderCreator {
372+
createCalls += accountId
373+
return instance
374+
}
431375

432-
override suspend fun create(accountId: AccountId): RemoteFolderCreator = instance
376+
data class CreateCall(
377+
val folderServerId: FolderServerId,
378+
val mustCreate: Boolean,
379+
val folderType: LegacyFolderType,
380+
)
381+
382+
inner class FakeRemoteFolderCreator : RemoteFolderCreator {
383+
val createCalls = mutableListOf<CreateCall>()
433384

434-
private open inner class FakeRemoteFolderCreator : RemoteFolderCreator {
435385
override suspend fun create(
436386
folderServerId: FolderServerId,
437387
mustCreate: Boolean,
438388
folderType: LegacyFolderType,
439-
): Outcome<RemoteFolderCreationOutcome.Success, RemoteFolderCreationOutcome.Error> =
440-
outcome ?: error("Not expected to be called in this context.")
389+
): Outcome<RemoteFolderCreationOutcome.Success, RemoteFolderCreationOutcome.Error> {
390+
createCalls += CreateCall(
391+
folderServerId = folderServerId,
392+
mustCreate = mustCreate,
393+
folderType = folderType,
394+
)
395+
return outcome ?: error("Not expected to be called in this context.")
396+
}
441397
}
442398
}

feature/mail/message/list/internal/src/test/kotlin/net/thunderbird/feature/mail/message/list/internal/domain/usecase/GetSortCriteriaPerAccountTest.kt

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package net.thunderbird.feature.mail.message.list.internal.domain.usecase
22

33
import assertk.assertThat
44
import assertk.assertions.isEqualTo
5-
import dev.mokkery.spy
6-
import dev.mokkery.verifySuspend
75
import kotlin.test.Test
86
import kotlinx.coroutines.ExperimentalCoroutinesApi
97
import kotlinx.coroutines.test.UnconfinedTestDispatcher
@@ -24,9 +22,7 @@ class GetSortCriteriaPerAccountTest {
2422
fun `invoke should return default sort type when accounts are empty`() = runTest {
2523
// Arrange
2624
val defaultSortCriteria = SortCriteria(primary = SortType.DateDesc)
27-
val getDefaultSortCriteria = spy(
28-
obj = DomainContract.UseCase.GetDefaultSortCriteria { defaultSortCriteria },
29-
)
25+
val getDefaultSortCriteria = FakeGetDefaultSortCriteria(defaultSortCriteria)
3026
val useCase = createTestSubject(
3127
accounts = emptyList(),
3228
getDefaultSortCriteria = getDefaultSortCriteria,
@@ -38,7 +34,7 @@ class GetSortCriteriaPerAccountTest {
3834
// Assert
3935
val expected = mapOf(null to defaultSortCriteria)
4036
assertThat(result).isEqualTo(expected)
41-
verifySuspend { getDefaultSortCriteria() }
37+
getDefaultSortCriteria.assertWasCalledOnce()
4238
}
4339

4440
@Test
@@ -60,9 +56,7 @@ class GetSortCriteriaPerAccountTest {
6056
sortAscending = mapOf(DomainSortType.SORT_DATE to false),
6157
)
6258

63-
val getDefaultSortCriteria = spy(
64-
obj = DomainContract.UseCase.GetDefaultSortCriteria { defaultSortCriteria },
65-
)
59+
val getDefaultSortCriteria = FakeGetDefaultSortCriteria(defaultSortCriteria)
6660
val useCase = createTestSubject(
6761
accounts = listOf(account1, account2),
6862
getDefaultSortCriteria = getDefaultSortCriteria,
@@ -78,7 +72,7 @@ class GetSortCriteriaPerAccountTest {
7872
accountId2 to SortCriteria(primary = SortType.DateDesc),
7973
)
8074
assertThat(result).isEqualTo(expected)
81-
verifySuspend { getDefaultSortCriteria() }
75+
getDefaultSortCriteria.assertWasCalledOnce()
8276
}
8377

8478
@Test
@@ -92,9 +86,7 @@ class GetSortCriteriaPerAccountTest {
9286
sortAscending = emptyMap(),
9387
)
9488

95-
val getDefaultSortCriteria = spy(
96-
obj = DomainContract.UseCase.GetDefaultSortCriteria { defaultSortCriteria },
97-
)
89+
val getDefaultSortCriteria = FakeGetDefaultSortCriteria(defaultSortCriteria)
9890
val useCase = createTestSubject(
9991
accounts = listOf(account),
10092
getDefaultSortCriteria = getDefaultSortCriteria,
@@ -109,7 +101,7 @@ class GetSortCriteriaPerAccountTest {
109101
accountId to SortCriteria(primary = SortType.ArrivalDesc),
110102
)
111103
assertThat(result).isEqualTo(expected)
112-
verifySuspend { getDefaultSortCriteria() }
104+
getDefaultSortCriteria.assertWasCalledOnce()
113105
}
114106

115107
private fun createTestSubject(
@@ -120,4 +112,19 @@ class GetSortCriteriaPerAccountTest {
120112
getDefaultSortCriteria = getDefaultSortCriteria,
121113
ioDispatcher = UnconfinedTestDispatcher(),
122114
)
115+
116+
private class FakeGetDefaultSortCriteria(
117+
private val sortCriteria: SortCriteria,
118+
) : DomainContract.UseCase.GetDefaultSortCriteria {
119+
private var callCount = 0
120+
121+
override suspend fun invoke(): SortCriteria {
122+
callCount += 1
123+
return sortCriteria
124+
}
125+
126+
fun assertWasCalledOnce() {
127+
assertThat(callCount).isEqualTo(1)
128+
}
129+
}
123130
}

0 commit comments

Comments
 (0)