From 143498f422f700178da7ea3d806677b2444c980b Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Fri, 14 Nov 2025 15:23:03 -0100 Subject: [PATCH] Bug 41249: Add cypress tests cypress run --spec t/cypress/integration/ILL/Batches_spec.ts Test plan: 1) Enable ILLModule 2) Install a backend compatible with ILL batches + AutoILLBackendPriority sys pref: https://github.com/openfifth/koha-ill-backend-plugin/releases/tag/v2.0.8 3) Install a metadata enrichment plugin (required for ILL batches): https://github.com/openfifth/koha-plugin-api-pubmed/releases/tag/1.1.1 4) Enable AutoILLBackendPriority sys pref by checking 'PluginBackend' 5) Visit the ILL module: /cgi-bin/koha/ill/ill-requests.pl 6) Notice the 'New ILL requests batch' shows. Click that. 7) Enter any name, '42' for cardnumber and any library. Click 'Continue'. 8) On t'he textarea that shows enter the following pubmed IDs (separated by new line) 123 321 456 9) Notice that PluginBackend will sometimes be red, sometimes be yellow and sometimes be green. This is a test backend and that will happen randomly. Repeat step 8) for more test result samples. 10) Notice that, when green, PluginBackend will be pre-selected. When yellow, it'll allow you to select it but not pre-select it and when red doesnt allow it to be selected at all. 11) Play around with the selection of backends and click 'Add items to batch' and verify that each request was created in the respective selected backend. --- .../fixtures/koha-plugin-ill-backend.kpz | Bin 0 -> 21264 bytes t/cypress/integration/ILL/Batches_spec.ts | 334 ++++++++++++++++-- 2 files changed, 308 insertions(+), 26 deletions(-) create mode 100644 t/cypress/fixtures/koha-plugin-ill-backend.kpz diff --git a/t/cypress/fixtures/koha-plugin-ill-backend.kpz b/t/cypress/fixtures/koha-plugin-ill-backend.kpz new file mode 100644 index 0000000000000000000000000000000000000000..622360659e03bce7c3835a39ae53f2fef1eab226 GIT binary patch literal 21264 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 { @@ -188,9 +188,8 @@ describe("ILL Batches", () => { cy.intercept("GET", "/api/v1/ill/batchstatuses", { statusCode: 200, - body: batchstatuses + body: batchstatuses, }).as("get-batchstatuses"); - }); afterEach(function () { //Restore ILLModule sys pref original value @@ -296,3 +295,286 @@ describe("ILL Batches", () => { cy.get("#identifier-table_wrapper").should("not.be.visible"); }); }); + +describe("AutoILLBackendPriority syspref", () => { + let original_plugin_restricted; + let kohaconf = "/etc/koha/sites/kohadev/koha-conf.xml"; + beforeEach(() => { + cy.login(); + cy.task("query", { + sql: "SELECT value FROM systempreferences WHERE variable='ILLModule'", + }).then(rows => { + cy.wrap(rows[0].value).as("syspref_ILLModule"); + }); + cy.set_syspref("ILLModule", 1); + cy.task("query", { + sql: "SELECT value FROM systempreferences WHERE variable='AutoILLBackendPriority'", + }).then(rows => { + cy.wrap(rows[0].value).as("syspref_AutoILLBackendPriority"); + }); + cy.set_syspref("AutoILLBackendPriority", "PluginBackend"); + cy.task("readXmlElementValue", { + filePath: kohaconf, + element: "plugins_restricted", + }).then(value => { + original_plugin_restricted = value; + if (value == "1") { + cy.task("modifyXmlElement", { + filePath: kohaconf, + element: "plugins_restricted", + value: "0", + }); + } + }); + cy.title().should("eq", "Koha staff interface"); + cy.get("a.icon_administration").contains("Koha administration").click(); + cy.get("a").contains("Manage plugins").click(); + cy.get("a#upload_plugin").contains("Upload plugin").click(); + + cy.get("#uploadfile").click(); + cy.get("#uploadfile").selectFile( + "t/cypress/fixtures/koha-plugin-ill-metadata-enrichment.kpz" + ); + cy.get("input").contains("Upload").click(); + + // Install dummy backend plugin compatibly with AutoILLBackendPriority and ILL batches + cy.visit("/cgi-bin/koha/plugins/plugins-home.pl"); + cy.get("a#upload_plugin").contains("Upload plugin").click(); + cy.get("#uploadfile").click(); + cy.get("#uploadfile").selectFile( + "t/cypress/fixtures/koha-plugin-ill-backend.kpz" + ); + cy.get("input").contains("Upload").click(); + + cy.intercept("GET", "/api/v1/ill/batchstatuses", { + statusCode: 200, + body: batchstatuses, + }).as("get-batchstatuses"); + }); + afterEach(function () { + //Restore ILLModule sys pref original value + cy.set_syspref("ILLModule", this.syspref_ILLModule); + // Restore AutoILLBackendPriority original value + cy.set_syspref( + "AutoILLBackendPriority", + this.syspref_AutoILLBackendPriority + ); + //Restore plugins_restricted original value + cy.task("modifyXmlElement", { + filePath: kohaconf, + element: "plugins_restricted", + value: original_plugin_restricted, + }); + //Clean-up created test batches + cy.task("query", { + sql: "DELETE from illbatches", + }); + //Clean-up installed plugin(s) + cy.task("query", { + sql: "DELETE from plugin_data", + }); + cy.task("query", { + sql: "DELETE from plugin_methods", + }); + }); + + it("AutoILLBackendPriority: Backend error", function () { + // ILL toolbar + cy.visit("/cgi-bin/koha/ill/ill-requests.pl"); + cy.get("#ill-batch-backend-dropdown").should("not.exist"); + cy.get(".ill-toolbar a.btn-default") + .contains("New ILL requests batch") + .click(); + cy.wait("@get-batchstatuses"); + + // Modal + cy.get("#ill-batch-modal").should("be.visible"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("be.disabled"); + + // Create a batch + cy.get("#ill-batch-modal #name").type("second test batch"); + cy.get("#ill-batch-modal #batchcardnumber").type("42"); + cy.get("#ill-batch-modal #branchcode").select("Centerville"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("not.be.disabled"); + cy.get("#ill-batch-modal #button_create_batch").click(); + cy.get("#ill-batch-modal #add_batch_items").should("be.visible"); + + // Add identifiers + Mock plugin (pubmedid) API responses + let pubmedid = "123"; + cy.intercept( + "GET", + "/api/v1/contrib/pubmed/esummary?pmid=" + pubmedid, + { + statusCode: 200, + body: pubmedid_metadata_response, + } + ).as("get-pubmedid-metadata"); + cy.intercept("POST", "/api/v1/contrib/pubmed/parse_to_ill", { + statusCode: 200, + body: parse_to_ill_response, + }).as("get-parse_to_ill"); + cy.intercept( + "GET", + "/api/v1/contrib/pluginbackend/ill_backend_availability_pluginbackend*", + { + statusCode: 404, + body: { + error: "Provided ISBN is not available in PluginBackend", + }, + } + ).as("get-backend_availability_response"); + + cy.get("#ill-batch-modal #identifiers_input").type(pubmedid); + cy.get("#ill-batch-modal #process-button") + .contains("Process identifiers") + .click(); + cy.wait("@get-pubmedid-metadata"); + cy.wait("@get-parse_to_ill"); + cy.wait("@get-backend_availability_response"); + cy.get("#identifier-table .dt-column-title") + .contains("Auto backend") + .should("exist"); + cy.get("#ill-batch-modal #create-requests-button").should("exist"); + + //Plugin backend came back with error, Standard should be checked + cy.get("input[name='auto_backend_0']").first().should("not.be.checked"); + cy.get("input[name='auto_backend_0']").eq(1).should("be.checked"); + }); + + it("AutoILLBackendPriority: Backend warning", function () { + // ILL toolbar + cy.visit("/cgi-bin/koha/ill/ill-requests.pl"); + cy.get("#ill-batch-backend-dropdown").should("not.exist"); + cy.get(".ill-toolbar a.btn-default") + .contains("New ILL requests batch") + .click(); + cy.wait("@get-batchstatuses"); + + // Modal + cy.get("#ill-batch-modal").should("be.visible"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("be.disabled"); + + // Create a batch + cy.get("#ill-batch-modal #name").type("second test batch"); + cy.get("#ill-batch-modal #batchcardnumber").type("42"); + cy.get("#ill-batch-modal #branchcode").select("Centerville"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("not.be.disabled"); + cy.get("#ill-batch-modal #button_create_batch").click(); + cy.get("#ill-batch-modal #add_batch_items").should("be.visible"); + + // Add identifiers + Mock plugin (pubmedid) API responses + let pubmedid = "123"; + cy.intercept( + "GET", + "/api/v1/contrib/pubmed/esummary?pmid=" + pubmedid, + { + statusCode: 200, + body: pubmedid_metadata_response, + } + ).as("get-pubmedid-metadata"); + cy.intercept("POST", "/api/v1/contrib/pubmed/parse_to_ill", { + statusCode: 200, + body: parse_to_ill_response, + }).as("get-parse_to_ill"); + cy.intercept( + "GET", + "/api/v1/contrib/pluginbackend/ill_backend_availability_pluginbackend*", + { + statusCode: 200, + body: { + warning: + "May be placed but will have to go through human verification", + }, + } + ).as("get-backend_availability_response"); + + cy.get("#ill-batch-modal #identifiers_input").type(pubmedid); + cy.get("#ill-batch-modal #process-button") + .contains("Process identifiers") + .click(); + cy.wait("@get-pubmedid-metadata"); + cy.wait("@get-parse_to_ill"); + cy.wait("@get-backend_availability_response"); + cy.get("#identifier-table .dt-column-title") + .contains("Auto backend") + .should("exist"); + cy.get("#ill-batch-modal #create-requests-button").should("exist"); + + //Plugin backend came back with warning, Standard should be checked + cy.get("input[name='auto_backend_0']").first().should("not.be.checked"); + cy.get("input[name='auto_backend_0']").eq(1).should("be.checked"); + }); + + it("AutoILLBackendPriority: Backend success", function () { + // ILL toolbar + cy.visit("/cgi-bin/koha/ill/ill-requests.pl"); + cy.get("#ill-batch-backend-dropdown").should("not.exist"); + cy.get(".ill-toolbar a.btn-default") + .contains("New ILL requests batch") + .click(); + cy.wait("@get-batchstatuses"); + + // Modal + cy.get("#ill-batch-modal").should("be.visible"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("be.disabled"); + + // Create a batch + cy.get("#ill-batch-modal #name").type("second test batch"); + cy.get("#ill-batch-modal #batchcardnumber").type("42"); + cy.get("#ill-batch-modal #branchcode").select("Centerville"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("not.be.disabled"); + cy.get("#ill-batch-modal #button_create_batch").click(); + cy.get("#ill-batch-modal #add_batch_items").should("be.visible"); + + // Add identifiers + Mock plugin (pubmedid) API responses + let pubmedid = "123"; + cy.intercept( + "GET", + "/api/v1/contrib/pubmed/esummary?pmid=" + pubmedid, + { + statusCode: 200, + body: pubmedid_metadata_response, + } + ).as("get-pubmedid-metadata"); + cy.intercept("POST", "/api/v1/contrib/pubmed/parse_to_ill", { + statusCode: 200, + body: parse_to_ill_response, + }).as("get-parse_to_ill"); + cy.intercept( + "GET", + "/api/v1/contrib/pluginbackend/ill_backend_availability_pluginbackend*", + { + statusCode: 200, + body: { success: "" }, + } + ).as("get-backend_availability_response"); + + cy.get("#ill-batch-modal #identifiers_input").type(pubmedid); + cy.get("#ill-batch-modal #process-button") + .contains("Process identifiers") + .click(); + cy.wait("@get-pubmedid-metadata"); + cy.wait("@get-parse_to_ill"); + cy.wait("@get-backend_availability_response"); + cy.get("#identifier-table .dt-column-title") + .contains("Auto backend") + .should("exist"); + cy.get("#ill-batch-modal #create-requests-button").should("exist"); + + //Plugin backend came back with success, PluginBackend should be checked + cy.get("input[name='auto_backend_0']").first().should("be.checked"); + cy.get("input[name='auto_backend_0']").eq(1).should("not.be.checked"); + }); +}); -- 2.39.5