Skip to content

Commit 68fb2fb

Browse files
committed
Fix and add tests
1 parent f6d1c64 commit 68fb2fb

File tree

18 files changed

+261
-50
lines changed

18 files changed

+261
-50
lines changed

appnav/src/test/kotlin/io/element/android/appnav/intent/IntentResolverTest.kt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import io.element.android.features.login.test.FakeLoginIntentResolver
1717
import io.element.android.libraries.deeplink.api.DeeplinkData
1818
import io.element.android.libraries.matrix.api.core.UserId
1919
import io.element.android.libraries.matrix.api.permalink.PermalinkData
20+
import io.element.android.libraries.matrix.test.AN_EVENT_ID
2021
import io.element.android.libraries.matrix.test.A_ROOM_ID
2122
import io.element.android.libraries.matrix.test.A_SESSION_ID
2223
import io.element.android.libraries.matrix.test.A_THREAD_ID
@@ -67,6 +68,7 @@ class IntentResolverTest {
6768
sessionId = A_SESSION_ID,
6869
roomId = A_ROOM_ID,
6970
threadId = null,
71+
eventId = null,
7072
)
7173
)
7274
val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply {
@@ -79,6 +81,7 @@ class IntentResolverTest {
7981
sessionId = A_SESSION_ID,
8082
roomId = A_ROOM_ID,
8183
threadId = null,
84+
eventId = null,
8285
)
8386
)
8487
)
@@ -91,6 +94,7 @@ class IntentResolverTest {
9194
sessionId = A_SESSION_ID,
9295
roomId = A_ROOM_ID,
9396
threadId = A_THREAD_ID,
97+
eventId = null,
9498
)
9599
)
96100
val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply {
@@ -103,6 +107,59 @@ class IntentResolverTest {
103107
sessionId = A_SESSION_ID,
104108
roomId = A_ROOM_ID,
105109
threadId = A_THREAD_ID,
110+
eventId = null,
111+
)
112+
)
113+
)
114+
}
115+
116+
@Test
117+
fun `test resolve navigation intent event`() {
118+
val sut = createIntentResolver(
119+
deeplinkParserResult = DeeplinkData.Room(
120+
sessionId = A_SESSION_ID,
121+
roomId = A_ROOM_ID,
122+
threadId = null,
123+
eventId = AN_EVENT_ID,
124+
)
125+
)
126+
val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply {
127+
action = Intent.ACTION_VIEW
128+
}
129+
val result = sut.resolve(intent)
130+
assertThat(result).isEqualTo(
131+
ResolvedIntent.Navigation(
132+
deeplinkData = DeeplinkData.Room(
133+
sessionId = A_SESSION_ID,
134+
roomId = A_ROOM_ID,
135+
threadId = null,
136+
eventId = AN_EVENT_ID,
137+
)
138+
)
139+
)
140+
}
141+
142+
@Test
143+
fun `test resolve navigation intent thread and event`() {
144+
val sut = createIntentResolver(
145+
deeplinkParserResult = DeeplinkData.Room(
146+
sessionId = A_SESSION_ID,
147+
roomId = A_ROOM_ID,
148+
threadId = A_THREAD_ID,
149+
eventId = AN_EVENT_ID,
150+
)
151+
)
152+
val intent = Intent(RuntimeEnvironment.getApplication(), Activity::class.java).apply {
153+
action = Intent.ACTION_VIEW
154+
}
155+
val result = sut.resolve(intent)
156+
assertThat(result).isEqualTo(
157+
ResolvedIntent.Navigation(
158+
deeplinkData = DeeplinkData.Room(
159+
sessionId = A_SESSION_ID,
160+
roomId = A_ROOM_ID,
161+
threadId = A_THREAD_ID,
162+
eventId = AN_EVENT_ID,
106163
)
107164
)
108165
)

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData
3131
import io.element.android.libraries.matrix.api.timeline.Timeline
3232
import io.element.android.libraries.matrix.test.AN_EVENT_ID
3333
import io.element.android.libraries.matrix.test.A_SESSION_ID
34+
import io.element.android.libraries.matrix.test.A_THREAD_ID
3435
import io.element.android.libraries.matrix.test.A_USER_ID
3536
import io.element.android.libraries.matrix.test.room.FakeBaseRoom
3637
import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService
@@ -117,7 +118,7 @@ class DefaultMessagesEntryPointTest {
117118
override fun onPermalinkClick(data: PermalinkData, pushToBackstack: Boolean) = lambdaError()
118119
override fun onForwardedToSingleRoom(roomId: RoomId) = lambdaError()
119120
}
120-
val initialTarget = MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID)
121+
val initialTarget = MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID, inThreadId = null)
121122
val params = MessagesEntryPoint.Params(initialTarget)
122123
val result = entryPoint.nodeBuilder(parentNode, BuildContext.root(null))
123124
.params(params)
@@ -130,8 +131,8 @@ class DefaultMessagesEntryPointTest {
130131

131132
@Test
132133
fun `test initial target to nav target mapping`() {
133-
assertThat(MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID).toNavTarget())
134-
.isEqualTo(MessagesFlowNode.NavTarget.Messages(AN_EVENT_ID))
134+
assertThat(MessagesEntryPoint.InitialTarget.Messages(focusedEventId = AN_EVENT_ID, inThreadId = A_THREAD_ID).toNavTarget())
135+
.isEqualTo(MessagesFlowNode.NavTarget.Messages(focusedEventId = AN_EVENT_ID, inThreadId = A_THREAD_ID))
135136
assertThat(MessagesEntryPoint.InitialTarget.PinnedMessages.toNavTarget())
136137
.isEqualTo(MessagesFlowNode.NavTarget.PinnedMessagesList)
137138
}

