www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

notifierTest.js (2364B)


      1 "use strict";
      2 
      3 describe("Zotero.Notifier", function () {
      4 	describe("#trigger()", function () {
      5 		it("should trigger add events before modify events", function* () {
      6 			var deferred = Zotero.Promise.defer();
      7 			var events = [];
      8 			var observer = {
      9 				notify: (action, type, ids) => {
     10 					events.push(action);
     11 					if (events.length == 2) {
     12 						deferred.resolve();
     13 					}
     14 				}
     15 			};
     16 			var id = Zotero.Notifier.registerObserver(observer, null, 'test_trigger');
     17 			
     18 			yield Zotero.DB.executeTransaction(function* () {
     19 				var item = new Zotero.Item('book');
     20 				item.setField('title', 'A');
     21 				yield item.save();
     22 				item.setField('title', 'B');
     23 				yield item.save();
     24 				
     25 				Zotero.Notifier.queue('unknown', 'item', item.id);
     26 			});
     27 			
     28 			assert.isTrue(deferred.promise.isResolved());
     29 			assert.lengthOf(events, 3);
     30 			assert.equal(events[0], 'add');
     31 			assert.equal(events[1], 'modify');
     32 			assert.equal(events[2], 'unknown');
     33 			
     34 			Zotero.Notifier.unregisterObserver(id);
     35 		});
     36 		
     37 		it("should add events to passed queue", function* () {
     38 			var collection = yield createDataObject('collection');
     39 			
     40 			var deferred = Zotero.Promise.defer();
     41 			var observer = {
     42 				notify: () => deferred.resolve()
     43 			};
     44 			var id = Zotero.Notifier.registerObserver(observer, null, 'test_trigger');
     45 			
     46 			var queue = new Zotero.Notifier.Queue;
     47 			var item = createUnsavedDataObject('item');
     48 			item.setCollections([collection.id]);
     49 			yield item.saveTx({
     50 				notifierQueue: queue
     51 			});
     52 			assert.isTrue(deferred.promise.isPending());
     53 			assert.equal(queue.size, 2);
     54 			yield Zotero.Notifier.commit(queue);
     55 			assert.isTrue(deferred.promise.isResolved());
     56 			
     57 			Zotero.Notifier.unregisterObserver(id);
     58 		});
     59 	});
     60 	
     61 	describe("#queue", function () {
     62 		it("should handle notification after DB timeout from another transaction", async function () {
     63 			var promise1 = Zotero.DB.executeTransaction(async function () {
     64 				var item = createUnsavedDataObject('item');
     65 				await item.save();
     66 				
     67 				await Zotero.Promise.delay(2000);
     68 				
     69 				Zotero.Notifier.queue('refresh', 'item', item.id);
     70 			}.bind(this));
     71 			
     72 			var promise2 = Zotero.DB.executeTransaction(async function () {
     73 				var item = createUnsavedDataObject('item');
     74 				await item.save();
     75 			}.bind(this), { waitTimeout: 1000 });
     76 			
     77 			await promise1;
     78 			assert.isTrue(promise2.isRejected());
     79 		});
     80 	});
     81 });