Create interface for NotifiableEventResolver
This commit is contained in:
parent
41403b7614
commit
839242d7bc
2 changed files with 35 additions and 31 deletions
|
|
@ -55,7 +55,7 @@ import io.element.android.services.toolbox.api.systemclock.SystemClock
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
private val loggerTag = LoggerTag("NotifiableEventResolver", LoggerTag.NotificationLoggerTag)
|
private val loggerTag = LoggerTag("DefaultNotifiableEventResolver", LoggerTag.NotificationLoggerTag)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The notifiable event resolver is able to create a NotifiableEvent (view model for notifications) from an sdk Event.
|
* The notifiable event resolver is able to create a NotifiableEvent (view model for notifications) from an sdk Event.
|
||||||
|
|
@ -63,15 +63,19 @@ private val loggerTag = LoggerTag("NotifiableEventResolver", LoggerTag.Notificat
|
||||||
* The NotifiableEventResolver is the only aware of session/store, the NotificationDrawerManager has no knowledge of that,
|
* The NotifiableEventResolver is the only aware of session/store, the NotificationDrawerManager has no knowledge of that,
|
||||||
* this pattern allow decoupling between the object responsible of displaying notifications and the matrix sdk.
|
* this pattern allow decoupling between the object responsible of displaying notifications and the matrix sdk.
|
||||||
*/
|
*/
|
||||||
class NotifiableEventResolver @Inject constructor(
|
interface NotifiableEventResolver {
|
||||||
|
suspend fun resolveEvent(sessionId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent?
|
||||||
|
}
|
||||||
|
|
||||||
|
class DefaultNotifiableEventResolver @Inject constructor(
|
||||||
private val stringProvider: StringProvider,
|
private val stringProvider: StringProvider,
|
||||||
private val clock: SystemClock,
|
private val clock: SystemClock,
|
||||||
private val matrixClientProvider: MatrixClientProvider,
|
private val matrixClientProvider: MatrixClientProvider,
|
||||||
private val notificationMediaRepoFactory: NotificationMediaRepo.Factory,
|
private val notificationMediaRepoFactory: NotificationMediaRepo.Factory,
|
||||||
@ApplicationContext private val context: Context,
|
@ApplicationContext private val context: Context,
|
||||||
private val permalinkParser: PermalinkParser,
|
private val permalinkParser: PermalinkParser,
|
||||||
) {
|
) : NotifiableEventResolver {
|
||||||
suspend fun resolveEvent(sessionId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent? {
|
override suspend fun resolveEvent(sessionId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent? {
|
||||||
// Restore session
|
// Restore session
|
||||||
val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return null
|
val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return null
|
||||||
val notificationService = client.notificationService()
|
val notificationService = client.notificationService()
|
||||||
|
|
@ -59,17 +59,17 @@ import org.robolectric.RuntimeEnvironment
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
class NotifiableEventResolverTest {
|
class DefaultNotifiableEventResolverTest {
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event no session`() = runTest {
|
fun `resolve event no session`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(notificationService = null)
|
val sut = createDefaultNotifiableEventResolver(notificationService = null)
|
||||||
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
||||||
assertThat(result).isNull()
|
assertThat(result).isNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event failure`() = runTest {
|
fun `resolve event failure`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.failure(AN_EXCEPTION)
|
notificationResult = Result.failure(AN_EXCEPTION)
|
||||||
)
|
)
|
||||||
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
||||||
|
|
@ -78,7 +78,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event null`() = runTest {
|
fun `resolve event null`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(null)
|
notificationResult = Result.success(null)
|
||||||
)
|
)
|
||||||
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
|
||||||
|
|
@ -87,7 +87,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message text`() = runTest {
|
fun `resolve event message text`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -105,7 +105,7 @@ class NotifiableEventResolverTest {
|
||||||
@Test
|
@Test
|
||||||
@Config(qualifiers = "en")
|
@Config(qualifiers = "en")
|
||||||
fun `resolve event message with mention`() = runTest {
|
fun `resolve event message with mention`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -123,7 +123,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve HTML formatted event message text takes plain text version`() = runTest {
|
fun `resolve HTML formatted event message text takes plain text version`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -146,7 +146,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve incorrectly formatted event message text uses fallback`() = runTest {
|
fun `resolve incorrectly formatted event message text uses fallback`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -169,7 +169,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message audio`() = runTest {
|
fun `resolve event message audio`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -186,7 +186,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message video`() = runTest {
|
fun `resolve event message video`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -203,7 +203,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message voice`() = runTest {
|
fun `resolve event message voice`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -220,7 +220,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message image`() = runTest {
|
fun `resolve event message image`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -237,7 +237,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message sticker`() = runTest {
|
fun `resolve event message sticker`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -254,7 +254,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message file`() = runTest {
|
fun `resolve event message file`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -271,7 +271,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message location`() = runTest {
|
fun `resolve event message location`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -288,7 +288,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message notice`() = runTest {
|
fun `resolve event message notice`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -305,7 +305,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve event message emote`() = runTest {
|
fun `resolve event message emote`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomMessage(
|
content = NotificationContent.MessageLike.RoomMessage(
|
||||||
|
|
@ -322,7 +322,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve poll`() = runTest {
|
fun `resolve poll`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.Poll(
|
content = NotificationContent.MessageLike.Poll(
|
||||||
|
|
@ -339,7 +339,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve RoomMemberContent invite room`() = runTest {
|
fun `resolve RoomMemberContent invite room`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.StateEvent.RoomMemberContent(
|
content = NotificationContent.StateEvent.RoomMemberContent(
|
||||||
|
|
@ -372,7 +372,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve RoomMemberContent invite direct`() = runTest {
|
fun `resolve RoomMemberContent invite direct`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.StateEvent.RoomMemberContent(
|
content = NotificationContent.StateEvent.RoomMemberContent(
|
||||||
|
|
@ -405,7 +405,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve RoomMemberContent other`() = runTest {
|
fun `resolve RoomMemberContent other`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.StateEvent.RoomMemberContent(
|
content = NotificationContent.StateEvent.RoomMemberContent(
|
||||||
|
|
@ -421,7 +421,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve RoomEncrypted`() = runTest {
|
fun `resolve RoomEncrypted`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.RoomEncrypted
|
content = NotificationContent.MessageLike.RoomEncrypted
|
||||||
|
|
@ -445,7 +445,7 @@ class NotifiableEventResolverTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `resolve CallInvite`() = runTest {
|
fun `resolve CallInvite`() = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = NotificationContent.MessageLike.CallInvite(A_USER_ID_2)
|
content = NotificationContent.MessageLike.CallInvite(A_USER_ID_2)
|
||||||
|
|
@ -517,7 +517,7 @@ class NotifiableEventResolverTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testNull(content: NotificationContent) = runTest {
|
private fun testNull(content: NotificationContent) = runTest {
|
||||||
val sut = createNotifiableEventResolver(
|
val sut = createDefaultNotifiableEventResolver(
|
||||||
notificationResult = Result.success(
|
notificationResult = Result.success(
|
||||||
createNotificationData(
|
createNotificationData(
|
||||||
content = content
|
content = content
|
||||||
|
|
@ -528,10 +528,10 @@ class NotifiableEventResolverTest {
|
||||||
assertThat(result).isNull()
|
assertThat(result).isNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createNotifiableEventResolver(
|
private fun createDefaultNotifiableEventResolver(
|
||||||
notificationService: FakeNotificationService? = FakeNotificationService(),
|
notificationService: FakeNotificationService? = FakeNotificationService(),
|
||||||
notificationResult: Result<NotificationData?> = Result.success(null),
|
notificationResult: Result<NotificationData?> = Result.success(null),
|
||||||
): NotifiableEventResolver {
|
): DefaultNotifiableEventResolver {
|
||||||
val context = RuntimeEnvironment.getApplication() as Context
|
val context = RuntimeEnvironment.getApplication() as Context
|
||||||
notificationService?.givenGetNotificationResult(notificationResult)
|
notificationService?.givenGetNotificationResult(notificationResult)
|
||||||
val matrixClientProvider = FakeMatrixClientProvider(getClient = {
|
val matrixClientProvider = FakeMatrixClientProvider(getClient = {
|
||||||
|
|
@ -544,7 +544,7 @@ class NotifiableEventResolverTest {
|
||||||
val notificationMediaRepoFactory = NotificationMediaRepo.Factory {
|
val notificationMediaRepoFactory = NotificationMediaRepo.Factory {
|
||||||
FakeNotificationMediaRepo()
|
FakeNotificationMediaRepo()
|
||||||
}
|
}
|
||||||
return NotifiableEventResolver(
|
return DefaultNotifiableEventResolver(
|
||||||
stringProvider = AndroidStringProvider(context.resources),
|
stringProvider = AndroidStringProvider(context.resources),
|
||||||
clock = FakeSystemClock(),
|
clock = FakeSystemClock(),
|
||||||
matrixClientProvider = matrixClientProvider,
|
matrixClientProvider = matrixClientProvider,
|
||||||
Loading…
Add table
Add a link
Reference in a new issue