Skip to content

Commit d779140

Browse files
author
Florian Renaud
committed
Fix unit tests
1 parent a06efb7 commit d779140

File tree

2 files changed

+55
-31
lines changed

2 files changed

+55
-31
lines changed

vector/src/main/java/im/vector/app/features/voicebroadcast/recording/usecase/StartVoiceBroadcastUseCase.kt

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
2828
import im.vector.app.features.voicebroadcast.recording.VoiceBroadcastRecorder
2929
import im.vector.app.features.voicebroadcast.usecase.GetOngoingVoiceBroadcastsUseCase
3030
import im.vector.lib.multipicker.utils.toMultiPickerAudioType
31+
import org.jetbrains.annotations.VisibleForTesting
3132
import org.matrix.android.sdk.api.query.QueryStringValue
3233
import org.matrix.android.sdk.api.session.Session
3334
import org.matrix.android.sdk.api.session.events.model.EventType
@@ -57,28 +58,8 @@ class StartVoiceBroadcastUseCase @Inject constructor(
5758

5859
Timber.d("## StartVoiceBroadcastUseCase: Start voice broadcast requested")
5960

60-
val powerLevelsHelper = room.getStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
61-
?.content
62-
?.toModel<PowerLevelsContent>()
63-
?.let { PowerLevelsHelper(it) }
64-
65-
when {
66-
powerLevelsHelper?.isUserAllowedToSend(session.myUserId, true, VoiceBroadcastConstants.STATE_ROOM_VOICE_BROADCAST_INFO) != true -> {
67-
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: no permission")
68-
throw VoiceBroadcastFailure.RecordingError.NoPermission
69-
}
70-
voiceBroadcastRecorder?.state == VoiceBroadcastRecorder.State.Recording || voiceBroadcastRecorder?.state == VoiceBroadcastRecorder.State.Paused -> {
71-
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: another voice broadcast")
72-
throw VoiceBroadcastFailure.RecordingError.UserAlreadyBroadcasting
73-
}
74-
getOngoingVoiceBroadcastsUseCase.execute(roomId).isNotEmpty() -> {
75-
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: user already broadcasting")
76-
throw VoiceBroadcastFailure.RecordingError.BlockedBySomeoneElse
77-
}
78-
else -> {
79-
startVoiceBroadcast(room)
80-
}
81-
}
61+
assertCanStartVoiceBroadcast(room)
62+
startVoiceBroadcast(room)
8263
}
8364

8465
private suspend fun startVoiceBroadcast(room: Room) {
@@ -124,4 +105,36 @@ class StartVoiceBroadcastUseCase @Inject constructor(
124105
)
125106
)
126107
}
108+
109+
private fun assertCanStartVoiceBroadcast(room: Room) {
110+
assertHasEnoughPowerLevels(room)
111+
assertNoOngoingVoiceBroadcast(room)
112+
}
113+
114+
@VisibleForTesting
115+
fun assertHasEnoughPowerLevels(room: Room) {
116+
val powerLevelsHelper = room.getStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
117+
?.content
118+
?.toModel<PowerLevelsContent>()
119+
?.let { PowerLevelsHelper(it) }
120+
121+
if (powerLevelsHelper?.isUserAllowedToSend(session.myUserId, true, VoiceBroadcastConstants.STATE_ROOM_VOICE_BROADCAST_INFO) != true) {
122+
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: no permission")
123+
throw VoiceBroadcastFailure.RecordingError.NoPermission
124+
}
125+
}
126+
127+
@VisibleForTesting
128+
fun assertNoOngoingVoiceBroadcast(room: Room) {
129+
when {
130+
voiceBroadcastRecorder?.state == VoiceBroadcastRecorder.State.Recording || voiceBroadcastRecorder?.state == VoiceBroadcastRecorder.State.Paused -> {
131+
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: another voice broadcast")
132+
throw VoiceBroadcastFailure.RecordingError.UserAlreadyBroadcasting
133+
}
134+
getOngoingVoiceBroadcastsUseCase.execute(room.roomId).isNotEmpty() -> {
135+
Timber.d("## StartVoiceBroadcastUseCase: Cannot start voice broadcast: user already broadcasting")
136+
throw VoiceBroadcastFailure.RecordingError.BlockedBySomeoneElse
137+
}
138+
}
139+
}
127140
}

