From 689ab61b23a2f125946ce6ece4a5c2415f262ef4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 17:08:18 +0100 Subject: [PATCH 1/8] Ensure all dialogs have the same preview format. A combined ElementThemedPreview with PreviewGroup.Dialogs for Showkase and a regular PreviewsDayNight for code coverage --- .../designsystem/components/ProgressDialog.kt | 10 ++++++- .../components/dialogs/ConfirmationDialog.kt | 18 +++++++++++- .../components/dialogs/ErrorDialog.kt | 13 ++++++++- .../components/dialogs/ListDialog.kt | 28 ++++++++++++++++--- .../dialogs/MultipleSelectionDialog.kt | 27 +++++++++++++++--- .../components/dialogs/RetryDialog.kt | 14 +++++++++- .../dialogs/SingleSelectionDialog.kt | 23 +++++++++++++-- 7 files changed, 118 insertions(+), 15 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt index d94a0486a4..37429c9d36 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt @@ -35,8 +35,10 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties +import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.DialogPreview import io.element.android.libraries.designsystem.theme.components.Text @@ -141,8 +143,14 @@ private fun ProgressDialogContent( @Preview(group = PreviewGroup.Dialogs) @Composable -internal fun ProgressDialogPreview() = ElementThemedPreview { +internal fun ProgressDialogContentPreview() = ElementThemedPreview { DialogPreview { ProgressDialogContent(text = "test dialog content", isCancellable = true) } } + +@PreviewsDayNight +@Composable +internal fun ProgressDialogPreview() = ElementPreview { + ProgressDialog(text = "test dialog content", isCancellable = true) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt index 9fccecaa6e..49d3c98b4f 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt @@ -22,8 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.DialogPreview import io.element.android.libraries.designsystem.theme.components.SimpleAlertDialogContent import io.element.android.libraries.ui.strings.CommonStrings @@ -87,7 +89,7 @@ private fun ConfirmationDialogContent( @Preview(group = PreviewGroup.Dialogs) @Composable -internal fun ConfirmationDialogPreview() = +internal fun ConfirmationDialogContentPreview() = ElementThemedPreview(showBackground = false) { DialogPreview { ConfirmationDialogContent( @@ -102,3 +104,17 @@ internal fun ConfirmationDialogPreview() = ) } } + +@PreviewsDayNight +@Composable +internal fun ConfirmationDialogPreview() = ElementPreview { + ConfirmationDialog( + content = "Content", + title = "Title", + submitText = "OK", + cancelText = "Cancel", + thirdButtonText = "Disable", + onSubmitClicked = {}, + onDismiss = {} + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt index a4a4a6e8b9..d8e9cbe1da 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt @@ -22,8 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.DialogPreview import io.element.android.libraries.designsystem.theme.components.SimpleAlertDialogContent import io.element.android.libraries.ui.strings.CommonStrings @@ -69,7 +71,7 @@ object ErrorDialogDefaults { @Preview(group = PreviewGroup.Dialogs) @Composable -internal fun ErrorDialogPreview() { +internal fun ErrorDialogContentPreview() { ElementThemedPreview(showBackground = false) { DialogPreview { ErrorDialogContent( @@ -79,3 +81,12 @@ internal fun ErrorDialogPreview() { } } } + +@PreviewsDayNight +@Composable +internal fun ErrorDialogPreview() = ElementPreview { + ErrorDialog( + content = "Content", + onDismiss = {}, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt index 71cf3e78ee..4e44ce805d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ListDialog.kt @@ -24,10 +24,11 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.airbnb.android.showkase.annotation.ShowkaseComposable import io.element.android.libraries.designsystem.components.list.TextFieldListItem import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.DialogPreview @@ -100,11 +101,10 @@ private fun ListDialogContent( } } -@PreviewsDayNight -@ShowkaseComposable(group = PreviewGroup.Dialogs) +@Preview(group = PreviewGroup.Dialogs) @Composable internal fun ListDialogContentPreview() { - ElementPreview(showBackground = false) { + ElementThemedPreview(showBackground = false) { DialogPreview { ListDialogContent( listItems = { @@ -124,3 +124,23 @@ internal fun ListDialogContentPreview() { } } } + +@PreviewsDayNight +@Composable +internal fun ListDialogPreview() = ElementPreview { + ListDialog( + listItems = { + item { + TextFieldListItem(placeholder = "Text input", text = "", onTextChanged = {}) + } + item { + TextFieldListItem(placeholder = "Another text input", text = "", onTextChanged = {}) + } + }, + title = "Dialog title", + onDismissRequest = {}, + onSubmit = {}, + cancelText = "Cancel", + submitText = "Save", + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/MultipleSelectionDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/MultipleSelectionDialog.kt index 7bea51952a..183ab92522 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/MultipleSelectionDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/MultipleSelectionDialog.kt @@ -26,10 +26,11 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.toMutableStateList import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.airbnb.android.showkase.annotation.ShowkaseComposable import io.element.android.libraries.designsystem.components.list.CheckboxListItem import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.DialogPreview @@ -124,11 +125,10 @@ private fun MultipleSelectionDialogContent( } } -@PreviewsDayNight -@ShowkaseComposable(group = PreviewGroup.Dialogs) +@Preview(group = PreviewGroup.Dialogs) @Composable internal fun MultipleSelectionDialogContentPreview() { - ElementPreview(showBackground = false) { + ElementThemedPreview(showBackground = false) { DialogPreview { val options = persistentListOf( ListOption("Option 1", "Supporting line text lorem ipsum dolor sit amet, consectetur."), @@ -147,3 +147,22 @@ internal fun MultipleSelectionDialogContentPreview() { } } } + +@PreviewsDayNight +@Composable +internal fun MultipleSelectionDialogPreview() = ElementPreview { + val options = persistentListOf( + ListOption("Option 1", "Supporting line text lorem ipsum dolor sit amet, consectetur."), + ListOption("Option 2"), + ListOption("Option 3"), + ) + MultipleSelectionDialog( + title = "Dialog title", + options = options, + onConfirmClicked = {}, + onDismissRequest = {}, + confirmButtonTitle = "Save", + dismissButtonTitle = "Cancel", + initialSelection = persistentListOf(0), + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt index 161b552ce4..e3884c58dc 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/RetryDialog.kt @@ -22,8 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup +import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.DialogPreview import io.element.android.libraries.designsystem.theme.components.SimpleAlertDialogContent import io.element.android.libraries.ui.strings.CommonStrings @@ -78,7 +80,7 @@ object RetryDialogDefaults { @Preview(group = PreviewGroup.Dialogs) @Composable -internal fun RetryDialogPreview() { +internal fun RetryDialogContentPreview() { ElementThemedPreview(showBackground = false) { DialogPreview { RetryDialogContent( @@ -89,3 +91,13 @@ internal fun RetryDialogPreview() { } } } + +@PreviewsDayNight +@Composable +internal fun RetryDialogPreview() = ElementPreview { + RetryDialog( + content = "Content", + onRetry = {}, + onDismiss = {}, + ) +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt index 99ed32b674..a23a8068a9 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/SingleSelectionDialog.kt @@ -24,8 +24,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.airbnb.android.showkase.annotation.ShowkaseComposable import io.element.android.libraries.designsystem.components.list.RadioButtonListItem import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewGroup @@ -105,8 +105,7 @@ private fun SingleSelectionDialogContent( } } -@PreviewsDayNight -@ShowkaseComposable(group = PreviewGroup.Dialogs) +@Preview(group = PreviewGroup.Dialogs) @Composable internal fun SingleSelectionDialogContentPreview() { ElementPreview(showBackground = false) { @@ -127,3 +126,21 @@ internal fun SingleSelectionDialogContentPreview() { } } } + +@PreviewsDayNight +@Composable +internal fun SingleSelectionDialogPreview() = ElementPreview { + val options = persistentListOf( + ListOption("Option 1"), + ListOption("Option 2"), + ListOption("Option 3"), + ) + SingleSelectionDialog( + title = "Dialog title", + options = options, + onOptionSelected = {}, + onDismissRequest = {}, + dismissButtonTitle = "Cancel", + initialSelection = 0 + ) +} From b14540126a6b9e28543bac19356142d75f0b64c0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 17:39:03 +0100 Subject: [PATCH 2/8] Add test `MessagesViewTest.clicking on an Event timestamp in error emits the expected Event` --- .../messages/impl/MessagesStateProvider.kt | 7 +++---- .../RetrySendMenuStateProvider.kt | 11 ++++++++--- .../features/messages/impl/MessagesViewTest.kt | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index da278904a3..f581149ad2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -30,6 +30,7 @@ import io.element.android.features.messages.impl.timeline.components.reactionsum import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryState import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetState import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuState +import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.typing.aTypingNotificationState import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerState @@ -97,6 +98,7 @@ fun aMessagesState( mode = MessageComposerMode.Normal, ), voiceMessageComposerState: VoiceMessageComposerState = aVoiceMessageComposerState(), + retrySendMenuState: RetrySendMenuState = aRetrySendMenuState(), actionListState: ActionListState = anActionListState(), customReactionState: CustomReactionState = aCustomReactionState(), reactionSummaryState: ReactionSummaryState = aReactionSummaryState(), @@ -119,10 +121,7 @@ fun aMessagesState( timelineItems = aTimelineItemList(aTimelineItemTextContent()), ), typingNotificationState = aTypingNotificationState(), - retrySendMenuState = RetrySendMenuState( - selectedEvent = null, - eventSink = {}, - ), + retrySendMenuState = retrySendMenuState, readReceiptBottomSheetState = ReadReceiptBottomSheetState( selectedEvent = null, eventSink = {}, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuStateProvider.kt index ccb5c26982..14353ddd09 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/retrysendmenu/RetrySendMenuStateProvider.kt @@ -22,10 +22,15 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem class RetrySendMenuStateProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( - aRetrySendMenuState(event = null), + aRetrySendMenuState(), aRetrySendMenuState(event = aTimelineItemEvent()), ) } -fun aRetrySendMenuState(event: TimelineItem.Event? = aTimelineItemEvent()) = - RetrySendMenuState(selectedEvent = event, eventSink = {}) +fun aRetrySendMenuState( + event: TimelineItem.Event? = null, + eventSink: (RetrySendMenuEvents) -> Unit = {}, +) = RetrySendMenuState( + selectedEvent = event, + eventSink = eventSink, +) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index 449abc3f46..1eb4f54d76 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -38,6 +38,8 @@ import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents +import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents +import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.testtags.TestTags @@ -128,6 +130,22 @@ class MessagesViewTest { callback.assertSuccess() } + @Test + fun `clicking on an Event timestamp in error emits the expected Event`() { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + retrySendMenuState = aRetrySendMenuState( + eventSink = eventsRecorder + ), + ) + val timelineItem = state.timelineState.timelineItems[1] as TimelineItem.Event + rule.setMessagesView( + state = state, + ) + rule.onAllNodesWithText(timelineItem.sentTime)[1].performClick() + eventsRecorder.assertSingle(RetrySendMenuEvents.EventSelected(timelineItem)) + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false) From dde25c3827474310e6639846736a799a5d9947af Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 17:56:45 +0100 Subject: [PATCH 3/8] Add test on `MessagesViewTest`: long click on an Event. --- .../messages/impl/MessagesStateProvider.kt | 9 ++-- .../messages/impl/MessagesViewTest.kt | 54 +++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index f581149ad2..119906a964 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -92,6 +92,9 @@ fun aMessagesState( roomName: AsyncData = AsyncData.Success("Room name"), roomAvatar: AsyncData = AsyncData.Success(AvatarData("!id:domain", "Room name", size = AvatarSize.TimelineRoom)), userHasPermissionToSendMessage: Boolean = true, + userHasPermissionToRedactOwn: Boolean = false, + userHasPermissionToRedactOther: Boolean = false, + userHasPermissionToSendReaction: Boolean = true, composerState: MessageComposerState = aMessageComposerState( richTextEditorState = RichTextEditorState("Hello", initialFocus = true), isFullScreen = false, @@ -112,9 +115,9 @@ fun aMessagesState( roomName = roomName, roomAvatar = roomAvatar, userHasPermissionToSendMessage = userHasPermissionToSendMessage, - userHasPermissionToRedactOwn = false, - userHasPermissionToRedactOther = false, - userHasPermissionToSendReaction = true, + userHasPermissionToRedactOwn = userHasPermissionToRedactOwn, + userHasPermissionToRedactOther = userHasPermissionToRedactOther, + userHasPermissionToSendReaction = userHasPermissionToSendReaction, composerState = composerState, voiceMessageComposerState = voiceMessageComposerState, timelineState = aTimelineState( diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index 1eb4f54d76..841ea4ac2c 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -31,6 +31,7 @@ import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.messages.impl.actionlist.ActionListEvents import io.element.android.features.messages.impl.actionlist.ActionListState import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction @@ -146,6 +147,59 @@ class MessagesViewTest { eventsRecorder.assertSingle(RetrySendMenuEvents.EventSelected(timelineItem)) } + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToSendMessage`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToSendMessage = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToRedactOwn`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToRedactOwn = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToRedactOther`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToRedactOther = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToSendReaction`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToSendReaction = true) + } + + private fun `long clicking on an Event emits the expected Event`( + userHasPermissionToSendMessage: Boolean = false, + userHasPermissionToRedactOwn: Boolean = false, + userHasPermissionToRedactOther: Boolean = false, + userHasPermissionToSendReaction: Boolean = false, + ) { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + actionListState = anActionListState( + eventSink = eventsRecorder + ), + userHasPermissionToSendMessage = userHasPermissionToSendMessage, + userHasPermissionToRedactOwn = userHasPermissionToRedactOwn, + userHasPermissionToRedactOther = userHasPermissionToRedactOther, + userHasPermissionToSendReaction = userHasPermissionToSendReaction, + ) + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + rule.setMessagesView( + state = state, + ) + // Cannot perform click on "Text", it's not detected. Use tag instead + rule.onAllNodesWithTag(TestTags.messageBubble.value).onFirst().performTouchInput { longClick() } + eventsRecorder.assertSingle( + ActionListEvents.ComputeForMessage( + event = timelineItem, + canRedactOwn = state.userHasPermissionToRedactOwn, + canRedactOther = state.userHasPermissionToRedactOther, + canSendMessage = state.userHasPermissionToSendMessage, + canSendReaction = state.userHasPermissionToSendReaction, + ) + ) + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false) From ae1d2243708bd2eb3465de1d440bf878a042eb84 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 22:35:46 +0100 Subject: [PATCH 4/8] Add test on `MessagesViewTest`: clicking on a read receipt list emits the expected Event. --- .../messages/impl/MessagesStateProvider.kt | 24 +++++++++---- .../impl/timeline/TimelineStateProvider.kt | 9 +++-- .../receipt/TimelineItemReadReceiptView.kt | 3 ++ .../messages/impl/MessagesViewTest.kt | 34 +++++++++++++++++++ .../android/libraries/testtags/TestTags.kt | 5 +++ 5 files changed, 65 insertions(+), 10 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index 119906a964..8c629e91d1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -22,15 +22,18 @@ import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.messagecomposer.AttachmentsState import io.element.android.features.messages.impl.messagecomposer.MessageComposerState import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState +import io.element.android.features.messages.impl.timeline.TimelineState import io.element.android.features.messages.impl.timeline.aTimelineItemList import io.element.android.features.messages.impl.timeline.aTimelineState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryState +import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetState import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuState import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState +import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.typing.aTypingNotificationState import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerState @@ -101,7 +104,11 @@ fun aMessagesState( mode = MessageComposerMode.Normal, ), voiceMessageComposerState: VoiceMessageComposerState = aVoiceMessageComposerState(), + timelineState: TimelineState = aTimelineState( + timelineItems = aTimelineItemList(aTimelineItemTextContent()), + ), retrySendMenuState: RetrySendMenuState = aRetrySendMenuState(), + readReceiptBottomSheetState: ReadReceiptBottomSheetState = aReadReceiptBottomSheetState(), actionListState: ActionListState = anActionListState(), customReactionState: CustomReactionState = aCustomReactionState(), reactionSummaryState: ReactionSummaryState = aReactionSummaryState(), @@ -120,15 +127,10 @@ fun aMessagesState( userHasPermissionToSendReaction = userHasPermissionToSendReaction, composerState = composerState, voiceMessageComposerState = voiceMessageComposerState, - timelineState = aTimelineState( - timelineItems = aTimelineItemList(aTimelineItemTextContent()), - ), typingNotificationState = aTypingNotificationState(), + timelineState = timelineState, retrySendMenuState = retrySendMenuState, - readReceiptBottomSheetState = ReadReceiptBottomSheetState( - selectedEvent = null, - eventSink = {}, - ), + readReceiptBottomSheetState = readReceiptBottomSheetState, actionListState = actionListState, customReactionState = customReactionState, reactionSummaryState = reactionSummaryState, @@ -158,3 +160,11 @@ fun aCustomReactionState( selectedEmoji = persistentSetOf(), eventSink = eventSink, ) + +fun aReadReceiptBottomSheetState( + selectedEvent: TimelineItem.Event? = null, + eventSink: (ReadReceiptBottomSheetEvents) -> Unit = {}, +) = ReadReceiptBottomSheetState( + selectedEvent = selectedEvent, + eventSink = eventSink, +) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 449e13e314..ede2f379ea 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -48,12 +48,13 @@ import kotlin.random.Random fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), paginationState: MatrixTimeline.PaginationState = aPaginationState(), + renderReadReceipts: Boolean = false, eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, timelineRoomInfo = aTimelineRoomInfo(), paginationState = paginationState, - renderReadReceipts = false, + renderReadReceipts = renderReadReceipts, highlightedEventId = null, newEventState = NewEventState.None, sessionState = aSessionState( @@ -196,9 +197,11 @@ internal fun aTimelineItemDebugInfo( latestEditedJson ) -internal fun aTimelineItemReadReceipts(): TimelineItemReadReceipts { +internal fun aTimelineItemReadReceipts( + receipts: List = emptyList(), +): TimelineItemReadReceipts { return TimelineItemReadReceipts( - receipts = emptyList().toImmutableList(), + receipts = receipts.toImmutableList(), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt index 8f3d8f3710..9f047742c8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt @@ -51,6 +51,8 @@ import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.CommonDrawables import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState +import io.element.android.libraries.testtags.TestTags +import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.CommonPlurals import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList @@ -68,6 +70,7 @@ fun TimelineItemReadReceiptView( ReadReceiptsAvatars( receipts = state.receipts, modifier = Modifier + .testTag(TestTags.messageReadReceipts) .clip(RoundedCornerShape(4.dp)) .clickable { onReadReceiptsClicked() diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index 841ea4ac2c..f6692bd0ff 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.test.onAllNodesWithTag import androidx.compose.ui.test.onAllNodesWithText import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput @@ -37,8 +38,13 @@ import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState +import io.element.android.features.messages.impl.timeline.aTimelineItemEvent +import io.element.android.features.messages.impl.timeline.aTimelineItemReadReceipts +import io.element.android.features.messages.impl.timeline.aTimelineState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents +import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData +import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -200,6 +206,34 @@ class MessagesViewTest { ) } + @Test + fun `clicking on a read receipt list emits the expected Event`() { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + timelineState = aTimelineState( + renderReadReceipts = true, + timelineItems = persistentListOf( + aTimelineItemEvent( + readReceiptState = aTimelineItemReadReceipts( + receipts = listOf( + aReadReceiptData(0), + ), + ), + ), + ), + ), + readReceiptBottomSheetState = aReadReceiptBottomSheetState( + eventSink = eventsRecorder + ), + ) + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + rule.setMessagesView( + state = state, + ) + rule.onNodeWithTag(TestTags.messageReadReceipts.value).performClick() + eventsRecorder.assertSingle(ReadReceiptBottomSheetEvents.EventSelected(timelineItem)) + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false) diff --git a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt index a88f036fd5..ed93c19bc3 100644 --- a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt +++ b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt @@ -63,6 +63,11 @@ object TestTags { */ val messageBubble = TestTag("message_bubble") + /** + * Message Read Receipts. + */ + val messageReadReceipts = TestTag("message_read_receipts") + /** * Dialogs. */ From 6a8192d2d120531f7fbc848bc2145417fad7f554 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 20:53:30 +0100 Subject: [PATCH 5/8] Add test on `MessagesViewTest`: swiping on an Event emits the expected Event. --- .../impl/timeline/TimelineStateProvider.kt | 6 ++- .../messages/impl/MessagesViewTest.kt | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index ede2f379ea..002bffc549 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -49,10 +49,11 @@ fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), paginationState: MatrixTimeline.PaginationState = aPaginationState(), renderReadReceipts: Boolean = false, + timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, - timelineRoomInfo = aTimelineRoomInfo(), + timelineRoomInfo = timelineRoomInfo, paginationState = paginationState, renderReadReceipts = renderReadReceipts, highlightedEventId = null, @@ -235,8 +236,9 @@ internal fun aGroupedEvents( internal fun aTimelineRoomInfo( isDirect: Boolean = false, + userHasPermissionToSendMessage: Boolean = true, ) = TimelineRoomInfo( isDirect = isDirect, - userHasPermissionToSendMessage = true, + userHasPermissionToSendMessage = userHasPermissionToSendMessage, userHasPermissionToSendReaction = true, ) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index f6692bd0ff..a764cb3d49 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -31,6 +31,7 @@ import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput +import androidx.compose.ui.test.swipeRight import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.messages.impl.actionlist.ActionListEvents import io.element.android.features.messages.impl.actionlist.ActionListState @@ -39,7 +40,9 @@ import io.element.android.features.messages.impl.actionlist.model.TimelineItemAc import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState import io.element.android.features.messages.impl.timeline.aTimelineItemEvent +import io.element.android.features.messages.impl.timeline.aTimelineItemList import io.element.android.features.messages.impl.timeline.aTimelineItemReadReceipts +import io.element.android.features.messages.impl.timeline.aTimelineRoomInfo import io.element.android.features.messages.impl.timeline.aTimelineState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents @@ -48,6 +51,7 @@ import io.element.android.features.messages.impl.timeline.components.receipt.bot import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.ui.strings.CommonStrings @@ -234,6 +238,39 @@ class MessagesViewTest { eventsRecorder.assertSingle(ReadReceiptBottomSheetEvents.EventSelected(timelineItem)) } + @Test + fun `swiping on an Event emits the expected Event`() { + swipeTest(userHasPermissionToSendMessage = true) + } + + @Test + fun `swiping on an Event emits no Event if user does not have permission to send message`() { + swipeTest(userHasPermissionToSendMessage = false) + } + + private fun swipeTest(userHasPermissionToSendMessage: Boolean) { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + timelineState = aTimelineState( + timelineItems = aTimelineItemList(aTimelineItemTextContent()), + timelineRoomInfo = aTimelineRoomInfo( + userHasPermissionToSendMessage = userHasPermissionToSendMessage + ), + ), + eventSink = eventsRecorder, + ) + rule.setMessagesView( + state = state, + ) + rule.onAllNodesWithTag(TestTags.messageBubble.value).onFirst().performTouchInput { swipeRight(endX = 200f) } + if (userHasPermissionToSendMessage) { + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + eventsRecorder.assertSingle(MessagesEvents.HandleAction(TimelineItemAction.Reply, timelineItem)) + } else { + eventsRecorder.assertEmpty() + } + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false) From 64435db282070761587519a3960ef6dcb3093dfb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 21:59:15 +0100 Subject: [PATCH 6/8] Add test on `MessagesViewTest`: clicking on more reaction from action list emits the expected Event. --- .../messages/impl/MessagesViewTest.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index a764cb3d49..aa9429a1fa 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -399,6 +399,33 @@ class MessagesViewTest { rule.onAllNodesWithContentDescription(moreReactionContentDescription).onFirst().performClick() eventsRecorder.assertSingle(CustomReactionEvents.ShowCustomReactionSheet(timelineItem)) } + + @Test + fun `clicking on more reaction from action list emits the expected Event`() { + val eventsRecorder = EventsRecorder() + val state = aMessagesState() + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + val stateWithActionListState = state.copy( + actionListState = anActionListState( + target = ActionListState.Target.Success( + event = timelineItem, + displayEmojiReactions = true, + actions = persistentListOf(TimelineItemAction.Edit), + ), + ), + customReactionState = aCustomReactionState( + eventSink = eventsRecorder + ), + ) + rule.setMessagesView( + state = stateWithActionListState, + ) + val moreReactionContentDescription = rule.activity.getString(CommonStrings.a11y_react_with_other_emojis) + rule.onNodeWithContentDescription(moreReactionContentDescription).performClick() + // Give time for the close animation to complete + rule.mainClock.advanceTimeBy(milliseconds = 1_000) + eventsRecorder.assertSingle(CustomReactionEvents.ShowCustomReactionSheet(timelineItem)) + } } private fun AndroidComposeTestRule.setMessagesView( From e8ad3c8f9c62b7d2d77044d39f3baf7459dc7d3c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 22:22:32 +0100 Subject: [PATCH 7/8] Add test on `MessagesViewTest`: clicking on a custom emoji emits the expected Events. And fix a bug, the Event `CustomReactionEvents.DismissCustomReactionSheet` is actually managed by the BottomSheet itself. --- .../messages/impl/MessagesStateProvider.kt | 3 +- .../features/messages/impl/MessagesView.kt | 1 - .../messages/impl/MessagesViewTest.kt | 45 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index 8c629e91d1..f1af9ad225 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -154,9 +154,10 @@ fun aReactionSummaryState( ) fun aCustomReactionState( + target: CustomReactionState.Target = CustomReactionState.Target.None, eventSink: (CustomReactionEvents) -> Unit = {}, ) = CustomReactionState( - target = CustomReactionState.Target.None, + target = target, selectedEmoji = persistentSetOf(), eventSink = eventSink, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index fd1c6bf19b..d0fecc8575 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -250,7 +250,6 @@ fun MessagesView( state = state.customReactionState, onEmojiSelected = { eventId, emoji -> state.eventSink(MessagesEvents.ToggleReaction(emoji.unicode, eventId)) - state.customReactionState.eventSink(CustomReactionEvents.DismissCustomReactionSheet) } ) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index aa9429a1fa..144cb14561 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -33,6 +33,9 @@ import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput import androidx.compose.ui.test.swipeRight import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.emojibasebindings.Emoji +import io.element.android.emojibasebindings.EmojibaseCategory +import io.element.android.emojibasebindings.EmojibaseStore import io.element.android.features.messages.impl.actionlist.ActionListEvents import io.element.android.features.messages.impl.actionlist.ActionListState import io.element.android.features.messages.impl.actionlist.anActionListState @@ -45,6 +48,7 @@ import io.element.android.features.messages.impl.timeline.aTimelineItemReadRecei import io.element.android.features.messages.impl.timeline.aTimelineRoomInfo import io.element.android.features.messages.impl.timeline.aTimelineState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents +import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionState import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents @@ -426,6 +430,47 @@ class MessagesViewTest { rule.mainClock.advanceTimeBy(milliseconds = 1_000) eventsRecorder.assertSingle(CustomReactionEvents.ShowCustomReactionSheet(timelineItem)) } + + @Test + fun `clicking on a custom emoji emits the expected Events`() { + val aUnicode = "🙈" + val customReactionStateEventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + eventSink = eventsRecorder, + ) + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + val stateWithCustomReactionState = state.copy( + customReactionState = aCustomReactionState( + target = CustomReactionState.Target.Success( + event = timelineItem, + emojibaseStore = EmojibaseStore( + categories = mapOf( + EmojibaseCategory.People to listOf( + Emoji( + hexcode = "", + label = "", + tags = emptyList(), + shortcodes = emptyList(), + unicode = aUnicode, + skins = null, + ) + ) + ) + ), + ), + eventSink = customReactionStateEventsRecorder + ), + ) + rule.setMessagesView( + state = stateWithCustomReactionState, + ) + rule.onNodeWithText(aUnicode, useUnmergedTree = true).performClick() + // Give time for the close animation to complete + rule.mainClock.advanceTimeBy(milliseconds = 1_000) + customReactionStateEventsRecorder.assertSingle(CustomReactionEvents.DismissCustomReactionSheet) + eventsRecorder.assertSingle(MessagesEvents.ToggleReaction(aUnicode, timelineItem.eventId!!)) + } } private fun AndroidComposeTestRule.setMessagesView( From 183f310f046b5089bd7f719e5c5e2d2d7c4c38a0 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 9 Feb 2024 21:48:24 +0000 Subject: [PATCH 8/8] Update screenshots --- ...logs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en].png} | 0 ...log_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...g_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ...ull_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en].png} | 0 ...rrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...orDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ..._null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...nt_null_ListDialogContent-Night_1_null,NEXUS_5,1.0,en].png | 3 --- ..._ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...istDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ..._MultipleSelectionDialogContent_0_null,NEXUS_5,1.0,en].png | 4 ++-- ...pleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png | 3 --- ...ull_MultipleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...l_MultipleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ...ull_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en].png} | 0 ...etryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...ryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ...gleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png | 3 --- ..._null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...ull_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ ..._Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en].png} | 0 ...sDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en].png | 3 +++ ...ialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en].png | 3 +++ 23 files changed, 46 insertions(+), 13 deletions(-) rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_Dialogs_ConfirmationDialog_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_Dialogs_ErrorDialog_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_ListDialogContent-Night_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_MultipleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_Dialogs_RetryDialog_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en].png delete mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_SingleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png rename tests/uitests/src/test/snapshots/images/{ui_S_t[l.designsystem.components_ProgressDialog_null_Dialogs_ProgressDialog_0_null,NEXUS_5,1.0,en].png => ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en].png} (100%) create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en].png create mode 100644 tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_Dialogs_ConfirmationDialog_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_Dialogs_ConfirmationDialog_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialogContent_null_Dialogs_ConfirmationDialogContent_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..3d22d7f963 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7525d73e2c2e5bb9663a8c287f818d1f9b72e7fbc613a25d961067ac4fb78c3a +size 15690 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..05954059f7 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ConfirmationDialog_null_ConfirmationDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a4007aaf79d6f2a9c22305de68336a8b2a46a34f9d5781c71baae8095fff8e3 +size 12549 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_Dialogs_ErrorDialog_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_Dialogs_ErrorDialog_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialogContent_null_Dialogs_ErrorDialogContent_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..9f10368007 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6246e1746c470980784f5fce7e29dbf7ffa9a434163832926687c449152d3ba0 +size 11603 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..0c9c0d18e2 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ErrorDialog_null_ErrorDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ae12c0fa29906200f79a1269783bc435d072c20518bcdce5dd09a890b0b201a +size 8998 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en].png index 47c925c6d7..67e94ebf8d 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_Dialogs_ListDialogContent_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcb09c8bf2b019c1a7db261b9c1d983b2f69c3390a19ff4b0df0f4e672239263 -size 19972 +oid sha256:0de9be99d755f99f287161bac201864c94cff22c3874c80444f172b5d19905bc +size 34453 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_ListDialogContent-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_ListDialogContent-Night_1_null,NEXUS_5,1.0,en].png deleted file mode 100644 index ae2f7fa24c..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialogContent_null_ListDialogContent-Night_1_null,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a7a7c6db1c2ceae0748793eda9b93602626d52294f041466ca33cb8681b94d87 -size 19700 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..817abe0226 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6eb41b4724e989d37317f94ce388b80360c63306d221d21daa84847b021b9cba +size 22360 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..ffe4f6d802 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_ListDialog_null_ListDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:980b3a32dbc831ed2b769d1f43f8c099f35b3f832e8124a65f794c8e674adfb6 +size 17902 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_Dialogs_MultipleSelectionDialogContent_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_Dialogs_MultipleSelectionDialogContent_0_null,NEXUS_5,1.0,en].png index d9cb1ead47..386d838857 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_Dialogs_MultipleSelectionDialogContent_0_null,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_Dialogs_MultipleSelectionDialogContent_0_null,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76aadb1f17f02efa6b0dbbafec5e5a08a1bfdb08e540b494eeaa48825c7c130a -size 30155 +oid sha256:9f15b84ce74edea24331947bcd1041f018b1b5c1151303ebacf662b187899546 +size 41114 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_MultipleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_MultipleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png deleted file mode 100644 index 5ec2d86b28..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialogContent_null_MultipleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8bc428ed9ed3c09556ade7fe797e843dad711d8c478936b6dc124933e3c8ce47 -size 28366 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..22fc02d281 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9596d444d89470b92a41389a0940e2415215ff70e58be120aec6e6766dbd039f +size 33438 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..422c64355f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_MultipleSelectionDialog_null_MultipleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51cc8509d8fd6619f3de67a01b35bf821ab2716dc7924fc46b5cbe326f399963 +size 28698 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_Dialogs_RetryDialog_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_Dialogs_RetryDialog_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialogContent_null_Dialogs_RetryDialogContent_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..9fda1210b5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9703210e241b1bff7fe557a0e62e94246f1786ac9384d0dcb9534f46551b5751 +size 14743 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..4a250879c5 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_RetryDialog_null_RetryDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffa9efaa0b03526d74085f8c27159f6c9138f8141369af1dd56173da59c72262 +size 11815 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_SingleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_SingleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png deleted file mode 100644 index ffa5f3c462..0000000000 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialogContent_null_SingleSelectionDialogContent-Night_1_null,NEXUS_5,1.0,en].png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:001a87e1c34d96910971d1071479321d2ca9ed386ebf19de45ad79410d7a60ac -size 19581 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..576c528376 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39c301a15a72acdd02b047c516304ee836f3a4aea4b11612f8acae5e5d6f462e +size 23357 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..c4277026f0 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components.dialogs_SingleSelectionDialog_null_SingleSelectionDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16dbbf810d759d8cf50b52a6f3db33c928527a3f130fc62e6f965919f7be9a70 +size 19401 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_Dialogs_ProgressDialog_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_Dialogs_ProgressDialog_0_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialogContent_null_Dialogs_ProgressDialogContent_0_null,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e461984550 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Day_0_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a49346767f539b578b619ae40e1a5ec88775246c03ba3bed5d629022e0f924aa +size 15848 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..bd35fdc84a --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[l.designsystem.components_ProgressDialog_null_ProgressDialog-Night_1_null,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56c36ec3f987033c07a2849aa88233f675f7f1df3028daccb73b97f4fae9f390 +size 13526