diff --git a/src/core/js/webcaosdb.js b/src/core/js/webcaosdb.js index d0c178d9af876e7754df264aa067b174ccc0fc5f..466d48d52f26da3b3a49d2614628abcd661e0061 100644 --- a/src/core/js/webcaosdb.js +++ b/src/core/js/webcaosdb.js @@ -359,6 +359,8 @@ this.caosdb_utils = new function () { * connection module contains all ajax calls. */ this.connection = new function () { + const logger = log.getLogger("connection"); + this._init = function () { /** * Send a get request. @@ -376,7 +378,7 @@ this.connection = new function () { if (error.status == 414) { throw new Error("UriTooLongException for GET " + uri); } else if (error.status == 0) { - console.log(error); + logger.error(error); } else if (error.status != null) { throw new Error("GET " + uri + " returned with HTTP status " + error.status + " - " + error.statusText); } else { @@ -400,7 +402,7 @@ this.connection = new function () { }); } catch (error) { if (error.status == 0) { - console.log(error); + logger.error(error); } else if (error.status != null) { throw new Error("PUT " + uri + " returned with HTTP status " + error.status + " - " + error.statusText); } else { @@ -435,7 +437,7 @@ this.connection = new function () { }); } catch (error) { if (error.status == 0) { - console.log(error); + logger.error(error); } else if (error.status != null) { throw new Error( "POST scripting returned with HTTP status " + error.status + @@ -461,7 +463,7 @@ this.connection = new function () { }); } catch (error) { if (error.status == 0) { - console.log(error); + logger.error(error); } else if (error.status != null) { throw new Error("POST " + uri + " returned with HTTP status " + error.status + " - " + error.statusText); } else { @@ -486,7 +488,7 @@ this.connection = new function () { }); } catch (error) { if (error.status == 0) { - console.log(error); + logger.error(error); } else if (error.status != null) { throw new Error("DELETE " + "Entity/" + idline + " returned with HTTP status " + error.status + " - " + error.statusText); } else { @@ -985,6 +987,9 @@ this.transaction = new function () { */ var version_history = new function () { + const logger = log.getLogger("version_history"); + this.logger = logger; + this._get = connection.get; /** * Retrieve the version history of an entity and return a table with the @@ -1094,37 +1099,33 @@ var version_history = new function () { * page entities are initialized. */ this.init_restore_version_buttons = function (entity) { - entity = entity || $(".caosdb-entity-panel"); - - // initialize buttons only if the user is allowed to update the entity - if (hasEntityPermission(entity, "UPDATE:")){ - for (let version_info of - $(entity).find(".caosdb-f-entity-version-info")) { - // find the restore button - $(version_info).find(".caosdb-f-entity-version-restore-btn") - // make the button visible - .toggleClass("d-none", false) - .click(async (eve) => { - // the version id is stored in the restore button's - // data-version-id attribute - const versionid = eve.delegateTarget.getAttribute("data-version-id") - try { - await restore_old_version(versionid); - // reload after sucessful update - window.location.reload(); - } catch (e) { - console.log(e); - // print errors in an alert div - $(version_info).find(".modal-body").prepend( - $(`<div class="alert alert-danger - alert-dismissible " role="alert"> - <button class="btn-close" data-bs-dismiss="alert" aria-label="close"></button> - Restore failed! - <p>${e.message}</p> - </div>`)); + var entities = [entity] || $(".caosdb-entity-panel"); + + for (let _entity of entities) { + // initialize buttons only if the user is allowed to update the entity + if (hasEntityPermission(_entity, "UPDATE:*") || hasEntityPermission(_entity, "UPDATE:DESCRIPTION")) { + for (let version_info of + $(_entity).find(".caosdb-f-entity-version-info")) { + // find the restore button + $(version_info).find(".caosdb-f-entity-version-restore-btn") + .toggleClass("d-none", false) // show button + .click(async (eve) => { + // the version id is stored in the restore button's + // data-version-id attribute + const versionid = eve.delegateTarget.getAttribute("data-version-id") + try { + await restore_old_version(versionid); + // reload after sucessful update + window.location.reload(); + } catch (e) { + logger.error(e); + // print errors in an alert div + $(version_info).find(".modal-body").prepend( + $(`<div class="alert alert-danger alert-dismissible " role="alert"> <button class="btn-close" data-bs-dismiss="alert" aria-label="close"></button> Restore failed! <p>${e.message}</p></div>`)); - } - }); + } + }); + } } } } @@ -1977,4 +1978,4 @@ class _CaosDBModules { var caosdb_modules = new _CaosDBModules() -$(document).ready(initOnDocumentReady); +$(document).ready(initOnDocumentReady); \ No newline at end of file diff --git a/test/core/js/modules/webcaosdb.js.js b/test/core/js/modules/webcaosdb.js.js index 15aabf3594a8fe516f07aafc69584eb2c540c0a8..a39ac044d9f5af96a9e381cafad9dff80620554e 100644 --- a/test/core/js/modules/webcaosdb.js.js +++ b/test/core/js/modules/webcaosdb.js.js @@ -1904,7 +1904,7 @@ QUnit.test("init_restore_version_buttons", async function (assert) { <Permission name="RETRIEVE:HISTORY" /> <Permission name="UPDATE:*" /> </Permissions> - <Version id="efa5ac7126c722b3f43284e150d070d6deac0ba6"> + <Version id="efa5ac7126c722b3f43284e150d070d6deac0ba6" > <Predecessor id="f09114b227d88f23d4e23645ae471d688b1e82f7" /> <Successor id="5759d2bccec3662424db5bb005acea4456a299ef" /> </Version> @@ -1912,7 +1912,7 @@ QUnit.test("init_restore_version_buttons", async function (assert) { </Record> </Response> `; - var done = assert.async(2); + var done = assert.async(1); var xml = str2xml(xml_str); version_history._get = async function (entity) { assert.equal(entity, "Entity/8610@efa5ac7126c722b3f43284e150d070d6deac0ba6?H"); @@ -1921,29 +1921,37 @@ QUnit.test("init_restore_version_buttons", async function (assert) { return xml; } var html = await transformation.transformEntities(xml); - var restore_button = $(html).find(".caosdb-f-entity-version-restore-btn"); + var load_button = $(html).find(".caosdb-f-entity-version-load-history-btn"); $("body").append(html); - // It appears the transformation does not create sufficient html (the - // butthon is missing) - // TODO fix - console.log("restore_button"); - console.log(restore_button); - console.log(html); + assert.notOk(load_button.is(":visible"), "load_button hidden"); + load_button.click(); // nothing happens + + version_history.init_load_history_buttons(); + assert.ok(load_button.is(":visible"), "load_button is not hidden anymore"); + + //console.log(xml2str(restore_button[0])); + //assert.ok(restore_button.hasClass("d-none"), "restore_button is hidden"); + + + // load_button triggers retrieval of history + load_button.click(); + await sleep(500); - assert.ok(restore_button.hasClass("d-none"), "restore_button hidden"); - restore_button.click(); // nothing happens + //console.log(xml2str(restore_button[0])); + //version_history.init_restore_version_buttons(); - version_history.init_restore_version_buttons(); - assert.notOk(restore_button.hasClass("d-none"), "restore_button is not hidden anymore"); + var restore_button = $("body").find(".caosdb-f-entity-version-restore-btn"); + assert.ok(!restore_button.hasClass("d-none"), "restore_button is not hidden anymore"); // restore_button triggers retrieval of history - restore_button.click(); + restore_button.first().click(); await sleep(500); // restore is not possible in the unit test alertdiv = $(html).find(".alert-danger"); - assert.ok(alertdiv.has("Restore failed"), "export_button is visible"); + assert.equal(alertdiv.length, 1, "on alert div"); + assert.ok(alertdiv.text().indexOf("Restore failed") > 0, "Restore failed"); $(html).remove(); });