vector/src/test/java/im/vector/app/features/voicebroadcast/usecase/StartVoiceBroadcastUseCaseTest.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,17 @@ import im.vector.app.test.fakes.FakeContext
2626
import im.vector.app.test.fakes.FakeRoom
2727
import im.vector.app.test.fakes.FakeRoomService
2828
import im.vector.app.test.fakes.FakeSession
29-
import io.mockk.clearAllMocks
3029
import io.mockk.coEvery
3130
import io.mockk.coVerify
3231
import io.mockk.every
32+
import io.mockk.justRun
3333
import io.mockk.mockk
3434
import io.mockk.slot
35+
import io.mockk.spyk
3536
import kotlinx.coroutines.test.runTest
3637
import org.amshove.kluent.shouldBe
3738
import org.amshove.kluent.shouldBeNull
39+
import org.junit.Before
3840
import org.junit.Test
3941
import org.matrix.android.sdk.api.session.events.model.Content
4042
import org.matrix.android.sdk.api.session.events.model.Event
@@ -51,14 +53,23 @@ class StartVoiceBroadcastUseCaseTest {
5153
private val fakeSession = FakeSession(fakeRoomService = FakeRoomService(fakeRoom))
5254
private val fakeVoiceBroadcastRecorder = mockk<VoiceBroadcastRecorder>(relaxed = true)
5355
private val fakeGetOngoingVoiceBroadcastsUseCase = mockk<GetOngoingVoiceBroadcastsUseCase>()
54-
private val startVoiceBroadcastUseCase = StartVoiceBroadcastUseCase(
55-
session = fakeSession,
56-
voiceBroadcastRecorder = fakeVoiceBroadcastRecorder,
57-
context = FakeContext().instance,
58-
buildMeta = mockk(),
59-
getOngoingVoiceBroadcastsUseCase = fakeGetOngoingVoiceBroadcastsUseCase,
56+
private val startVoiceBroadcastUseCase = spyk(
57+
StartVoiceBroadcastUseCase(
58+
session = fakeSession,
59+
voiceBroadcastRecorder = fakeVoiceBroadcastRecorder,
60+
context = FakeContext().instance,
61+
buildMeta = mockk(),
62+
getOngoingVoiceBroadcastsUseCase = fakeGetOngoingVoiceBroadcastsUseCase,
63+
)
6064
)
6165

66+
@Before
67+
fun setup() {
68+
every { fakeRoom.roomId } returns A_ROOM_ID
69+
justRun { startVoiceBroadcastUseCase.assertHasEnoughPowerLevels(fakeRoom) }
70+
every { fakeVoiceBroadcastRecorder.state } returns VoiceBroadcastRecorder.State.Idle
71+
}
72+
6273
@Test
6374
fun `given a room id with potential several existing voice broadcast states when calling execute then the voice broadcast is started or not`() = runTest {
6475
val cases = VoiceBroadcastState.values()
@@ -83,7 +94,7 @@ class StartVoiceBroadcastUseCaseTest {
8394

8495
private suspend fun testVoiceBroadcastStarted(voiceBroadcasts: List<VoiceBroadcast>) {
8596
// Given
86-
clearAllMocks()
97+
setup()
8798
givenVoiceBroadcasts(voiceBroadcasts)
8899
val voiceBroadcastInfoContentInterceptor = slot<Content>()
89100
coEvery { fakeRoom.stateService().sendStateEvent(any(), any(), capture(voiceBroadcastInfoContentInterceptor)) } coAnswers { AN_EVENT_ID }
@@ -106,7 +117,7 @@ class StartVoiceBroadcastUseCaseTest {
106117

107118
private suspend fun testVoiceBroadcastNotStarted(voiceBroadcasts: List<VoiceBroadcast>) {
108119
// Given
109-
clearAllMocks()
120+
setup()
110121
givenVoiceBroadcasts(voiceBroadcasts)
111122

112123
// When

0 commit comments

Comments
 (0)