"use strict";

describe("Note Editor", function () {
	var win, zp;
	
	before(function* () {
		win = yield loadZoteroPane();
		zp = win.ZoteroPane;
	});
	
	beforeEach(function* () {
		// Avoid "this._editor is undefined" error between tests,
		// though there's definitely a better way to fix this
		yield Zotero.Promise.delay(50);
	});
	
	after(function () {
		win.close();
	});
	
	describe("Tags box", function () {
		it("should open new row for editing if no tags", function* () {
			var note = yield createDataObject('item', { itemType: 'note' });
			var noteEditor = win.document.getElementById('zotero-note-editor');
			var linksBox = noteEditor._id('links-box');
			linksBox.tagsClick();
			var tagsBox = linksBox.id('tagsPopup').firstChild;
			var tagRows = tagsBox.id('tagRows');
			assert.equal(tagRows.childNodes.length, 1);
			
			linksBox.id('tagsPopup').hidePopup();
		});
		
		it("should only open one new row for editing", function* () {
			var note = yield createDataObject('item', { itemType: 'note' });
			var noteEditor = win.document.getElementById('zotero-note-editor');
			var linksBox = noteEditor._id('links-box');
			linksBox.tagsClick();
			// Close and reopen
			linksBox.id('tagsPopup').hidePopup();
			linksBox.tagsClick();
			
			// Should still be only one empty row
			var tagsBox = linksBox.id('tagsPopup').firstChild;
			var tagRows = tagsBox.id('tagRows');
			assert.equal(tagRows.childNodes.length, 1);
			
			linksBox.id('tagsPopup').hidePopup();
		});
		
		it("should show tags in alphabetical order", function* () {
			// FIXME: This test fails too often in Travis
			if (Zotero.automatedTest) {
				this.skip();
				return;
			}
			
			var note = new Zotero.Item('note');
			note.addTag('B');
			yield note.saveTx();
			note.addTag('A');
			note.addTag('C');
			yield note.saveTx();
			
			var noteEditor = win.document.getElementById('zotero-note-editor');
			var linksBox = noteEditor._id('links-box');
			assert.equal(linksBox.id('tags').summary, "A, B, C");
		});
	});
});