zotero/test/tests/noteTabTest.js
windingwind 97d0bdbaea
Fix note tab reopen logic (#5706)
fix: #5704
Distinguish note editor CE and instance in var name
Add note editor CE _initPromise
Await CE init in various places
Add tests for note tab
2026-01-20 10:56:04 -05:00

97 lines
3 KiB
JavaScript

describe("Note Tab", function () {
var win, doc, ZoteroPane, Zotero_Tabs, ZoteroContextPane;
before(async function () {
win = await loadZoteroPane();
doc = win.document;
ZoteroPane = win.ZoteroPane;
Zotero_Tabs = win.Zotero_Tabs;
ZoteroContextPane = win.ZoteroContextPane;
});
after(function () {
Zotero_Tabs.closeAll();
win.close();
});
describe("Note Tab Operations", function () {
beforeEach(function () {
// Reset the state before each test
Zotero_Tabs.closeAll();
});
it("should open note in tab", async function () {
let item = new Zotero.Item('note');
item.setNote('This is a test note.');
await item.saveTx();
let editorInstance = await Zotero.Notes.open(item.id);
assert.isNotNull(editorInstance, "Note editor should be opened");
assert.equal(editorInstance.itemID, item.id, "Note editor should be associated with the correct item");
let sameNoteEditor = await Zotero.Notes.open(item.id, undefined, {
tabID: Zotero_Tabs.selectedID,
});
assert.equal(editorInstance, sameNoteEditor, "Opening the same note should return the existing editor");
let duplicateEditorInstance = await Zotero.Notes.open(item.id, undefined, {
allowDuplicate: true,
});
assert.isNotNull(duplicateEditorInstance, "Duplicate note editor should be opened");
assert.notEqual(editorInstance, duplicateEditorInstance, "Duplicate note editor should be a new instance");
assert.equal(duplicateEditorInstance.itemID, item.id, "Duplicate note editor should be associated with the correct item");
Zotero_Tabs.closeAll();
await waitForCallback(
() => !Zotero.Notes._editorInstances.find(e => e.tabID),
100, 10);
await Zotero.Notes.open(item.id, undefined, {
openInBackground: true,
});
assert.equal(Zotero_Tabs.selectedType, 'library', "Tab should be opened in background");
});
it("should open unloaded note tab", async function () {
// https://forums.zotero.org/discussion/128954/
let item = new Zotero.Item("note");
item.setNote("This is a test note.");
await item.saveTx();
let editorInstance = await Zotero.Notes.open(item.id);
let tabID = editorInstance.tabID;
Zotero_Tabs.unload(tabID);
let editor2 = await ZoteroPane.openNote(item.id);
assert.equal(editorInstance, editor2, "Unloaded note tab should be reloaded");
});
it("should select opened note tab", async function () {
// https://forums.zotero.org/discussion/128917/
let item = new Zotero.Item("note");
item.setNote("This is a test note.");
await item.saveTx();
let editorInstance = await Zotero.Notes.open(item.id);
let tabID = editorInstance.tabID;
let promise = waitForNotifierEvent("select", "tab");
Zotero_Tabs.select("zotero-pane");
await promise;
promise = waitForNotifierEvent("select", "tab");
let editor2 = await ZoteroPane.openNote(item.id);
await promise;
assert.equal(Zotero_Tabs.selectedID, tabID, "Should select the opened note tab");
assert.equal(editor2, editorInstance, "Should return the same editor instance");
});
});
});