From eebd650a88a48e274f7838277641745bd2591d43 Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Fri, 14 Nov 2025 13:43:14 +0000 Subject: [PATCH] Bug 41247: Add cypress tests Apply just the 2 cypress tests patches, run: cypress run --spec t/cypress/integration/ILL/Batches_spec.ts Notice it fails. Apply the fix patch. Repeat the command above. Tests must pass. --- .../koha-plugin-ill-metadata-enrichment.kpz | Bin 0 -> 4040 bytes t/cypress/integration/ILL/Batches_spec.ts | 298 ++++++++++++++++++ 2 files changed, 298 insertions(+) create mode 100644 t/cypress/fixtures/koha-plugin-ill-metadata-enrichment.kpz create mode 100644 t/cypress/integration/ILL/Batches_spec.ts diff --git a/t/cypress/fixtures/koha-plugin-ill-metadata-enrichment.kpz b/t/cypress/fixtures/koha-plugin-ill-metadata-enrichment.kpz new file mode 100644 index 0000000000000000000000000000000000000000..d8e6bc03aace000efe02e76c3f4967b73bd298f7 GIT binary patch literal 4040 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 { + 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("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(); + + 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 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("ILL requests batch modal", function () { + cy.visit("/cgi-bin/koha/mainpage.pl"); + cy.get("a.icon_ill").contains("ILL requests"); + cy.get("a.icon_ill").click(); + + // Open batch modal + cy.get("#ill-batch-backend-dropdown") + .contains("New ILL requests batch") + .click(); + cy.get(".dropdown-menu.show a").contains("Standard").click(); + cy.wait("@get-batchstatuses"); + cy.get("#ill-batch-modal").should("be.visible"); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("be.disabled"); + + // Create batch + cy.get("#ill-batch-modal #name").type("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"); + + // Close modal + cy.get("#ill-batch-modal #button_cancel_batch").click(); + cy.get("#ill-batch-modal").should("not.be.visible"); + + // Reopen modal, button_create_batch must exist and be disabled + cy.get("#ill-batch-backend-dropdown") + .contains("New ILL requests batch") + .click(); + cy.get(".dropdown-menu.show a").contains("Standard").click(); + cy.get("#ill-batch-modal #button_create_batch") + .should("exist") + .and("be.disabled"); + + // Create a new 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.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.get("#ill-batch-modal #create-requests-button").should("exist"); + + // Close modal + cy.get("#ill-batch-modal #button_cancel_batch").click(); + cy.get("#ill-batch-modal").should("not.be.visible"); + + // Reopen modal, #identifier-table_wrapper must not be visible + cy.get("#ill-batch-backend-dropdown") + .contains("New ILL requests batch") + .click(); + cy.get(".dropdown-menu.show a").contains("Standard").click(); + cy.get("#identifier-table_wrapper").should("not.be.visible"); + }); +}); -- 2.39.5