libraries/deeplink/impl/src/test/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreatorTest.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package io.element.android.libraries.deeplink.impl
99

1010
import com.google.common.truth.Truth.assertThat
11+
import io.element.android.libraries.matrix.test.AN_EVENT_ID
1112
import io.element.android.libraries.matrix.test.A_ROOM_ID
1213
import io.element.android.libraries.matrix.test.A_SESSION_ID
1314
import io.element.android.libraries.matrix.test.A_THREAD_ID
@@ -17,11 +18,15 @@ class DefaultDeepLinkCreatorTest {
1718
@Test
1819
fun create() {
1920
val sut = DefaultDeepLinkCreator()
20-
assertThat(sut.create(A_SESSION_ID, null, null))
21+
assertThat(sut.create(A_SESSION_ID, null, null, null))
2122
.isEqualTo("elementx://open/@alice:server.org")
22-
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, null))
23+
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, null, null))
2324
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain")
24-
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID))
25+
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID, null))
2526
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId")
27+
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID, AN_EVENT_ID))
28+
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId/\$anEventId")
29+
assertThat(sut.create(A_SESSION_ID, A_ROOM_ID, null, AN_EVENT_ID))
30+
.isEqualTo("elementx://open/@alice:server.org/!aRoomId:domain//\$anEventId")
2631
}
2732
}

libraries/deeplink/impl/src/test/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParserTest.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.content.Intent
1111
import androidx.core.net.toUri
1212
import com.google.common.truth.Truth.assertThat
1313
import io.element.android.libraries.deeplink.api.DeeplinkData
14+
import io.element.android.libraries.matrix.test.AN_EVENT_ID
1415
import io.element.android.libraries.matrix.test.A_ROOM_ID
1516
import io.element.android.libraries.matrix.test.A_SESSION_ID
1617
import io.element.android.libraries.matrix.test.A_THREAD_ID
@@ -28,6 +29,10 @@ class DefaultDeeplinkParserTest {
2829
"elementx://open/@alice:server.org/!aRoomId:domain"
2930
const val A_URI_WITH_ROOM_WITH_THREAD =
3031
"elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId"
32+
const val A_URI_WITH_ROOM_WITH_THREAD_AND_EVENT =
33+
"elementx://open/@alice:server.org/!aRoomId:domain/\$aThreadId/\$anEventId"
34+
const val A_URI_WITH_ROOM_WITH_EVENT_AND_NO_THREAD =
35+
"elementx://open/@alice:server.org/!aRoomId:domain//\$anEventId"
3136
}
3237

