Skip to content

Commit 680b63d

Browse files
authored
Merge pull request #4895 from element-hq/feature/fga/can-edit-permission
fix (event action): allow to edit only if permission to send message
2 parents 0b238b0 + 713bae0 commit 680b63d

File tree

2 files changed

+44
-23
lines changed

2 files changed

+44
-23
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ class DefaultActionListPresenter @AssistedInject constructor(
169169
if (timelineItem.isRemote && timelineItem.content.canBeForwarded()) {
170170
add(TimelineItemAction.Forward)
171171
}
172-
if (timelineItem.isEditable) {
172+
if (timelineItem.isEditable && usersEventPermissions.canSendMessage) {
173173
if (timelineItem.content is TimelineItemEventContentWithAttachment) {
174174
// Caption
175175
if (timelineItem.content.caption == null) {

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

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ class ActionListPresenterTest {
8181
)
8282
)
8383
)
84-
// val loadingState = awaitItem()
85-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
8684
val successState = awaitItem()
8785
assertThat(successState.target).isEqualTo(
8886
ActionListState.Target.Success(
@@ -124,8 +122,6 @@ class ActionListPresenterTest {
124122
)
125123
)
126124
)
127-
// val loadingState = awaitItem()
128-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
129125
val successState = awaitItem()
130126
assertThat(successState.target).isEqualTo(
131127
ActionListState.Target.Success(
@@ -167,8 +163,6 @@ class ActionListPresenterTest {
167163
)
168164
)
169165
)
170-
// val loadingState = awaitItem()
171-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
172166
val successState = awaitItem()
173167
assertThat(successState.target).isEqualTo(
174168
ActionListState.Target.Success(
@@ -262,8 +256,6 @@ class ActionListPresenterTest {
262256
)
263257
)
264258
)
265-
// val loadingState = awaitItem()
266-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
267259
val successState = awaitItem()
268260
assertThat(successState.target).isEqualTo(
269261
ActionListState.Target.Success(
@@ -405,8 +397,6 @@ class ActionListPresenterTest {
405397
)
406398
)
407399
)
408-
// val loadingState = awaitItem()
409-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
410400
val successState = awaitItem()
411401
assertThat(successState.target).isEqualTo(
412402
ActionListState.Target.Success(
@@ -500,8 +490,6 @@ class ActionListPresenterTest {
500490
)
501491
)
502492
)
503-
// val loadingState = awaitItem()
504-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
505493
val successState = awaitItem()
506494
assertThat(successState.target).isEqualTo(
507495
ActionListState.Target.Success(
@@ -525,6 +513,49 @@ class ActionListPresenterTest {
525513
}
526514
}
527515

516+
@Test
517+
fun `present - compute for my message no permission`() = runTest {
518+
val presenter = createActionListPresenter(isDeveloperModeEnabled = true, isPinFeatureEnabled = true)
519+
moleculeFlow(RecompositionMode.Immediate) {
520+
presenter.present()
521+
}.test {
522+
val initialState = awaitItem()
523+
val messageEvent = aMessageEvent(
524+
isMine = true,
525+
content = TimelineItemTextContent(body = A_MESSAGE, htmlDocument = null, isEdited = false, formattedBody = A_MESSAGE)
526+
)
527+
initialState.eventSink.invoke(
528+
ActionListEvents.ComputeForMessage(
529+
event = messageEvent,
530+
userEventPermissions = aUserEventPermissions(
531+
canRedactOwn = false,
532+
canRedactOther = false,
533+
canSendMessage = false,
534+
canSendReaction = false,
535+
canPinUnpin = false,
536+
)
537+
)
538+
)
539+
val successState = awaitItem()
540+
assertThat(successState.target).isEqualTo(
541+
ActionListState.Target.Success(
542+
event = messageEvent,
543+
sentTimeFull = "0 Full true",
544+
displayEmojiReactions = false,
545+
verifiedUserSendFailure = VerifiedUserSendFailure.None,
546+
actions = persistentListOf(
547+
TimelineItemAction.Forward,
548+
TimelineItemAction.CopyLink,
549+
TimelineItemAction.CopyText,
550+
TimelineItemAction.ViewSource,
551+
)
552+
)
553+
)
554+
initialState.eventSink.invoke(ActionListEvents.Clear)
555+
assertThat(awaitItem().target).isEqualTo(ActionListState.Target.None)
556+
}
557+
}
558+
528559
@Test
529560
fun `present - compute for a media item`() = runTest {
530561
val presenter = createActionListPresenter(isDeveloperModeEnabled = true, isPinFeatureEnabled = true)
@@ -747,8 +778,6 @@ class ActionListPresenterTest {
747778
)
748779
)
749780
)
750-
// val loadingState = awaitItem()
751-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
752781
val successState = awaitItem()
753782
assertThat(successState.target).isEqualTo(
754783
ActionListState.Target.Success(
@@ -789,8 +818,6 @@ class ActionListPresenterTest {
789818
)
790819
)
791820
)
792-
// val loadingState = awaitItem()
793-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
794821
assertThat(awaitItem().target).isEqualTo(ActionListState.Target.None)
795822
}
796823
}
@@ -818,8 +845,6 @@ class ActionListPresenterTest {
818845
)
819846
)
820847
)
821-
// val loadingState = awaitItem()
822-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
823848
val successState = awaitItem()
824849
assertThat(successState.target).isEqualTo(
825850
ActionListState.Target.Success(
@@ -866,8 +891,6 @@ class ActionListPresenterTest {
866891
)
867892
)
868893
)
869-
// val loadingState = awaitItem()
870-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
871894
val successState = awaitItem()
872895
assertThat(successState.target).isEqualTo(
873896
ActionListState.Target.Success(
@@ -921,8 +944,6 @@ class ActionListPresenterTest {
921944
)
922945
)
923946
)
924-
// val loadingState = awaitItem()
925-
// assertThat(loadingState.target).isEqualTo(ActionListState.Target.Loading(messageEvent))
926947
val successState = awaitItem()
927948
assertThat(successState.target).isEqualTo(
928949
ActionListState.Target.Success(

0 commit comments

Comments
 (0)