From 0190cb5626078f99f8b800a219a5b0397b56589b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Aug 2024 11:14:51 +0200 Subject: [PATCH] Add UI test on clicking on message shield. Need to add content description on the shield icon. --- .../components/TimelineEventTimestampView.kt | 2 +- .../impl/timeline/TimelineViewTest.kt | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index a7500531b2..69c2a807a2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -87,7 +87,7 @@ fun TimelineEventTimestampView( Spacer(modifier = Modifier.width(2.dp)) Icon( imageVector = shield.toIcon(), - contentDescription = null, + contentDescription = shield.toText(), modifier = Modifier .size(15.dp) .clickable { onShieldClick(shield) }, diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index e66bd4c7a1..bb8ea58315 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -22,17 +22,21 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.performClick import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.messages.impl.timeline.components.aCriticalShield import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel import io.element.android.features.messages.impl.typing.TypingNotificationState import io.element.android.features.messages.impl.typing.aTypingNotificationState import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.Timeline +import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.tests.testutils.EnsureNeverCalled import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test @@ -97,6 +101,47 @@ class TimelineViewTest { rule.onNodeWithContentDescription(contentDescription).performClick() eventsRecorder.assertSingle(TimelineEvents.JumpToLive) } + + @Test + fun `show shield dialog`() { + val eventsRecorder = EventsRecorder() + rule.setTimelineView( + state = aTimelineState( + timelineItems = persistentListOf( + aTimelineItemEvent( + // Do not use a Text because EditorStyledText cannot be used in UI test. + content = aTimelineItemImageContent(), + messageShield = MessageShield.UnverifiedIdentity(true), + ), + ), + eventSink = eventsRecorder, + ), + ) + val contentDescription = rule.activity.getString(CommonStrings.event_shield_reason_unverified_identity) + rule.onNodeWithContentDescription(contentDescription).performClick() + eventsRecorder.assertList( + listOf( + TimelineEvents.OnScrollFinished(0), + TimelineEvents.OnScrollFinished(0), + TimelineEvents.OnScrollFinished(0), + TimelineEvents.ShowShieldDialog(MessageShield.UnverifiedIdentity(true)), + ) + ) + } + + @Test + fun `hide shield dialog`() { + val eventsRecorder = EventsRecorder() + rule.setTimelineView( + state = aTimelineState( + isLive = false, + eventSink = eventsRecorder, + messageShield = aCriticalShield(), + ), + ) + rule.clickOn(CommonStrings.action_ok) + eventsRecorder.assertSingle(TimelineEvents.HideShieldDialog) + } } private fun AndroidComposeTestRule.setTimelineView(