zotero/test/tests/feedItemsTest.js
Abe Jellinek 67d2e1cead fx140: Asyncify/ESMify tests
They seem to be succeeding when run individually, but failing when
run as a whole. Not sure why yet.
2025-07-30 22:30:53 -04:00

151 lines
4.2 KiB
JavaScript

describe("Zotero.FeedItems", function () {
let feed;
before(function* () {
feed = yield createFeed({ name: 'foo', url: 'http://' + Zotero.randomString() + '.com' });
});
after(function () {
return clearFeeds();
});
describe("#getMarkedAsRead", function () {
var items = [];
var result;
before(async function () {
for (let i = 0; i < 4; i++) {
let f = await createDataObject(
'feedItem',
{
libraryID: feed.libraryID,
guid: 'http://www.example.com/' + i
}
);
items.push(f);
}
await items[0].toggleRead();
await items[2].toggleRead();
result = (await Zotero.FeedItems.getMarkedAsRead(feed.libraryID)).map(x => x.id);
});
it('should get all marked as read items', function () {
assert.include(result, items[0].id);
assert.include(result, items[2].id);
});
it('should not include items that were not marked', function () {
assert.notInclude(result, items[1].id);
assert.notInclude(result, items[3].id);
});
});
describe("#markAsReadByGUID", function () {
var items = [];
var result;
before(function* () {
for (let i = 0; i < 4; i++) {
let f = yield createDataObject('feedItem', {
libraryID: feed.libraryID,
guid: 'http://' + Zotero.Utilities.randomString() + '.com/feed.rss'
});
items.push(f);
}
yield Zotero.FeedItems.markAsReadByGUID([items[0].guid, items[2].guid]);
});
it('should mark as read only specified guids', function () {
assert.isTrue(items[0].isRead);
assert.isTrue(items[2].isRead);
});
it('should leave other items marked unread', function () {
assert.isFalse(items[1].isRead);
assert.isFalse(items[3].isRead);
});
});
describe("#getIDFromGUID()", function () {
it("should return false for non-existent GUID", async function () {
let id = await Zotero.FeedItems.getIDFromGUID(Zotero.randomString());
assert.isFalse(id);
});
it("should return feed item id from GUID", async function () {
let feedItem = await createDataObject('feedItem', { libraryID: feed.libraryID });
await feedItem.saveTx();
let id2 = await Zotero.FeedItems.getIDFromGUID(feedItem.guid);
assert.equal(id2, feedItem.id);
});
});
describe("#getAsyncByGUID()", function () {
it("should return feed item from GUID", async function () {
let guid = Zotero.randomString();
let feedItem = await createDataObject('feedItem', { guid, libraryID: feed.libraryID });
await feedItem.saveTx();
let feedItem2 = await Zotero.FeedItems.getAsyncByGUID(guid);
assert.equal(feedItem2.id, feedItem.id);
});
it("should return false for non-existent GUID", async function () {
let feedItem = await Zotero.FeedItems.getAsyncByGUID(Zotero.randomString());
assert.isFalse(feedItem);
});
});
describe("#toggleReadByID()", function () {
var save, feed, items, ids;
before(function () {
save = sinon.spy(Zotero.FeedItem.prototype, 'save');
});
beforeEach(function* (){
feed = yield createFeed();
items = [];
for (let i = 0; i < 10; i++) {
let item = yield createDataObject('feedItem', { guid: Zotero.randomString(), libraryID: feed.id });
item.isRead = true;
yield item.saveTx();
items.push(item);
}
ids = items.map(i => i.id);
});
afterEach(function* () {
save.resetHistory();
yield clearFeeds();
});
after(function () {
save.restore();
});
it('should toggle all items read if at least one unread', async function () {
items[0].isRead = false;
await items[0].saveTx();
await Zotero.FeedItems.toggleReadByID(ids);
for(let i = 0; i < 10; i++) {
assert.isTrue(save.thisValues[i].isRead, "#toggleRead called with true");
}
});
it('should toggle all items unread if all read', async function () {
await Zotero.FeedItems.toggleReadByID(ids);
for(let i = 0; i < 10; i++) {
assert.isFalse(save.thisValues[i].isRead, "#toggleRead called with false");
}
});
it('should toggle all items unread if unread state specified', async function () {
items[0].isRead = false;
await items[0].saveTx();
await Zotero.FeedItems.toggleReadByID(ids, false);
for(let i = 0; i < 10; i++) {
assert.isFalse(save.thisValues[i].isRead, "#toggleRead called with true");
}
});
});
});