Create interface for NotifiableEventResolver

This commit is contained in:
Benoit Marty
2024-05-22 15:44:50 +02:00
parent 41403b7614
commit 839242d7bc
2 changed files with 35 additions and 31 deletions

View File

@@ -55,7 +55,7 @@ import io.element.android.services.toolbox.api.systemclock.SystemClock
import timber.log.Timber
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.
@@ -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,
* 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 clock: SystemClock,
private val matrixClientProvider: MatrixClientProvider,
private val notificationMediaRepoFactory: NotificationMediaRepo.Factory,
@ApplicationContext private val context: Context,
private val permalinkParser: PermalinkParser,
) {
suspend fun resolveEvent(sessionId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent? {
) : NotifiableEventResolver {
override suspend fun resolveEvent(sessionId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent? {
// Restore session
val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return null
val notificationService = client.notificationService()

View File

@@ -59,17 +59,17 @@ import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
class NotifiableEventResolverTest {
class DefaultNotifiableEventResolverTest {
@Test
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)
assertThat(result).isNull()
}
@Test
fun `resolve event failure`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.failure(AN_EXCEPTION)
)
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
@@ -78,7 +78,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event null`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(null)
)
val result = sut.resolveEvent(A_SESSION_ID, A_ROOM_ID, AN_EVENT_ID)
@@ -87,7 +87,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message text`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -105,7 +105,7 @@ class NotifiableEventResolverTest {
@Test
@Config(qualifiers = "en")
fun `resolve event message with mention`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -123,7 +123,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve HTML formatted event message text takes plain text version`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -146,7 +146,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve incorrectly formatted event message text uses fallback`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -169,7 +169,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message audio`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -186,7 +186,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message video`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -203,7 +203,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message voice`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -220,7 +220,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message image`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -237,7 +237,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message sticker`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -254,7 +254,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message file`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -271,7 +271,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message location`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -288,7 +288,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message notice`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -305,7 +305,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve event message emote`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomMessage(
@@ -322,7 +322,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve poll`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.Poll(
@@ -339,7 +339,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve RoomMemberContent invite room`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.StateEvent.RoomMemberContent(
@@ -372,7 +372,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve RoomMemberContent invite direct`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.StateEvent.RoomMemberContent(
@@ -405,7 +405,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve RoomMemberContent other`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.StateEvent.RoomMemberContent(
@@ -421,7 +421,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve RoomEncrypted`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.RoomEncrypted
@@ -445,7 +445,7 @@ class NotifiableEventResolverTest {
@Test
fun `resolve CallInvite`() = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = NotificationContent.MessageLike.CallInvite(A_USER_ID_2)
@@ -517,7 +517,7 @@ class NotifiableEventResolverTest {
}
private fun testNull(content: NotificationContent) = runTest {
val sut = createNotifiableEventResolver(
val sut = createDefaultNotifiableEventResolver(
notificationResult = Result.success(
createNotificationData(
content = content
@@ -528,10 +528,10 @@ class NotifiableEventResolverTest {
assertThat(result).isNull()
}
private fun createNotifiableEventResolver(
private fun createDefaultNotifiableEventResolver(
notificationService: FakeNotificationService? = FakeNotificationService(),
notificationResult: Result<NotificationData?> = Result.success(null),
): NotifiableEventResolver {
): DefaultNotifiableEventResolver {
val context = RuntimeEnvironment.getApplication() as Context
notificationService?.givenGetNotificationResult(notificationResult)
val matrixClientProvider = FakeMatrixClientProvider(getClient = {
@@ -544,7 +544,7 @@ class NotifiableEventResolverTest {
val notificationMediaRepoFactory = NotificationMediaRepo.Factory {
FakeNotificationMediaRepo()
}
return NotifiableEventResolver(
return DefaultNotifiableEventResolver(
stringProvider = AndroidStringProvider(context.resources),
clock = FakeSystemClock(),
matrixClientProvider = matrixClientProvider,