Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: ui/file_manager/file_manager/background/js/media_import_handler_unittest.js

Issue 2594523002: Postpone the content duplication check until starting import. (Closed)
Patch Set: indent fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/background/js/media_import_handler_unittest.js
diff --git a/ui/file_manager/file_manager/background/js/media_import_handler_unittest.js b/ui/file_manager/file_manager/background/js/media_import_handler_unittest.js
index b9659cd6242e4e3667afa788e1101fe2ebb9c828..40084225c0c8d217725341bda304784523cfa899 100644
--- a/ui/file_manager/file_manager/background/js/media_import_handler_unittest.js
+++ b/ui/file_manager/file_manager/background/js/media_import_handler_unittest.js
@@ -14,6 +14,9 @@ var mediaImporter;
/** @type {!importer.TestImportHistory} */
var importHistory;
+/** @param {!importer.DispositionChecker.CheckerFunction} */
+var dispositionChecker;
+
/** @type {!VolumeInfo} */
var drive;
@@ -76,6 +79,13 @@ function setUp() {
MockVolumeManager.installMockSingleton(volumeManager);
importHistory = new importer.TestImportHistory();
+
+ // This is the default disposition checker used by mediaImporter.
+ // Tests can replace this at runtime if they want specialized behaviors.
+ dispositionChecker = function() {
+ return Promise.resolve(importer.Disposition.ORIGINAL);
+ };
+
mediaScanner = new TestMediaScanner();
destinationFileSystem = new MockFileSystem('googleDriveFilesystem');
destinationFactory = Promise.resolve(destinationFileSystem.root);
@@ -84,6 +94,9 @@ function setUp() {
mediaImporter = new importer.MediaImportHandler(
progressCenter,
importHistory,
+ function(entry, destination) {
+ return dispositionChecker(entry, destination);
+ },
new TestTracker());
}
@@ -99,9 +112,9 @@ function testImportMedia(callback) {
var scanResult = new TestScanResult(media);
var importTask = mediaImporter.importFromScanResult(
- scanResult,
- importer.Destination.GOOGLE_DRIVE,
- destinationFactory);
+ scanResult,
+ importer.Destination.GOOGLE_DRIVE,
+ destinationFactory);
var whenImportDone = new Promise(
function(resolve, reject) {
importTask.addObserver(
@@ -132,6 +145,77 @@ function testImportMedia(callback) {
scanResult.finalize();
}
+function testImportMedia_skipAndMarkDuplicatedFiles(callback) {
+ var DUPLICATED_FILE_PATH_1 = '/DCIM/photos0/duplicated_1.jpg';
+ var DUPLICATED_FILE_PATH_2 = '/DCIM/photos0/duplicated_2.jpg';
+ var ORIGINAL_FILE_NAME = 'new_image.jpg';
+ var ORIGINAL_FILE_SRC_PATH = '/DCIM/photos0/' + ORIGINAL_FILE_NAME;
+ var ORIGINAL_FILE_DEST_PATH = '/' + ORIGINAL_FILE_NAME;
+ var media = setupFileSystem([
+ DUPLICATED_FILE_PATH_1,
+ ORIGINAL_FILE_NAME,
+ DUPLICATED_FILE_PATH_2,
+ ]);
+
+ dispositionChecker = function(entry, destination) {
+ if (entry.fullPath == DUPLICATED_FILE_PATH_1) {
+ return Promise.resolve(importer.Disposition.HISTORY_DUPLICATE);
+ }
+ if (entry.fullPath == DUPLICATED_FILE_PATH_2) {
+ return Promise.resolve(importer.Disposition.CONTENT_DUPLICATE);
+ }
+ return Promise.resolve(importer.Disposition.ORIGINAL);
+ };
+ mediaImporter = new importer.MediaImportHandler(
+ progressCenter,
+ importHistory,
+ dispositionChecker,
+ new TestTracker());
+ var scanResult = new TestScanResult(media);
+ var importTask = mediaImporter.importFromScanResult(
+ scanResult,
+ importer.Destination.GOOGLE_DRIVE,
+ destinationFactory);
+ var whenImportDone = new Promise(
+ function(resolve, reject) {
+ importTask.addObserver(
+ /**
+ * @param {!importer.TaskQueue.UpdateType} updateType
+ * @param {!importer.TaskQueue.Task} task
+ */
+ function(updateType, task) {
+ switch (updateType) {
+ case importer.TaskQueue.UpdateType.COMPLETE:
+ resolve();
+ break;
+ case importer.TaskQueue.UpdateType.ERROR:
+ reject(new Error(importer.TaskQueue.UpdateType.ERROR));
+ break;
+ }
+ });
+ });
+
+ reportPromise(
+ whenImportDone.then(
+ function() {
+ // Only the new file should be copied.
+ var copiedEntries = destinationFileSystem.root.getAllChildren();
+ assertEquals(1, copiedEntries.length);
+ assertEquals(ORIGINAL_FILE_DEST_PATH, copiedEntries[0].fullPath);
+ importHistory.assertCopied(media[1],
+ importer.Destination.GOOGLE_DRIVE);
+ // The 2 duplicated files should be marked as imported.
+ [media[0], media[2]].forEach(
+ /** @param {!FileEntry} entry */
+ function(entry) {
+ importHistory.assertImported(
+ entry, importer.Destination.GOOGLE_DRIVE);
+ });
+ }), callback);
+
+ scanResult.finalize();
+}
+
function testImportMedia_EmploysEncodedUrls(callback) {
var media = setupFileSystem([
'/DCIM/photos0/Mom and Dad.jpg',
@@ -139,9 +223,9 @@ function testImportMedia_EmploysEncodedUrls(callback) {
var scanResult = new TestScanResult(media);
var importTask = mediaImporter.importFromScanResult(
- scanResult,
- importer.Destination.GOOGLE_DRIVE,
- destinationFactory);
+ scanResult,
+ importer.Destination.GOOGLE_DRIVE,
+ destinationFactory);
var promise = new Promise(
function(resolve, reject) {
@@ -189,9 +273,9 @@ function testImportMediaWithDuplicateFilenames(callback) {
var scanResult = new TestScanResult(media);
var importTask = mediaImporter.importFromScanResult(
- scanResult,
- importer.Destination.GOOGLE_DRIVE,
- destinationFactory);
+ scanResult,
+ importer.Destination.GOOGLE_DRIVE,
+ destinationFactory);
var whenImportDone = new Promise(
function(resolve, reject) {
importTask.addObserver(
@@ -235,9 +319,9 @@ function testKeepAwakeDuringImport(callback) {
var scanResult = new TestScanResult(media);
var importTask = mediaImporter.importFromScanResult(
- scanResult,
- importer.Destination.GOOGLE_DRIVE,
- destinationFactory);
+ scanResult,
+ importer.Destination.GOOGLE_DRIVE,
+ destinationFactory);
var whenImportDone = new Promise(
function(resolve, reject) {
importTask.addObserver(

Powered by Google App Engine
This is Rietveld 408576698