Skip to content

Commit 4572419

Browse files
authored
Stronger lambda error (#4771)
* Make sure lambdaError() make the test fail in all circumstances. * Fix existing errors on tests. * Uniformize the way we are creating class under test. * Cleanup * Fix typo * Fix failing test after rebase.
1 parent 5b9da3c commit 4572419

File tree

19 files changed

+296
-286
lines changed

19 files changed

+296
-286
lines changed

appnav/src/test/kotlin/io/element/android/appnav/JoinedRoomLoadedFlowNodeTest.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import io.element.android.libraries.matrix.test.room.FakeBaseRoom
3030
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
3131
import io.element.android.services.appnavstate.api.ActiveRoomsHolder
3232
import io.element.android.services.appnavstate.test.FakeAppNavigationStateService
33-
import kotlinx.coroutines.CoroutineScope
33+
import kotlinx.coroutines.test.TestScope
3434
import kotlinx.coroutines.test.runTest
3535
import org.junit.Rule
3636
import org.junit.Test
@@ -98,19 +98,18 @@ class JoinedRoomLoadedFlowNodeTest {
9898
}
9999
}
100100

101-
private fun createJoinedRoomLoadedFlowNode(
101+
private fun TestScope.createJoinedRoomLoadedFlowNode(
102102
plugins: List<Plugin>,
103103
messagesEntryPoint: MessagesEntryPoint = FakeMessagesEntryPoint(),
104104
roomDetailsEntryPoint: RoomDetailsEntryPoint = FakeRoomDetailsEntryPoint(),
105105
activeRoomsHolder: ActiveRoomsHolder = ActiveRoomsHolder(),
106-
coroutineScope: CoroutineScope,
107106
) = JoinedRoomLoadedFlowNode(
108107
buildContext = BuildContext.root(savedStateMap = null),
109108
plugins = plugins,
110109
messagesEntryPoint = messagesEntryPoint,
111110
roomDetailsEntryPoint = roomDetailsEntryPoint,
112111
appNavigationStateService = FakeAppNavigationStateService(),
113-
appCoroutineScope = coroutineScope,
112+
appCoroutineScope = this,
114113
roomComponentFactory = FakeRoomComponentFactory(),
115114
matrixClient = FakeMatrixClient(),
116115
activeRoomsHolder = activeRoomsHolder,
@@ -125,7 +124,6 @@ class JoinedRoomLoadedFlowNodeTest {
125124
val roomFlowNode = createJoinedRoomLoadedFlowNode(
126125
plugins = listOf(inputs),
127126
messagesEntryPoint = fakeMessagesEntryPoint,
128-
coroutineScope = this
129127
)
130128
// WHEN
131129
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
@@ -148,7 +146,6 @@ class JoinedRoomLoadedFlowNodeTest {
148146
plugins = listOf(inputs),
149147
messagesEntryPoint = fakeMessagesEntryPoint,
150148
roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
151-
coroutineScope = this
152149
)
153150
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()
154151
// WHEN
@@ -171,7 +168,6 @@ class JoinedRoomLoadedFlowNodeTest {
171168
plugins = listOf(inputs),
172169
messagesEntryPoint = fakeMessagesEntryPoint,
173170
roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
174-
coroutineScope = this,
175171
activeRoomsHolder = activeRoomsHolder,
176172
)
177173

@@ -197,7 +193,6 @@ class JoinedRoomLoadedFlowNodeTest {
197193
plugins = listOf(inputs),
198194
messagesEntryPoint = fakeMessagesEntryPoint,
199195
roomDetailsEntryPoint = fakeRoomDetailsEntryPoint,
200-
coroutineScope = this,
201196
activeRoomsHolder = activeRoomsHolder,
202197
)
203198
val roomFlowNodeTestHelper = roomFlowNode.parentNodeTestHelper()

features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt

Lines changed: 118 additions & 152 deletions
Large diffs are not rendered by default.

features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultCallWidgetProviderTest.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,19 @@ class DefaultCallWidgetProviderTest {
8787
}
8888
val activeRoomsHolder = ActiveRoomsHolder().apply {
8989
// A current active room with the same room id
90-
addRoom(FakeJoinedRoom(baseRoom = FakeBaseRoom(roomId = A_ROOM_ID)))
90+
addRoom(
91+
FakeJoinedRoom(
92+
baseRoom = FakeBaseRoom(roomId = A_ROOM_ID),
93+
generateWidgetWebViewUrlResult = { _, _, _, _ -> Result.success("url") },
94+
getWidgetDriverResult = { Result.success(FakeMatrixWidgetDriver()) },
95+
)
96+
)
9197
}
9298
val provider = createProvider(
9399
matrixClientProvider = FakeMatrixClientProvider { Result.success(client) },
94100
activeRoomsHolder = activeRoomsHolder
95101
)
96-
assertThat(provider.getWidget(A_SESSION_ID, A_ROOM_ID, "clientId", "languageTag", "theme").isFailure).isTrue()
102+
assertThat(provider.getWidget(A_SESSION_ID, A_ROOM_ID, "clientId", "languageTag", "theme").isSuccess).isTrue()
97103
}
98104

99105
@Test

features/lockscreen/impl/src/test/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenterTest.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ import io.element.android.features.lockscreen.impl.storage.LockScreenStore
2020
import io.element.android.tests.testutils.awaitLastSequentialItem
2121
import io.element.android.tests.testutils.consumeItemsUntilPredicate
2222
import io.element.android.tests.testutils.test
23-
import kotlinx.coroutines.CoroutineScope
23+
import kotlinx.coroutines.test.TestScope
2424
import kotlinx.coroutines.test.runTest
2525
import org.junit.Test
2626

2727
class LockScreenSettingsPresenterTest {
2828
@Test
2929
fun `present - remove pin option is hidden when mandatory`() = runTest {
30-
val presenter = createLockScreenSettingsPresenter(this, lockScreenConfig = aLockScreenConfig(isPinMandatory = true))
30+
val presenter = createLockScreenSettingsPresenter(lockScreenConfig = aLockScreenConfig(isPinMandatory = true))
3131
presenter.test {
3232
awaitItem().also { state ->
3333
assertThat(state.showRemovePinOption).isFalse()
@@ -37,7 +37,7 @@ class LockScreenSettingsPresenterTest {
3737

3838
@Test
3939
fun `present - remove pin flow`() = runTest {
40-
val presenter = createLockScreenSettingsPresenter(this)
40+
val presenter = createLockScreenSettingsPresenter()
4141
presenter.test {
4242
consumeItemsUntilPredicate { state ->
4343
state.showRemovePinOption
@@ -71,7 +71,6 @@ class LockScreenSettingsPresenterTest {
7171
isDeviceSecured = true,
7272
)
7373
val presenter = createLockScreenSettingsPresenter(
74-
coroutineScope = this,
7574
biometricAuthenticatorManager = fakeBiometricAuthenticatorManager
7675
)
7776
presenter.test {
@@ -88,7 +87,6 @@ class LockScreenSettingsPresenterTest {
8887
}
8988
)
9089
val presenter = createLockScreenSettingsPresenter(
91-
coroutineScope = this,
9290
biometricAuthenticatorManager = fakeBiometricAuthenticatorManager
9391
)
9492
presenter.test {
@@ -110,7 +108,6 @@ class LockScreenSettingsPresenterTest {
110108
}
111109
)
112110
val presenter = createLockScreenSettingsPresenter(
113-
coroutineScope = this,
114111
biometricAuthenticatorManager = fakeBiometricAuthenticatorManager
115112
)
116113
presenter.test {
@@ -130,7 +127,6 @@ class LockScreenSettingsPresenterTest {
130127
)
131128
val lockScreenStore = InMemoryLockScreenStore()
132129
val presenter = createLockScreenSettingsPresenter(
133-
coroutineScope = this,
134130
lockScreenStore = lockScreenStore,
135131
biometricAuthenticatorManager = fakeBiometricAuthenticatorManager
136132
)
@@ -148,8 +144,7 @@ class LockScreenSettingsPresenterTest {
148144
}
149145
}
150146

151-
private suspend fun createLockScreenSettingsPresenter(
152-
coroutineScope: CoroutineScope,
147+
private suspend fun TestScope.createLockScreenSettingsPresenter(
153148
lockScreenConfig: LockScreenConfig = aLockScreenConfig(),
154149
biometricAuthenticatorManager: BiometricAuthenticatorManager = FakeBiometricAuthenticatorManager(),
155150
lockScreenStore: LockScreenStore = InMemoryLockScreenStore(),
@@ -160,7 +155,7 @@ class LockScreenSettingsPresenterTest {
160155
return LockScreenSettingsPresenter(
161156
lockScreenStore = lockScreenStore,
162157
pinCodeManager = pinCodeManager,
163-
coroutineScope = coroutineScope,
158+
coroutineScope = this,
164159
lockScreenConfig = lockScreenConfig,
165160
biometricAuthenticatorManager = biometricAuthenticatorManager,
166161
)

features/lockscreen/impl/src/test/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenterTest.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import io.element.android.libraries.architecture.AsyncAction
2424
import io.element.android.libraries.architecture.AsyncData
2525
import io.element.android.tests.testutils.lambda.assert
2626
import io.element.android.tests.testutils.lambda.lambdaRecorder
27-
import kotlinx.coroutines.CoroutineScope
27+
import kotlinx.coroutines.test.TestScope
2828
import kotlinx.coroutines.test.runTest
2929
import org.junit.Test
3030

@@ -34,7 +34,7 @@ class PinUnlockPresenterTest {
3434

3535
@Test
3636
fun `present - success verify flow`() = runTest {
37-
val presenter = createPinUnlockPresenter(this)
37+
val presenter = createPinUnlockPresenter()
3838
moleculeFlow(RecompositionMode.Immediate) {
3939
presenter.present()
4040
}.test {
@@ -71,7 +71,7 @@ class PinUnlockPresenterTest {
7171

7272
@Test
7373
fun `present - failure verify flow`() = runTest {
74-
val presenter = createPinUnlockPresenter(this)
74+
val presenter = createPinUnlockPresenter()
7575
moleculeFlow(RecompositionMode.Immediate) {
7676
presenter.present()
7777
}.test {
@@ -100,7 +100,7 @@ class PinUnlockPresenterTest {
100100
fun `present - forgot pin flow`() = runTest {
101101
val signOutLambda = lambdaRecorder<Boolean, Unit> {}
102102
val signOut = FakeLogoutUseCase(signOutLambda)
103-
val presenter = createPinUnlockPresenter(this, logoutUseCase = signOut)
103+
val presenter = createPinUnlockPresenter(logoutUseCase = signOut)
104104
moleculeFlow(RecompositionMode.Immediate) {
105105
presenter.present()
106106
}.test {
@@ -135,8 +135,7 @@ class PinUnlockPresenterTest {
135135
dataOrNull()?.assertText(text)
136136
}
137137

138-
private suspend fun createPinUnlockPresenter(
139-
scope: CoroutineScope,
138+
private suspend fun TestScope.createPinUnlockPresenter(
140139
biometricAuthenticatorManager: BiometricAuthenticatorManager = FakeBiometricAuthenticatorManager(),
141140
callback: PinCodeManager.Callback = DefaultPinCodeManagerCallback(),
142141
logoutUseCase: FakeLogoutUseCase = FakeLogoutUseCase(logoutLambda = { "" }),
@@ -149,7 +148,7 @@ class PinUnlockPresenterTest {
149148
pinCodeManager = pinCodeManager,
150149
biometricAuthenticatorManager = biometricAuthenticatorManager,
151150
logoutUseCase = logoutUseCase,
152-
coroutineScope = scope,
151+
coroutineScope = this,
153152
pinUnlockHelper = PinUnlockHelper(biometricAuthenticatorManager, pinCodeManager),
154153
)
155154
}

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/attachments/AttachmentsPreviewPresenterTest.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,17 @@ class AttachmentsPreviewPresenterTest {
513513
@Test
514514
fun `present - dismissing the progress dialog stops media upload with media queue`() = runTest {
515515
val onDoneListenerResult = lambdaRecorder<Unit> {}
516-
val presenter = createAttachmentsPreviewPresenter(mediaUploadOnSendQueueEnabled = true, onDoneListener = onDoneListenerResult)
516+
val presenter = createAttachmentsPreviewPresenter(
517+
room = FakeJoinedRoom(
518+
liveTimeline = FakeTimeline().apply {
519+
sendFileLambda = { _, _, _, _, _, _ ->
520+
Result.success(FakeMediaUploadHandler())
521+
}
522+
}
523+
),
524+
mediaUploadOnSendQueueEnabled = true,
525+
onDoneListener = onDoneListenerResult,
526+
)
517527
moleculeFlow(RecompositionMode.Immediate) {
518528
presenter.present()
519529
}.test {

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenterTest.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import io.element.android.libraries.matrix.test.timeline.FakeTimeline
2121
import io.element.android.libraries.matrix.test.timeline.LiveTimelineProvider
2222
import io.element.android.tests.testutils.WarmUpRule
2323
import io.element.android.tests.testutils.lambda.lambdaRecorder
24-
import kotlinx.coroutines.CoroutineScope
24+
import kotlinx.coroutines.test.TestScope
2525
import kotlinx.coroutines.test.runTest
2626
import org.junit.Rule
2727
import org.junit.Test
@@ -91,13 +91,12 @@ class ForwardMessagesPresenterTest {
9191
}
9292
}
9393

94-
private fun CoroutineScope.aForwardMessagesPresenter(
94+
private fun TestScope.aForwardMessagesPresenter(
9595
eventId: EventId = AN_EVENT_ID,
9696
fakeRoom: FakeJoinedRoom = FakeJoinedRoom(),
97-
coroutineScope: CoroutineScope = this,
9897
) = ForwardMessagesPresenter(
9998
eventId = eventId.value,
10099
timelineProvider = LiveTimelineProvider(fakeRoom),
101-
appCoroutineScope = coroutineScope,
100+
appCoroutineScope = this,
102101
)
103102
}

0 commit comments

Comments
 (0)