zotero/test/tests/preferences_advancedTest.js
Abe Jellinek 5d6ad703c1 Preferences: Fix tests, improve clarity, and more
- Fix sync and advanced preferences tests; use a new waitForFirstPaneLoad()
  functions instead of the old paneload event listener
- Remove empty preferences_searchTest.js
- Rename some Zotero_Preferences members/functions for better clarity and
  public/private differentiation
- Reorder, also for clarity
- Fix tabIndex parameter causing an error if invalid
- Remove window.sizeToContent() call in Sync.displayFields()
    - So *that's* why the window resized every time the sync pane was loaded...
- Deprecate openURL() and simplify openInViewer()
2022-09-02 11:01:37 -04:00

173 lines
5.4 KiB
JavaScript

describe("Advanced Preferences", function () {
// TODO: Debug output logging is now in the application menus, and we test in Firefox...
// Maybe add the debug output menu to Firefox for the purposes of testing?
describe.skip("General", function () {
var server;
before(function () {
server = sinon.fakeServer.create();
server.autoRespond = true;
Zotero.HTTP.mock = sinon.FakeXMLHttpRequest;
});
after(function () {
Zotero.HTTP.mock = null;
})
describe("Debug Output", function () {
it("should log output and submit to server", function* () {
var win = yield loadWindow("chrome://zotero/content/preferences/preferences.xhtml", {
pane: 'zotero-prefpane-advanced',
tabIndex: 0
});
// Wait for tab to load
var doc = win.document;
var prefwindow = doc.documentElement;
var defer = Zotero.Promise.defer();
var pane = doc.getElementById('zotero-prefpane-advanced');
if (!pane.loaded) {
pane.addEventListener('paneload', function () {
defer.resolve();
})
yield defer.promise;
}
var enableButton = doc.getElementById('debug-output-enable');
enableButton.click();
yield createDataObject('item');
enableButton.click();
server.respond(function (req) {
if (req.method == "POST") {
req.respond(
200,
{},
'<?xml version="1.0" encoding="UTF-8"?>\n'
+ '<xml><reported reportID="1234567890"/></xml>'
);
}
});
// Make sure Debug ID is shown in dialog
var promise = waitForDialog(function (dialog) {
assert.match(dialog.document.documentElement.textContent, /D1234567890/);
});
doc.getElementById('debug-output-submit').click();
yield promise;
win.close();
});
});
});
describe("Files & Folders", function () {
describe("Linked Attachment Base Directory", function () {
var setBaseDirectory = Zotero.Promise.coroutine(function* (basePath) {
var win = yield loadWindow("chrome://zotero/content/preferences/preferences.xhtml", {
pane: 'zotero-prefpane-advanced'
});
// Wait for tab to load
yield win.Zotero_Preferences.waitForFirstPaneLoad();
var promise = waitForDialog();
yield win.Zotero_Preferences.Attachment_Base_Directory.changePath(basePath);
yield promise;
win.close();
});
var clearBaseDirectory = Zotero.Promise.coroutine(function* (basePath) {
var win = yield loadWindow("chrome://zotero/content/preferences/preferences.xhtml", {
pane: 'zotero-prefpane-advanced',
tabIndex: 1
});
// Wait for tab to load
yield win.Zotero_Preferences.waitForFirstPaneLoad();
var promise = waitForDialog();
yield win.Zotero_Preferences.Attachment_Base_Directory.clearPath();
yield promise;
win.close();
});
beforeEach(function () {
Zotero.Prefs.clear('baseAttachmentPath');
Zotero.Prefs.clear('saveRelativeAttachmentPath');
});
it("should set new base directory", function* () {
var basePath = getTestDataDirectory().path;
yield setBaseDirectory(basePath);
assert.equal(Zotero.Prefs.get('baseAttachmentPath'), basePath);
assert.isTrue(Zotero.Prefs.get('saveRelativeAttachmentPath'));
})
it("should clear base directory", function* () {
var basePath = getTestDataDirectory().path;
yield setBaseDirectory(basePath);
yield clearBaseDirectory();
assert.equal(Zotero.Prefs.get('baseAttachmentPath'), '');
assert.isFalse(Zotero.Prefs.get('saveRelativeAttachmentPath'));
})
it("should change absolute path of linked attachment under new base dir to prefixed path", function* () {
var file = getTestDataDirectory();
file.append('test.png');
var attachment = yield Zotero.Attachments.linkFromFile({ file });
assert.equal(attachment.attachmentPath, file.path);
var basePath = getTestDataDirectory().path;
yield setBaseDirectory(basePath);
assert.equal(
attachment.attachmentPath,
Zotero.Attachments.BASE_PATH_PLACEHOLDER + 'test.png'
);
})
it("should change prefixed path to absolute when changing base directory", function* () {
var basePath = getTestDataDirectory().path;
yield setBaseDirectory(basePath);
var file = getTestDataDirectory();
file.append('test.png');
var attachment = yield Zotero.Attachments.linkFromFile({ file });
assert.equal(
attachment.attachmentPath,
Zotero.Attachments.BASE_PATH_PLACEHOLDER + 'test.png'
);
// Choose a nonexistent directory for the base path
var otherPath = OS.Path.join(OS.Path.dirname(basePath), 'foobar');
yield setBaseDirectory(otherPath);
assert.equal(attachment.attachmentPath, file.path);
})
it("should change prefixed path to absolute when clearing base directory", function* () {
var basePath = getTestDataDirectory().path;
yield setBaseDirectory(basePath);
var file = getTestDataDirectory();
file.append('test.png');
var attachment = yield Zotero.Attachments.linkFromFile({ file });
assert.equal(
attachment.attachmentPath,
Zotero.Attachments.BASE_PATH_PLACEHOLDER + 'test.png'
);
yield clearBaseDirectory();
assert.equal(Zotero.Prefs.get('baseAttachmentPath'), '');
assert.isFalse(Zotero.Prefs.get('saveRelativeAttachmentPath'));
assert.equal(attachment.attachmentPath, file.path);
})
})
})
})