From ec4ad984c25422ebf36be7dc18ef2716f7c43532 Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Wed, 3 Aug 2022 09:18:01 +0300 Subject: [PATCH] For #26239 - Avoid displaying multiple download items for the same file --- .../library/downloads/DownloadFragment.kt | 1 + .../library/downloads/DownloadFragmentTest.kt | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt index 5bd5579a3..ba3aa5622 100644 --- a/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/downloads/DownloadFragment.kt @@ -91,6 +91,7 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan @VisibleForTesting internal fun provideDownloads(state: BrowserState): List { return state.downloads.values + .distinctBy { it.fileName } .sortedByDescending { it.createdTime } // sort from newest to oldest .map { DownloadItem( diff --git a/app/src/test/java/org/mozilla/fenix/library/downloads/DownloadFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/library/downloads/DownloadFragmentTest.kt index abe187b3e..aa126ee8f 100644 --- a/app/src/test/java/org/mozilla/fenix/library/downloads/DownloadFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/downloads/DownloadFragmentTest.kt @@ -147,4 +147,37 @@ class DownloadFragmentTest { val list = fragment.provideDownloads(state) assertEquals(expectedList[0].size, list[0].size) } + + @Test + fun `WHEN two download states point to the same existing file THEN only one download item is displayed`() { + val fragment = DownloadFragment() + val downloadedFile0 = File( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), + "1.pdf" + ) + val state: BrowserState = mockk(relaxed = true) + every { state.downloads } returns mapOf( + "1" to DownloadState( + id = "1", + createdTime = 1, + url = "url", + fileName = "1.pdf", + contentLength = 100, + status = DownloadState.Status.COMPLETED + ), + "2" to DownloadState( + id = "2", + createdTime = 2, + url = "url", + fileName = "1.pdf", + contentLength = 100, + status = DownloadState.Status.COMPLETED + ) + ) + + downloadedFile0.createNewFile() + val providedList = fragment.provideDownloads(state) + + assertEquals(1, providedList.size) + } }