From 6c68e79a222fabfb32f785513979bf7c9c9bee72 Mon Sep 17 00:00:00 2001 From: Kate Glazko Date: Wed, 11 Nov 2020 09:00:17 -0800 Subject: [PATCH] For #14772: Crash in Downloads --- .../library/downloads/DownloadFragment.kt | 2 +- .../library/downloads/DownloadFragmentTest.kt | 45 +++++++++++++++++-- 2 files changed, 43 insertions(+), 4 deletions(-) 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 36fc7821a..a3fd6302c 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,7 +91,7 @@ class DownloadFragment : LibraryPageFragment(), UserInteractionHan it.id, it.fileName, it.filePath, - it.contentLength.toString(), + it.contentLength?.toString() ?: "0", it.contentType, it.status ) 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 ecb19e78c..b2b6d889f 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 @@ -48,7 +48,7 @@ class DownloadFragmentTest { "3", "3.pdf", downloadedFile3.path, - "null", + "0", null, DownloadState.Status.COMPLETED ), @@ -56,7 +56,7 @@ class DownloadFragmentTest { "2", "2.pdf", downloadedFile2.path, - "null", + "0", null, DownloadState.Status.COMPLETED ), @@ -64,7 +64,7 @@ class DownloadFragmentTest { "1", "1.pdf", downloadedFile1.path, - "null", + "0", null, DownloadState.Status.COMPLETED ) @@ -104,4 +104,43 @@ class DownloadFragmentTest { downloadedFile2.delete() downloadedFile3.delete() } + + @Test + fun `downloads with null content length don't crash`() { + val downloadedFile0 = File( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), + "1.pdf" + ) + + downloadedFile0.createNewFile() + + val fragment = DownloadFragment() + + val expectedList = listOf( + DownloadItem( + "1", + "1.pdf", + downloadedFile0.path, + "0", + null, + DownloadState.Status.COMPLETED + ) + ) + + val state: BrowserState = mockk(relaxed = true) + + every { state.downloads } returns mapOf( + "1" to DownloadState( + id = "1", + createdTime = 1, + url = "url", + fileName = "1.pdf", + contentLength = null, + status = DownloadState.Status.COMPLETED + ) + ) + + val list = fragment.provideDownloads(state) + assertEquals(expectedList[0].size, list[0].size) + } }