"use strict";

describe("Zotero.Sync.EventListeners", function () {
	describe("AutoSyncListener", function () {
		var originalTimeout;
		
		before(function () {
			originalTimeout = Zotero.Sync.EventListeners.AutoSyncListener._editTimeout;
			assert.ok(originalTimeout);
			// Set timeout to 1ms
			Zotero.Sync.EventListeners.AutoSyncListener._editTimeout = 0.001;
			Zotero.Prefs.set('sync.autoSync', true);
		});
		
		
		after(function () {
			Zotero.Sync.EventListeners.AutoSyncListener._editTimeout = originalTimeout;
			Zotero.Prefs.set('sync.autoSync', false);
			Zotero.Prefs.clear('sync.librariesToSkip');
		});
		
		
		it("should sync only changed library", function* () {
			var mock = sinon.mock(Zotero.Sync.Runner);
			var expectation = mock.expects("setSyncTimeout").once();
			
			var group = yield createGroup();
			yield createDataObject('item', { libraryID: group.libraryID });
			
			yield Zotero.Promise.delay(10);
			mock.verify();
			assert.sameMembers(expectation.getCall(0).args[2].libraries, [group.libraryID]);
		});
		
		
		it("shouldn't sync skipped library", function* () {
			var mock = sinon.mock(Zotero.Sync.Runner);
			var expectation = mock.expects("setSyncTimeout").never();
			
			var group = yield createGroup();
			Zotero.Prefs.set('sync.librariesToSkip', JSON.stringify(["G" + group.groupID]));
			yield createDataObject('item', { libraryID: group.libraryID });
			
			yield Zotero.Promise.delay(10);
			mock.verify();
		});
	});
});