summaryrefslogtreecommitdiffstats
path: root/toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js')
-rw-r--r--toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js b/toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js
new file mode 100644
index 0000000000..ea41038bf1
--- /dev/null
+++ b/toolkit/components/downloads/test/unit/test_DownloadHistory_initialization.js
@@ -0,0 +1,108 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { DownloadHistory } = ChromeUtils.importESModule(
+ "resource://gre/modules/DownloadHistory.sys.mjs"
+);
+const { PlacesTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/PlacesTestUtils.sys.mjs"
+);
+
+let baseDate = new Date("2000-01-01");
+
+/**
+ * This test is designed to ensure the cache of download history is correctly
+ * loaded and initialized. We do this by having the test as the only test in
+ * this file, and injecting data into the places database before we start.
+ */
+add_task(async function test_DownloadHistory_initialization() {
+ // Clean up at the beginning and at the end of the test.
+ async function cleanup() {
+ await PlacesUtils.history.clear();
+ }
+ registerCleanupFunction(cleanup);
+ await cleanup();
+
+ let testDownloads = [];
+ for (let i = 10; i <= 30; i += 10) {
+ let targetFile = getTempFile(`${TEST_TARGET_FILE_NAME}${i}`);
+ let download = {
+ source: {
+ url: httpUrl(`source${i}`),
+ isPrivate: false,
+ },
+ target: { path: targetFile.path },
+ endTime: baseDate.getTime() + i,
+ fileSize: 100 + i,
+ state: i / 10,
+ };
+
+ await PlacesTestUtils.addVisits([
+ {
+ uri: download.source.url,
+ transition: PlacesUtils.history.TRANSITIONS.DOWNLOAD,
+ },
+ ]);
+
+ let targetUri = Services.io.newFileURI(
+ new FileUtils.File(download.target.path)
+ );
+
+ await PlacesUtils.history.update({
+ annotations: new Map([
+ ["downloads/destinationFileURI", targetUri.spec],
+ [
+ "downloads/metaData",
+ JSON.stringify({
+ state: download.state,
+ endTime: download.endTime,
+ fileSize: download.fileSize,
+ }),
+ ],
+ ]),
+ url: download.source.url,
+ });
+
+ testDownloads.push(download);
+ }
+
+ // Initialize DownloadHistoryList only after having added the history and
+ // session downloads.
+ let historyList = await DownloadHistory.getList();
+ let downloads = await historyList.getAll();
+ Assert.equal(downloads.length, testDownloads.length);
+
+ for (let expected of testDownloads) {
+ let download = downloads.find(d => d.source.url == expected.source.url);
+
+ info(`Checking download ${expected.source.url}`);
+ Assert.ok(download, "Should have found the expected download");
+ Assert.equal(
+ download.endTime,
+ expected.endTime,
+ "Should have the correct end time"
+ );
+ Assert.equal(
+ download.target.size,
+ expected.fileSize,
+ "Should have the correct file size"
+ );
+ Assert.equal(
+ download.succeeded,
+ expected.state == 1,
+ "Should have the correct succeeded value"
+ );
+ Assert.equal(
+ download.canceled,
+ expected.state == 3,
+ "Should have the correct canceled value"
+ );
+ Assert.equal(
+ download.target.path,
+ expected.target.path,
+ "Should have the correct target path"
+ );
+ }
+});