Skip to content

Commit

Permalink
Draft : also clear draft when composer is blank
Browse files Browse the repository at this point in the history
  • Loading branch information
ganfra committed Jul 1, 2024
1 parent aa0a6ce commit 3a610e6
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ import io.element.android.libraries.matrix.api.room.draft.ComposerDraft

interface ComposerDraftService {
suspend fun loadDraft(roomId: RoomId): ComposerDraft?
suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft)
suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?)
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,19 @@ class DefaultComposerDraftService @Inject constructor(
}
}

override suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft) {
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) {
client.getRoom(roomId)?.use { room ->
room.saveComposerDraft(draft)
val updateDraftResult = if (draft == null) {
room.clearComposerDraft()

Check warning on line 48 in features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

View check run for this annotation

Codecov / codecov/patch

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt#L48

Added line #L48 was not covered by tests
} else {
room.saveComposerDraft(draft)

Check warning on line 50 in features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

View check run for this annotation

Codecov / codecov/patch

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt#L50

Added line #L50 was not covered by tests
}
updateDraftResult

Check warning on line 52 in features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

View check run for this annotation

Codecov / codecov/patch

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt#L52

Added line #L52 was not covered by tests
.onFailure {
Timber.e(it, "Failed to save composer draft for room $roomId")
Timber.e(it, "Failed to update composer draft for room $roomId")

Check warning on line 54 in features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

View check run for this annotation

Codecov / codecov/patch

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt#L54

Added line #L54 was not covered by tests
}
.onSuccess {
Timber.d("Saved composer draft for room $roomId")
Timber.d("Updated composer draft for room $roomId")

Check warning on line 57 in features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt

View check run for this annotation

Codecov / codecov/patch

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt#L57

Added line #L57 was not covered by tests
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -582,16 +582,16 @@ class MessageComposerPresenter @Inject constructor(
}
is MessageComposerMode.Reply -> ComposerDraftType.Reply(mode.eventId)
}
if (draftType == null || markdown.isBlank()) {
return@launch
val composerDraft = if (draftType == null || markdown.isBlank()) {
null
} else {
val composerDraft = ComposerDraft(
ComposerDraft(
draftType = draftType,
htmlText = html,
plainText = markdown,
)
draftService.saveDraft(room.roomId, composerDraft)
}
draftService.updateDraft(room.roomId, composerDraft)
}

private fun CoroutineScope.toggleTextFormatting(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ class FakeComposerDraftService : ComposerDraftService {
var loadDraftLambda: (RoomId) -> ComposerDraft? = { null }
override suspend fun loadDraft(roomId: RoomId) = loadDraftLambda(roomId)

var saveDraftLambda: (RoomId, ComposerDraft) -> Unit = { _, _ -> }
override suspend fun saveDraft(roomId: RoomId, draft: ComposerDraft) = saveDraftLambda(roomId, draft)
var saveDraftLambda: (RoomId, ComposerDraft?) -> Unit = { _, _ -> }
override suspend fun updateDraft(roomId: RoomId, draft: ComposerDraft?) = saveDraftLambda(roomId, draft)
}
Original file line number Diff line number Diff line change
Expand Up @@ -1176,8 +1176,8 @@ class MessageComposerPresenterTest {
}

@Test
fun `present - when save draft event is invoked and composer is empty then nothing happens`() = runTest {
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft, Unit> { _, _ -> }
fun `present - when save draft event is invoked and composer is empty then service is called with null draft`() = runTest {
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft?, Unit> { _, _ -> }
val composerDraftService = FakeComposerDraftService().apply {
this.saveDraftLambda = saveDraftLambda
}
Expand All @@ -1189,13 +1189,14 @@ class MessageComposerPresenterTest {
initialState.eventSink.invoke(MessageComposerEvents.SaveDraft)
advanceUntilIdle()
assert(saveDraftLambda)
.isNeverCalled()
.isCalledOnce()
.with(value(A_ROOM_ID), value(null))
}
}

@Test
fun `present - when save draft event is invoked and composer is not empty then service is called`() = runTest {
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft, Unit> { _, _ -> }
val saveDraftLambda = lambdaRecorder<RoomId, ComposerDraft?, Unit> { _, _ -> }
val composerDraftService = FakeComposerDraftService().apply {
this.saveDraftLambda = saveDraftLambda
}
Expand Down

0 comments on commit 3a610e6

Please sign in to comment.