Add test for NotificationCreator
This commit is contained in:
committed by
Benoit Marty
parent
3316f840f1
commit
97c764cd79
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.push.impl.notifications.factories
|
||||
|
||||
import android.content.Intent
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||
import io.element.android.libraries.push.impl.intent.IntentProvider
|
||||
|
||||
class FakeIntentProvider : IntentProvider {
|
||||
override fun getViewRoomIntent(sessionId: SessionId, roomId: RoomId?, threadId: ThreadId?) = Intent()
|
||||
|
||||
override fun getInviteListIntent(sessionId: SessionId) = Intent()
|
||||
}
|
||||
@@ -0,0 +1,314 @@
|
||||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.push.impl.notifications.factories
|
||||
|
||||
import android.app.Notification
|
||||
import android.content.Context
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.Person
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||
import io.element.android.libraries.matrix.test.A_THREAD_ID
|
||||
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
||||
import io.element.android.libraries.push.impl.notifications.NotificationActionIds
|
||||
import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo
|
||||
import io.element.android.libraries.push.impl.notifications.channels.NotificationChannels
|
||||
import io.element.android.libraries.push.impl.notifications.factories.action.MarkAsReadActionFactory
|
||||
import io.element.android.libraries.push.impl.notifications.factories.action.QuickReplyActionFactory
|
||||
import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent
|
||||
import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent
|
||||
import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent
|
||||
import io.element.android.services.toolbox.test.strings.FakeStringProvider
|
||||
import io.element.android.services.toolbox.test.systemclock.A_FAKE_TIMESTAMP
|
||||
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.RuntimeEnvironment
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
class NotificationCreatorTest {
|
||||
@Test
|
||||
fun `test createDiagnosticNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createDiagnosticNotification()
|
||||
result.commonAssertions(
|
||||
expectedGroup = null,
|
||||
expectedCategory = NotificationCompat.CATEGORY_STATUS,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createFallbackNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createFallbackNotification(
|
||||
FallbackNotifiableEvent(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
eventId = AN_EVENT_ID,
|
||||
editedEventId = null,
|
||||
description = "description",
|
||||
canBeReplaced = false,
|
||||
isRedacted = false,
|
||||
isUpdated = false,
|
||||
timestamp = A_FAKE_TIMESTAMP,
|
||||
)
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedCategory = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createSimpleEventNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createSimpleEventNotification(
|
||||
SimpleNotifiableEvent(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
eventId = AN_EVENT_ID,
|
||||
editedEventId = null,
|
||||
noisy = false,
|
||||
title = "title",
|
||||
description = "description",
|
||||
type = null,
|
||||
timestamp = A_FAKE_TIMESTAMP,
|
||||
soundName = null,
|
||||
canBeReplaced = false,
|
||||
isRedacted = false,
|
||||
isUpdated = false,
|
||||
)
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedCategory = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createSimpleEventNotification noisy`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createSimpleEventNotification(
|
||||
SimpleNotifiableEvent(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
eventId = AN_EVENT_ID,
|
||||
editedEventId = null,
|
||||
noisy = true,
|
||||
title = "title",
|
||||
description = "description",
|
||||
type = null,
|
||||
timestamp = A_FAKE_TIMESTAMP,
|
||||
soundName = null,
|
||||
canBeReplaced = false,
|
||||
isRedacted = false,
|
||||
isUpdated = false,
|
||||
)
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedCategory = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createRoomInvitationNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createRoomInvitationNotification(
|
||||
InviteNotifiableEvent(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
eventId = AN_EVENT_ID,
|
||||
editedEventId = null,
|
||||
noisy = false,
|
||||
title = "title",
|
||||
description = "description",
|
||||
type = null,
|
||||
timestamp = A_FAKE_TIMESTAMP,
|
||||
soundName = null,
|
||||
canBeReplaced = false,
|
||||
isRedacted = false,
|
||||
isUpdated = false,
|
||||
roomName = "roomName",
|
||||
)
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedCategory = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createRoomInvitationNotification noisy`() {
|
||||
val sut = createNotificationCreator()
|
||||
val result = sut.createRoomInvitationNotification(
|
||||
InviteNotifiableEvent(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
eventId = AN_EVENT_ID,
|
||||
editedEventId = null,
|
||||
noisy = true,
|
||||
title = "title",
|
||||
description = "description",
|
||||
type = null,
|
||||
timestamp = A_FAKE_TIMESTAMP,
|
||||
soundName = null,
|
||||
canBeReplaced = false,
|
||||
isRedacted = false,
|
||||
isUpdated = false,
|
||||
roomName = "roomName",
|
||||
)
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedCategory = null,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createSummaryListNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
val matrixUser = aMatrixUser()
|
||||
val result = sut.createSummaryListNotification(
|
||||
currentUser = matrixUser,
|
||||
style = null,
|
||||
compatSummary = "compatSummary",
|
||||
noisy = false,
|
||||
lastMessageTimestamp = 123456L,
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedGroup = matrixUser.userId.value,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createSummaryListNotification noisy`() {
|
||||
val sut = createNotificationCreator()
|
||||
val matrixUser = aMatrixUser()
|
||||
val result = sut.createSummaryListNotification(
|
||||
currentUser = matrixUser,
|
||||
style = null,
|
||||
compatSummary = "compatSummary",
|
||||
noisy = true,
|
||||
lastMessageTimestamp = 123456L,
|
||||
)
|
||||
result.commonAssertions(
|
||||
expectedGroup = matrixUser.userId.value,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createMessagesListNotification`() {
|
||||
val sut = createNotificationCreator()
|
||||
aMatrixUser()
|
||||
val result = sut.createMessagesListNotification(
|
||||
messageStyle = NotificationCompat.MessagingStyle(
|
||||
Person.Builder()
|
||||
.setName("name")
|
||||
.build()
|
||||
),
|
||||
roomInfo = RoomEventGroupInfo(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
roomDisplayName = "roomDisplayName",
|
||||
isDirect = false,
|
||||
hasSmartReplyError = false,
|
||||
shouldBing = false,
|
||||
customSound = null,
|
||||
isUpdated = false,
|
||||
),
|
||||
threadId = null,
|
||||
largeIcon = null,
|
||||
lastMessageTimestamp = 123456L,
|
||||
tickerText = "tickerText",
|
||||
)
|
||||
result.commonAssertions()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test createMessagesListNotification should bing and thread`() {
|
||||
val sut = createNotificationCreator()
|
||||
aMatrixUser()
|
||||
val result = sut.createMessagesListNotification(
|
||||
messageStyle = NotificationCompat.MessagingStyle(
|
||||
Person.Builder()
|
||||
.setName("name")
|
||||
.build()
|
||||
),
|
||||
roomInfo = RoomEventGroupInfo(
|
||||
sessionId = A_SESSION_ID,
|
||||
roomId = A_ROOM_ID,
|
||||
roomDisplayName = "roomDisplayName",
|
||||
isDirect = false,
|
||||
hasSmartReplyError = false,
|
||||
shouldBing = true,
|
||||
customSound = null,
|
||||
isUpdated = false,
|
||||
),
|
||||
threadId = A_THREAD_ID,
|
||||
largeIcon = null,
|
||||
lastMessageTimestamp = 123456L,
|
||||
tickerText = "tickerText",
|
||||
)
|
||||
result.commonAssertions()
|
||||
}
|
||||
|
||||
private fun createNotificationCreator(
|
||||
context: Context = RuntimeEnvironment.getApplication(),
|
||||
buildMeta: BuildMeta = aBuildMeta(),
|
||||
notificationChannels: NotificationChannels = createNotificationChannels()
|
||||
): NotificationCreator {
|
||||
return NotificationCreator(
|
||||
context = context,
|
||||
notificationChannels = notificationChannels,
|
||||
stringProvider = FakeStringProvider("test"),
|
||||
buildMeta = buildMeta,
|
||||
pendingIntentFactory = PendingIntentFactory(
|
||||
context,
|
||||
FakeIntentProvider(),
|
||||
FakeSystemClock(),
|
||||
NotificationActionIds(buildMeta),
|
||||
),
|
||||
markAsReadActionFactory = MarkAsReadActionFactory(
|
||||
context = context,
|
||||
actionIds = NotificationActionIds(buildMeta),
|
||||
stringProvider = FakeStringProvider("MarkAsReadActionFactory"),
|
||||
clock = FakeSystemClock(),
|
||||
),
|
||||
quickReplyActionFactory = QuickReplyActionFactory(
|
||||
context = context,
|
||||
actionIds = NotificationActionIds(buildMeta),
|
||||
stringProvider = FakeStringProvider("QuickReplyActionFactory"),
|
||||
clock = FakeSystemClock(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun createNotificationChannels(): NotificationChannels {
|
||||
val context = RuntimeEnvironment.getApplication()
|
||||
return NotificationChannels(context, FakeStringProvider(""))
|
||||
}
|
||||
|
||||
private fun Notification.commonAssertions(
|
||||
expectedGroup: String? = A_SESSION_ID.value,
|
||||
expectedCategory: String? = NotificationCompat.CATEGORY_MESSAGE,
|
||||
) {
|
||||
assertThat(contentIntent).isNotNull()
|
||||
assertThat(group).isEqualTo(expectedGroup)
|
||||
assertThat(category).isEqualTo(expectedCategory)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user