3338
@Test
@@ -36,9 +41,13 @@ class DefaultDeeplinkParserTest {
3641
assertThat(sut.getFromIntent(createIntent(A_URI)))
3742
.isEqualTo(DeeplinkData.Root(A_SESSION_ID))
3843
assertThat(sut.getFromIntent(createIntent(A_URI_WITH_ROOM)))
39-
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, null))
44+
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, null, null))
4045
assertThat(sut.getFromIntent(createIntent(A_URI_WITH_ROOM_WITH_THREAD)))
41-
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID))
46+
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID, null))
47+
assertThat(sut.getFromIntent(createIntent(A_URI_WITH_ROOM_WITH_THREAD_AND_EVENT)))
48+
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID, AN_EVENT_ID))
49+
assertThat(sut.getFromIntent(createIntent(A_URI_WITH_ROOM_WITH_EVENT_AND_NO_THREAD)))
50+
.isEqualTo(DeeplinkData.Room(A_SESSION_ID, A_ROOM_ID, null, AN_EVENT_ID))
4251
}
4352

4453
@Test

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultActiveNotificationsProviderTest.kt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import io.element.android.libraries.matrix.test.A_ROOM_ID
1616
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
1717
import io.element.android.libraries.matrix.test.A_SESSION_ID
1818
import io.element.android.libraries.matrix.test.A_SESSION_ID_2
19+
import io.element.android.libraries.matrix.test.A_THREAD_ID
1920
import io.element.android.libraries.push.api.notifications.NotificationIdProvider
2021
import io.mockk.every
2122
import io.mockk.mockk
@@ -80,8 +81,35 @@ class DefaultActiveNotificationsProviderTest {
8081
)
8182
val activeNotificationsProvider = createActiveNotificationsProvider(activeNotifications = activeNotifications)
8283

83-
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID, A_ROOM_ID)).hasSize(1)
84-
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID_2, A_ROOM_ID_2)).isEmpty()
84+
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID, A_ROOM_ID, null)).hasSize(1)
85+
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID_2, A_ROOM_ID_2, null)).isEmpty()
86+
}
87+
88+
@Test
89+
fun `getMessageNotificationsForRoom with thread id returns only message notifications for a thread using those session and room ids`() {
90+
val activeNotifications = listOf(
91+
aStatusBarNotification(
92+
id = notificationIdProvider.getRoomMessagesNotificationId(A_SESSION_ID),
93+
groupId = A_SESSION_ID.value,
94+
tag = "$A_ROOM_ID|$A_THREAD_ID",
95+
),
96+
aStatusBarNotification(id = notificationIdProvider.getSummaryNotificationId(A_SESSION_ID), groupId = A_SESSION_ID.value, tag = A_ROOM_ID.value),
97+
aStatusBarNotification(
98+
id = notificationIdProvider.getRoomMessagesNotificationId(A_SESSION_ID_2),
99+
groupId = A_SESSION_ID_2.value,
100+
tag = "$A_ROOM_ID|$A_THREAD_ID",
101+
),
102+
aStatusBarNotification(id = notificationIdProvider.getSummaryNotificationId(A_SESSION_ID_2), groupId = A_SESSION_ID_2.value, tag = A_ROOM_ID.value),
103+
aStatusBarNotification(
104+
id = notificationIdProvider.getRoomInvitationNotificationId(A_SESSION_ID_2),
105+
groupId = A_SESSION_ID_2.value,
106+
tag = "$A_ROOM_ID|$A_THREAD_ID",
107+
),
108+
)
109+
val activeNotificationsProvider = createActiveNotificationsProvider(activeNotifications = activeNotifications)
110+
111+
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID, A_ROOM_ID, A_THREAD_ID)).hasSize(1)
112+
assertThat(activeNotificationsProvider.getMessageNotificationsForRoom(A_SESSION_ID_2, A_ROOM_ID_2, A_THREAD_ID)).isEmpty()
85113
}
86114

