181 lines
		
	
	
	
		
			5.9 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
	
		
			5.9 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| describe("Zotero_Browser", function () {
 | |
| 	var win, collection;
 | |
| 	
 | |
| 	before(function* () {
 | |
| 		this.timeout(60000);
 | |
| 		yield Zotero.Translators.init();
 | |
| 		
 | |
| 		win = yield loadBrowserWindow();
 | |
| 		collection = yield createDataObject('collection');
 | |
| 	});
 | |
| 	
 | |
| 	after(function* () {
 | |
| 		win.close();
 | |
| 	});
 | |
| 	
 | |
| 	afterEach(function () {
 | |
| 		Zotero.ProgressWindowSet.closeAll();
 | |
| 	})
 | |
| 	
 | |
| 	var waitForTranslateIcon = Zotero.Promise.coroutine(function* () {
 | |
| 		var button = win.document.getElementById('zotero-toolbar-save-button');
 | |
| 		if (button.classList.contains('translate')) {
 | |
| 			return;
 | |
| 		}
 | |
| 		Zotero.debug("Waiting for translator icon");
 | |
| 		do {
 | |
| 			yield Zotero.Promise.delay(50);
 | |
| 		}
 | |
| 		while (!button.classList.contains('translate'));
 | |
| 	});
 | |
| 	
 | |
| 	
 | |
| 	it("should save webpage to current collection", function* () {
 | |
| 		var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		var collection = yield createDataObject('collection');
 | |
| 		
 | |
| 		var promise = waitForItemEvent('add');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		var ids = yield promise;
 | |
| 		var items = Zotero.Items.get(ids);
 | |
| 		assert.lengthOf(items, 1);
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'webpage');
 | |
| 		assert.isTrue(collection.hasItem(items[0].id));
 | |
| 	})
 | |
| 	
 | |
| 	it("should save journal article to current collection", function* () {
 | |
| 		var uri = OS.Path.join(
 | |
| 			getTestDataDirectory().path, "metadata", "journalArticle-single.html"
 | |
| 		);
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		var collection = yield createDataObject('collection');
 | |
| 		
 | |
| 		var promise = waitForItemEvent('add');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		var ids = yield promise;
 | |
| 		var items = Zotero.Items.get(ids);
 | |
| 		assert.lengthOf(items, 1);
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'journalArticle');
 | |
| 		assert.isTrue(collection.hasItem(items[0].id));
 | |
| 	})
 | |
| 	
 | |
| 	it("should save book with child note to current collection", function* () {
 | |
| 		var uri = OS.Path.join(
 | |
| 			getTestDataDirectory().path, "book_and_child_note.ris"
 | |
| 		);
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		// Detection runs twice for local files, so wait for the icon to actually appear
 | |
| 		yield waitForTranslateIcon();
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		var collection = yield createDataObject('collection');
 | |
| 		
 | |
| 		var promise = waitForItemEvent('add');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		
 | |
| 		var ids = yield promise;
 | |
| 		var items = Zotero.Items.get(ids);
 | |
| 		assert.lengthOf(items, 2);
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'book');
 | |
| 		assert.isTrue(collection.hasItem(items[0].id));
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[1].itemTypeID), 'note');
 | |
| 	});
 | |
| 	
 | |
| 	it("should save PDF to library root", function* () {
 | |
| 		var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf");
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		
 | |
| 		var promise = waitForItemEvent('add');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		var ids = yield promise;
 | |
| 		var items = Zotero.Items.get(ids);
 | |
| 		assert.lengthOf(items, 1);
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'attachment');
 | |
| 		assert.equal(items[0].getField('title'), 'test.pdf');
 | |
| 		assert.equal(items[0].attachmentContentType, 'application/pdf');
 | |
| 		assert.equal(Zotero.Attachments.linkModeToName(items[0].attachmentLinkMode), 'imported_url');
 | |
| 	});
 | |
| 	
 | |
| 	it("should save PDF to current collection", function* () {
 | |
| 		var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf");
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		var collection = yield createDataObject('collection');
 | |
| 		
 | |
| 		var promise = waitForItemEvent('add');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		var ids = yield promise;
 | |
| 		var items = Zotero.Items.get(ids);
 | |
| 		assert.lengthOf(items, 1);
 | |
| 		assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'attachment');
 | |
| 		assert.isTrue(collection.hasItem(items[0].id));
 | |
| 	});
 | |
| 	
 | |
| 	it("shouldn't save webpage to My Publications", function* () {
 | |
| 		var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		yield win.ZoteroPane.collectionsView.selectByID("P" + Zotero.Libraries.userLibraryID);
 | |
| 		
 | |
| 		var promise = waitForDialog(function (dialog) {
 | |
| 			assert.include(
 | |
| 				dialog.document.documentElement.textContent,
 | |
| 				Zotero.getString('save.error.cannotAddToMyPublications')
 | |
| 			);
 | |
| 		});
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		yield promise;
 | |
| 	})
 | |
| 	
 | |
| 	it("shouldn't save journal article to My Publications", function* () {
 | |
| 		var uri = OS.Path.join(
 | |
| 			getTestDataDirectory().path, "metadata", "journalArticle-single.html"
 | |
| 		);
 | |
| 		var deferred = Zotero.Promise.defer();
 | |
| 		win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
 | |
| 		win.loadURI(uri);
 | |
| 		yield deferred.promise;
 | |
| 		
 | |
| 		yield loadZoteroPane(win);
 | |
| 		yield win.ZoteroPane.collectionsView.selectByID("P" + Zotero.Libraries.userLibraryID);
 | |
| 		
 | |
| 		var promise = waitForDialog(function (dialog) {
 | |
| 			assert.include(
 | |
| 				dialog.document.documentElement.textContent,
 | |
| 				Zotero.getString('save.error.cannotAddToMyPublications')
 | |
| 			);
 | |
| 		}, false, 'chrome://zotero/content/progressWindow.xul');
 | |
| 		yield win.Zotero_Browser.scrapeThisPage();
 | |
| 		yield promise;
 | |
| 	})
 | |
| })
 | 
