zotero/test/tests/folderImportTest.js
2023-03-21 20:42:43 +01:00

136 lines
4.8 KiB
JavaScript

/* global Zotero_Import_Folder: false */
describe('Zotero_Import_Folder', function () {
var tmpDir;
const uc = name => 'Zotero_Import_Folder_' + name;
before(async () => {
tmpDir = await getTempDirectory();
await OS.File.makeDir(OS.Path.join(tmpDir, uc('dir1')));
await OS.File.makeDir(OS.Path.join(tmpDir, uc('dir1'), uc('subdir1')));
await OS.File.makeDir(OS.Path.join(tmpDir, uc('dir2')));
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'recognizePDF_test_title.pdf'),
OS.Path.join(tmpDir, 'recognizePDF_test_title.pdf')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'recognizePDF_test_title.pdf'),
OS.Path.join(tmpDir, uc('dir1'), 'recognizePDF_test_title.pdf')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'recognizePDF_test_arXiv.pdf'),
OS.Path.join(tmpDir, uc('dir1'), uc('subdir1'), 'recognizePDF_test_arXiv.pdf')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'recognizePDF_test_title.pdf'),
OS.Path.join(tmpDir, uc('dir2'), 'recognizePDF_test_title.pdf')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'test.png'),
OS.Path.join(tmpDir, uc('dir2'), 'test.png')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'test.html'),
OS.Path.join(tmpDir, uc('dir2'), 'test.html')
);
await OS.File.copy(
OS.Path.join(getTestDataDirectory().path, 'test.txt'),
OS.Path.join(tmpDir, uc('dir2'), 'test.txt')
);
Components.utils.import('chrome://zotero/content/import/folderImport.js');
});
describe('#import', () => {
it('should import PDFs from a folder and recreate structure without creating duplicates', async function () {
this.timeout(30000);
if (Zotero.automatedTest) {
this.skip();
}
const importer = new Zotero_Import_Folder({
folder: tmpDir,
recreateStructure: true,
});
await importer.translate({
libraryID: Zotero.Libraries.userLibraryID,
linkFiles: true,
});
assert.equal(importer.newItems.length, 2);
const firstPDFAttachment = importer.newItems.find(ni => ni.getField('title') === 'recognizePDF_test_arXiv.pdf');
const firstPDFItem = await Zotero.Items.getAsync(firstPDFAttachment.parentID);
const firstPDFCollections = await Zotero.Collections.getAsync(firstPDFItem.getCollections());
assert.equal(firstPDFItem.getField('title'), 'Scaling study of an improved fermion action on quenched lattices');
assert.equal(firstPDFCollections.length, 1);
assert.equal(firstPDFCollections[0].name, uc('subdir1'));
assert.equal((await Zotero.Collections.getAsync(firstPDFCollections[0].parentID)).name, uc('dir1'));
const secondPDFAttachment = importer.newItems.find(ni => ni.getField('title') === 'recognizePDF_test_title.pdf');
const secondPDFItem = await Zotero.Items.getAsync(secondPDFAttachment.parentID);
const secondPDFCollections = await Zotero.Collections.getAsync(secondPDFItem.getCollections());
assert.equal(secondPDFItem.getField('title'), 'Bitcoin: A Peer-to-Peer Electronic Cash System');
assert.equal(secondPDFCollections.length, 2);
assert.sameMembers(secondPDFCollections.map(c => c.name), [uc('dir1'), uc('dir2')]);
assert.sameMembers(
Zotero.Collections.getByLibrary(Zotero.Libraries.userLibraryID, true)
.map(c => c.name)
.filter(c => c.startsWith('Zotero_Import_Folder')),
[uc('dir1'), uc('dir2'), uc('subdir1')]
);
const importer2 = new Zotero_Import_Folder({
folder: tmpDir,
recreateStructure: true,
});
await importer2.translate({
libraryID: Zotero.Libraries.userLibraryID,
linkFiles: true,
});
assert.lengthOf(importer2.newItems, 0);
assert.sameMembers(
Zotero.Collections.getByLibrary(Zotero.Libraries.userLibraryID, true)
.map(c => c.name)
.filter(c => c.startsWith('Zotero_Import_Folder')),
[uc('dir1'), uc('dir2'), uc('subdir1')]
);
});
it('should only import specified file types from a folder', async function () {
this.timeout(30000);
if (Zotero.automatedTest) {
this.skip();
}
const importer = new Zotero_Import_Folder({
folder: tmpDir,
recreateStructure: false,
fileTypes: '*.png,*.TXT', // should match case-insensitively
mimeTypes: []
});
await importer.translate({
libraryID: Zotero.Libraries.userLibraryID,
linkFiles: true,
});
assert.equal(importer.newItems.length, 2);
const pngItem = importer.newItems.find(ni => ni.getField('title') === 'test.png');
assert.isDefined(pngItem);
assert.isFalse(pngItem.parentID);
const txtItem = importer.newItems.find(ni => ni.getField('title') === 'test.txt');
assert.isDefined(txtItem);
assert.isFalse(txtItem.parentID);
const htmlItem = importer.newItems.find(ni => ni.getField('title') === 'test.html');
assert.isUndefined(htmlItem);
});
});
});