87115
@Test

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultBaseRoomGroupMessageCreatorTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
5252
roomId = A_ROOM_ID,
5353
imageLoader = fakeImageLoader.getImageLoader(),
5454
existingNotification = null,
55+
threadId = null,
5556
)
5657
assertThat(result.number).isEqualTo(1)
5758
@Suppress("DEPRECATION")
@@ -74,6 +75,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
7475
roomId = A_ROOM_ID,
7576
imageLoader = fakeImageLoader.getImageLoader(),
7677
existingNotification = null,
78+
threadId = null,
7779
)
7880
@Suppress("DEPRECATION")
7981
assertThat(result.priority).isEqualTo(NotificationCompat.PRIORITY_DEFAULT)
@@ -138,6 +140,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
138140
roomId = A_ROOM_ID,
139141
imageLoader = fakeImageLoader.getImageLoader(),
140142
existingNotification = null,
143+
threadId = null,
141144
)
142145
assertThat(result.number).isEqualTo(1)
143146
assertThat(fakeImageLoader.getCoilRequests()).containsExactlyElementsIn(expectedCoilRequests)
@@ -156,6 +159,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
156159
roomId = A_ROOM_ID,
157160
imageLoader = fakeImageLoader.getImageLoader(),
158161
existingNotification = null,
162+
threadId = null,
159163
)
160164
assertThat(result.number).isEqualTo(2)
161165
assertThat(result.`when`).isEqualTo(A_TIMESTAMP + 10)
@@ -184,6 +188,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
184188
roomId = A_ROOM_ID,
185189
imageLoader = fakeImageLoader.getImageLoader(),
186190
existingNotification = null,
191+
threadId = null,
187192
)
188193
val actionTitles = result.actions?.map { it.title }
189194
assertThat(actionTitles).isEqualTo(
@@ -208,6 +213,7 @@ class DefaultBaseRoomGroupMessageCreatorTest {
208213
roomId = A_ROOM_ID,
209214
imageLoader = fakeImageLoader.getImageLoader(),
210215
existingNotification = null,
216+
threadId = null,
211217
)
212218
assertThat(result.number).isEqualTo(1)
213219
assertThat(result.`when`).isEqualTo(A_TIMESTAMP)

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package io.element.android.libraries.push.impl.notifications
99

1010
import android.content.Context
1111
import com.google.common.truth.Truth.assertThat
12+
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
1213
import io.element.android.libraries.matrix.api.core.EventId
1314
import io.element.android.libraries.matrix.api.exception.NotificationResolverException
1415
import io.element.android.libraries.matrix.api.media.MediaSource
@@ -854,7 +855,8 @@ class DefaultNotifiableEventResolverTest {
854855
fallbackNotificationFactory = FallbackNotificationFactory(
855856
clock = FakeSystemClock(),
856857
stringProvider = FakeStringProvider(defaultResult = "You have new messages.")
857-
)
858+
),
859+
featureFlagService = FakeFeatureFlagService(),
858860
)
859861
}
860862
}

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManagerTest.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class DefaultNotificationDrawerManagerTest {
6363
// For now just call all the API. Later, add more valuable tests.
6464
val matrixUser = aMatrixUser(id = A_SESSION_ID.value, displayName = "alice", avatarUrl = "mxc://data")
6565
val mockRoomGroupMessageCreator = FakeRoomGroupMessageCreator(
66-
createRoomMessageResult = lambdaRecorder { user, _, roomId, _, existingNotification ->
66+
createRoomMessageResult = lambdaRecorder { user, _, roomId, _, _, existingNotification ->
6767
assertThat(user).isEqualTo(matrixUser)
6868
assertThat(roomId).isEqualTo(A_ROOM_ID)
6969
assertThat(existingNotification).isNull()
@@ -143,9 +143,16 @@ class DefaultNotificationDrawerManagerTest {
143143
messageCreator.createRoomMessageResult.assertions()
144144
.isCalledExactly(3)
145145
.withSequence(
146-
listOf(value(aMatrixUser(id = A_SESSION_ID.value, displayName = "alice")), any(), any(), any(), any()),
147-
listOf(value(aMatrixUser(id = A_SESSION_ID.value, displayName = A_SESSION_ID.value)), any(), any(), any(), any()),
148-
listOf(value(aMatrixUser(id = A_SESSION_ID.value, displayName = A_SESSION_ID.value, avatarUrl = AN_AVATAR_URL)), any(), any(), any(), any()),
146+
listOf(value(aMatrixUser(id = A_SESSION_ID.value, displayName = "alice")), any(), any(), any(), any(), any()),
147+
listOf(value(aMatrixUser(id = A_SESSION_ID.value, displayName = A_SESSION_ID.value)), any(), any(), any(), any(), any()),
148+
listOf(
149+
value(aMatrixUser(id = A_SESSION_ID.value, displayName = A_SESSION_ID.value, avatarUrl = AN_AVATAR_URL)),
150+
any(),
151+
any(),
152+
any(),
153+
any(),
154+
any()
155+
),
149156
)
150157

151158
defaultNotificationDrawerManager.destroy()

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultSummaryGroupMessageCreatorTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class DefaultSummaryGroupMessageCreatorTest {
4242
messageCount = 1,
4343
latestTimestamp = A_FAKE_TIMESTAMP + 10,
4444
shouldBing = true,
45+
threadId = null,
4546
)
4647
),
4748
invitationNotifications = emptyList(),

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactoryTest.kt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,19 @@ class NotificationDataFactoryTest {
9393
val events = listOf(A_MESSAGE_EVENT)
9494
val expectedNotification = RoomNotification(
9595
notification = fakeRoomGroupMessageCreator.createRoomMessage(
96-
MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
97-
events,
98-
A_ROOM_ID,
99-
FakeImageLoader().getImageLoader(),
100-
null,
96+
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
97+
events = events,
98+
roomId = A_ROOM_ID,
99+
threadId = null,
100+
imageLoader = FakeImageLoader().getImageLoader(),
101+
existingNotification = null,
101102
),
102103
roomId = A_ROOM_ID,
103104
summaryLine = "A room name: Bob Hello world!",
104105
messageCount = events.size,
105106
latestTimestamp = events.maxOf { it.timestamp },
106-
shouldBing = events.any { it.noisy }
107+
shouldBing = events.any { it.noisy },
108+
threadId = null,
107109
)
108110
val roomWithMessage = listOf(A_MESSAGE_EVENT)
109111

@@ -145,17 +147,19 @@ class NotificationDataFactoryTest {
145147
val withRedactedRemoved = listOf(A_MESSAGE_EVENT.copy(eventId = EventId("\$not-redacted")))
146148
val expectedNotification = RoomNotification(
147149
notification = fakeRoomGroupMessageCreator.createRoomMessage(
148-
MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
149-
withRedactedRemoved,
150-
A_ROOM_ID,
151-
FakeImageLoader().getImageLoader(),
152-
null,
150+
currentUser = MatrixUser(A_SESSION_ID, A_SESSION_ID.value, MY_AVATAR_URL),
151+
events = withRedactedRemoved,
152+
roomId = A_ROOM_ID,
153+
threadId = null,
154+
imageLoader = FakeImageLoader().getImageLoader(),
155+
existingNotification = null,
153156
),
154157
roomId = A_ROOM_ID,
155158
summaryLine = "A room name: Bob Hello world!",
156159
messageCount = withRedactedRemoved.size,
157160
latestTimestamp = withRedactedRemoved.maxOf { it.timestamp },
158-
shouldBing = withRedactedRemoved.any { it.noisy }
161+
shouldBing = withRedactedRemoved.any { it.noisy },
162+
threadId = null,
159163
)
160164

161165
val fakeImageLoader = FakeImageLoader()

0 commit comments

Comments
 (0)