Browse Source

Media: make tests passing again

feature/fga/small_timeline_improvements
ganfra 1 year ago
parent
commit
950e474c72
  1. 13
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/AndroidLocalMediaFactory.kt
  2. 18
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/LocalMediaFactory.kt
  3. 1
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/MediaInfo.kt
  4. 1
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerPresenter.kt
  5. 1
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/attachments/AttachmentsPreviewPresenterTest.kt
  6. 13
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/media.kt
  7. 14
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaFactory.kt
  8. 4
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/viewer/MediaViewerPresenterTest.kt

13
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/AndroidLocalMediaFactory.kt

@ -18,6 +18,7 @@ package io.element.android.features.messages.impl.media.local
import android.content.Context import android.content.Context
import android.net.Uri import android.net.Uri
import androidx.core.net.toUri
import com.squareup.anvil.annotations.ContributesBinding import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.features.messages.impl.timeline.util.FileSizeFormatter import io.element.android.features.messages.impl.timeline.util.FileSizeFormatter
import io.element.android.libraries.androidutils.file.getFileName import io.element.android.libraries.androidutils.file.getFileName
@ -26,6 +27,8 @@ import io.element.android.libraries.androidutils.file.getMimeType
import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes
import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.ApplicationContext
import io.element.android.libraries.matrix.api.media.MediaFile
import io.element.android.libraries.matrix.api.media.toFile
import javax.inject.Inject import javax.inject.Inject
@ContributesBinding(AppScope::class) @ContributesBinding(AppScope::class)
@ -34,6 +37,16 @@ class AndroidLocalMediaFactory @Inject constructor(
private val fileSizeFormatter: FileSizeFormatter, private val fileSizeFormatter: FileSizeFormatter,
) : LocalMediaFactory { ) : LocalMediaFactory {
override fun createFromMediaFile(mediaFile: MediaFile, mediaInfo: MediaInfo): LocalMedia {
val uri = mediaFile.toFile().toUri()
return createFromUri(
uri = uri,
mimeType = mediaInfo.mimeType,
name = mediaInfo.name,
formattedFileSize = mediaInfo.formattedFileSize
)
}
override fun createFromUri( override fun createFromUri(
uri: Uri, uri: Uri,
mimeType: String?, mimeType: String?,

18
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/LocalMediaFactory.kt

@ -17,12 +17,18 @@
package io.element.android.features.messages.impl.media.local package io.element.android.features.messages.impl.media.local
import android.net.Uri import android.net.Uri
import androidx.core.net.toUri
import io.element.android.libraries.matrix.api.media.MediaFile import io.element.android.libraries.matrix.api.media.MediaFile
import io.element.android.libraries.matrix.api.media.toFile
interface LocalMediaFactory { interface LocalMediaFactory {
/**
* This method will create a [LocalMedia] with the given [MediaFile] and [MediaInfo]
*/
fun createFromMediaFile(
mediaFile: MediaFile,
mediaInfo: MediaInfo,
): LocalMedia
/** /**
* This method will create a [LocalMedia] with the given mimeType, name and formattedFileSize * This method will create a [LocalMedia] with the given mimeType, name and formattedFileSize
* If any of those params are null, it'll try to read them from the content. * If any of those params are null, it'll try to read them from the content.
@ -34,11 +40,3 @@ interface LocalMediaFactory {
formattedFileSize: String? formattedFileSize: String?
): LocalMedia ): LocalMedia
} }
fun LocalMediaFactory.createFromMediaFile(
mediaFile: MediaFile,
mediaInfo: MediaInfo,
): LocalMedia {
val uri = mediaFile.toFile().toUri()
return createFromUri(uri = uri, mimeType = mediaInfo.mimeType, name = mediaInfo.name, formattedFileSize = mediaInfo.formattedFileSize)
}

1
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/local/MediaInfo.kt

@ -27,7 +27,6 @@ data class MediaInfo(
val formattedFileSize: String, val formattedFileSize: String,
) : Parcelable ) : Parcelable
fun anImageInfo(): MediaInfo = MediaInfo( fun anImageInfo(): MediaInfo = MediaInfo(
"an image file", MimeTypes.Jpeg, "4MB" "an image file", MimeTypes.Jpeg, "4MB"
) )

1
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/media/viewer/MediaViewerPresenter.kt

@ -31,7 +31,6 @@ import dagger.assisted.AssistedInject
import io.element.android.features.messages.impl.media.local.LocalMedia import io.element.android.features.messages.impl.media.local.LocalMedia
import io.element.android.features.messages.impl.media.local.LocalMediaActions import io.element.android.features.messages.impl.media.local.LocalMediaActions
import io.element.android.features.messages.impl.media.local.LocalMediaFactory import io.element.android.features.messages.impl.media.local.LocalMediaFactory
import io.element.android.features.messages.impl.media.local.createFromMediaFile
import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher import io.element.android.libraries.designsystem.utils.SnackbarDispatcher

1
features/messages/impl/src/test/kotlin/io/element/android/features/messages/attachments/AttachmentsPreviewPresenterTest.kt

@ -92,7 +92,6 @@ class AttachmentsPreviewPresenterTest {
private fun anAttachmentsPreviewPresenter( private fun anAttachmentsPreviewPresenter(
localMedia: LocalMedia = aLocalMedia( localMedia: LocalMedia = aLocalMedia(
uri = mockMediaUrl, uri = mockMediaUrl,
mimeType = MimeTypes.IMAGE_JPEG
), ),
room: MatrixRoom = FakeMatrixRoom() room: MatrixRoom = FakeMatrixRoom()
): AttachmentsPreviewPresenter { ): AttachmentsPreviewPresenter {

13
features/messages/impl/src/test/kotlin/io/element/android/features/messages/fixtures/media.kt

@ -17,23 +17,18 @@
package io.element.android.features.messages.fixtures package io.element.android.features.messages.fixtures
import android.net.Uri import android.net.Uri
import androidx.media3.common.MimeTypes
import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.Attachment
import io.element.android.features.messages.impl.media.local.LocalMedia import io.element.android.features.messages.impl.media.local.LocalMedia
import io.element.android.features.messages.impl.media.local.MediaInfo import io.element.android.features.messages.impl.media.local.MediaInfo
import io.element.android.features.messages.impl.media.local.anImageInfo
import io.element.android.libraries.core.mimetype.MimeTypes
fun aLocalMedia( fun aLocalMedia(
uri: Uri, uri: Uri,
mimeType: String = MimeTypes.IMAGE_JPEG, mediaInfo: MediaInfo = anImageInfo(),
name: String = "a media",
size: Long = 1000,
) = LocalMedia( ) = LocalMedia(
uri = uri, uri = uri,
info = MediaInfo( info = mediaInfo
mimeType = mimeType,
name = name,
formattedFileSize = "${size}B",
)
) )
fun aMediaAttachment(localMedia: LocalMedia, compressIfPossible: Boolean = true) = Attachment.Media( fun aMediaAttachment(localMedia: LocalMedia, compressIfPossible: Boolean = true) = Attachment.Media(

14
features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/FakeLocalMediaFactory.kt

@ -20,14 +20,26 @@ import android.net.Uri
import io.element.android.features.messages.fixtures.aLocalMedia import io.element.android.features.messages.fixtures.aLocalMedia
import io.element.android.features.messages.impl.media.local.LocalMedia import io.element.android.features.messages.impl.media.local.LocalMedia
import io.element.android.features.messages.impl.media.local.LocalMediaFactory import io.element.android.features.messages.impl.media.local.LocalMediaFactory
import io.element.android.features.messages.impl.media.local.MediaInfo
import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes
import io.element.android.libraries.matrix.api.media.MediaFile import io.element.android.libraries.matrix.api.media.MediaFile
class FakeLocalMediaFactory(private val localMediaUri: Uri) : LocalMediaFactory { class FakeLocalMediaFactory(private val localMediaUri: Uri) : LocalMediaFactory {
var fallbackMimeType: String = MimeTypes.OctetStream var fallbackMimeType: String = MimeTypes.OctetStream
var fallbackName: String = "File name"
var fallbackFileSize = "0B"
override fun createFromMediaFile(mediaFile: MediaFile, mediaInfo: MediaInfo): LocalMedia {
return aLocalMedia(uri = localMediaUri, mediaInfo = mediaInfo)
}
override fun createFromUri(uri: Uri, mimeType: String?, name: String?, formattedFileSize: String?): LocalMedia { override fun createFromUri(uri: Uri, mimeType: String?, name: String?, formattedFileSize: String?): LocalMedia {
return aLocalMedia(uri, mimeType ?: fallbackMimeType) val mediaInfo = MediaInfo(
name = name ?: fallbackName,
mimeType = mimeType ?: fallbackMimeType,
formattedFileSize = formattedFileSize ?: fallbackFileSize
)
return aLocalMedia(uri, mediaInfo)
} }
} }

4
features/messages/impl/src/test/kotlin/io/element/android/features/messages/media/viewer/MediaViewerPresenterTest.kt

@ -45,8 +45,8 @@ private const val TESTED_MEDIA_NAME = "MediaName"
class MediaViewerPresenterTest { class MediaViewerPresenterTest {
private val mockMediaUrl: Uri = mockk("localMediaUri") private val mockMediaUri: Uri = mockk("localMediaUri")
private val localMediaFactory = FakeLocalMediaFactory(mockMediaUrl) private val localMediaFactory = FakeLocalMediaFactory(mockMediaUri)
private val mediaLoader = FakeMediaLoader() private val mediaLoader = FakeMediaLoader()
@Test @Test

Loading…
Cancel
Save