Fix webpage/snapshot saving from connector

This commit is contained in:
Dan Stillman 2016-05-20 15:51:54 -04:00
parent 157b8deda9
commit 0be2796500
2 changed files with 59 additions and 10 deletions

View file

@ -458,9 +458,10 @@ Zotero.Server.Connector.SaveSnapshot.prototype = {
}
}
else {
Zotero.HTTP.processDocuments(["zotero://connector/"+encodeURIComponent(data["url"])],
function(doc) {
delete Zotero.Server.Connector.Data[data["url"]];
Zotero.HTTP.processDocuments(
["zotero://connector/" + encodeURIComponent(data.url)],
Zotero.Promise.coroutine(function* (doc) {
delete Zotero.Server.Connector.Data[data.url];
try {
// create new webpage item
@ -469,13 +470,14 @@ Zotero.Server.Connector.SaveSnapshot.prototype = {
item.setField("title", doc.title);
item.setField("url", data.url);
item.setField("accessDate", "CURRENT_TIMESTAMP");
var itemID = item.save();
if(collection) collection.addItem(itemID);
if (collection) {
item.setCollections([collection.id]);
}
var itemID = yield item.saveTx();
// save snapshot
if (filesEditable && !data.skipSnapshot) {
// TODO: async
Zotero.Attachments.importFromDocument({
yield Zotero.Attachments.importFromDocument({
document: doc,
parentItemID: itemID
});
@ -483,11 +485,14 @@ Zotero.Server.Connector.SaveSnapshot.prototype = {
sendResponseCallback(201);
} catch(e) {
Zotero.debug("ERROR");
Zotero.debug(e);
sendResponseCallback(500);
throw e;
}
},
null, null, false, cookieSandbox);
}),
null, null, false, cookieSandbox
);
}
}
}

View file

@ -30,7 +30,7 @@ describe("Connector Server", function () {
describe("/connector/saveItems", function () {
// TODO: Test cookies
it("should save an item to the current selected collection", function* () {
it("should save a translated item to the current selected collection", function* () {
var collection = yield createDataObject('collection');
yield waitForItemsLoad(win);
@ -98,4 +98,48 @@ describe("Connector Server", function () {
yield waitForItemEvent('refresh');
});
});
describe("/connector/saveSnapshot", function () {
it("should save a webpage item and snapshot to the current selected collection", function* () {
var collection = yield createDataObject('collection');
yield waitForItemsLoad(win);
// saveSnapshot saves parent and child before returning
var ids1, ids2;
var promise = waitForItemEvent('add').then(function (ids) {
ids1 = ids;
return waitForItemEvent('add').then(function (ids) {
ids2 = ids;
});
});
yield Zotero.HTTP.request(
'POST',
connectorServerPath + "/connector/saveSnapshot",
{
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
url: "http://example.com",
html: "<html><head><title>Title</title><body>Body</body></html>"
})
}
);
assert.isTrue(promise.isFulfilled());
// Check parent item
assert.lengthOf(ids1, 1);
var item = Zotero.Items.get(ids1[0]);
assert.equal(Zotero.ItemTypes.getName(item.itemTypeID), 'webpage');
assert.isTrue(collection.hasItem(item.id));
assert.equal(item.getField('title'), 'Title');
// Check attachment
assert.lengthOf(ids2, 1);
item = Zotero.Items.get(ids2[0]);
assert.isTrue(item.isImportedAttachment());
assert.equal(item.getField('title'), 'Title');
});
});
});