Koha/t/cypress/integration/Packages_spec.ts
Pedro Amorim 5d794c99cc
Bug 32131: Cypress tests are failing if ERMModule is off
This patch solves this by enabling the system preference before each test,
right after login. It also sets the system preference back to its original
initial value after the tests finish running.

To test:
1) Disable ERMModule system preference
2) Run cypess tests: yarn cypress open / yarn cypress run
3) Verify that tests run successfully
(Optional): While tests are running, visit the system preferences panel and verify that the system preference is now "Enable".
4) Wait for the tests to finish and confirm that the system preference is set back to its original "Disable" value.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2022-11-17 13:39:45 -03:00

312 lines
11 KiB
TypeScript

import { mount } from "@cypress/vue";
const dayjs = require("dayjs"); /* Cannot use our calendar JS code, it's in an include file (!)
Also note that moment.js is deprecated */
function get_package() {
return {
package_id: 1,
name: "package 1",
package_type: "complete",
content_type: "Print",
package_agreements: [
{
agreement: {
agreement_id: 2,
description: "agreement description",
name: "agreement name"
},
agreement_id: 2,
package_id: 1
}
],
resources_count: 0,
};
}
describe("Package CRUD operations", () => {
before(() => {
cy.fetch_initial_ERM_sys_pref_value();
});
beforeEach(() => {
cy.login("koha", "koha");
cy.title().should("eq", "Koha staff interface");
cy.set_ERM_sys_pref_value(true);
});
after(() => {
cy.reset_initial_ERM_sys_pref_value();
});
it("List package", () => {
// GET package returns 500
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
statusCode: 500,
error: "Something went wrong",
});
cy.visit("/cgi-bin/koha/erm/erm.pl");
cy.get("#navmenulist").contains("Packages").click();
cy.get("main div[class='dialog alert']").contains(
/Something went wrong/
);
// GET packages returns empty list
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", []);
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
cy.get("#packages_list").contains("There are no packages defined");
// GET packages returns something
let erm_package = get_package();
let packages = [erm_package];
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
statusCode: 200,
body: packages,
headers: {
"X-Base-Total-Count": "1",
"X-Total-Count": "1",
},
});
cy.intercept(
"GET",
"/api/v1/erm/eholdings/local/packages/*",
erm_package
);
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
cy.get("#packages_list").contains("Showing 1 to 1 of 1 entries");
});
it("Add package", () => {
cy.intercept("GET", "/api/v1/erm/agreements", []);
// Click the button in the toolbar
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
cy.contains("New package").click();
cy.get("#packages_add h2").contains("New package");
// Fill in the form for normal attributes
let erm_package = get_package();
cy.get("#packages_add").contains("Submit").click();
cy.get("input:invalid,textarea:invalid,select:invalid").should(
"have.length",
1
);
cy.get("#package_name").type(erm_package.name);
cy.get("#package_type .vs__search").type(
erm_package.package_type + "{enter}",
{ force: true }
);
cy.get("#package_content_type .vs__search").type(
erm_package.content_type + "{enter}",
{ force: true }
);
cy.get("#package_agreements").contains(
"There are no agreements created yet"
);
// Submit the form, get 500
cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
statusCode: 500,
error: "Something went wrong",
});
cy.get("#packages_add").contains("Submit").click();
cy.get("main div[class='dialog alert']").contains(
"Something went wrong: Internal Server Error"
);
// Submit the form, success!
cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
statusCode: 201,
body: erm_package,
});
cy.get("#packages_add").contains("Submit").click();
cy.get("main div[class='dialog message']").contains("Package created");
// Add new related agreement
let related_agreement = erm_package.package_agreements[0];
cy.intercept("GET", "/api/v1/erm/agreements", {
statusCode: 200,
body: cy.get_agreements_to_relate(),
});
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/add");
cy.get("#package_agreements").contains("Add new agreement").click();
cy.get("#package_agreement_0").contains("Agreement 1");
cy.get("#agreement_id_0 .vs__search").type(
related_agreement.agreement.name
);
cy.get("#agreement_id_0 .vs__dropdown-menu li").eq(0).click( { force: true } ); //click first agreement suggestion
});
it("Edit package", () => {
let erm_package = get_package();
let packages = [erm_package];
// Click the 'Edit' button from the list
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
statusCode: 200,
body: packages,
headers: {
"X-Base-Total-Count": "1",
"X-Total-Count": "1",
},
});
cy.intercept(
"GET",
"/api/v1/erm/eholdings/local/packages/*",
erm_package
).as("get-package");
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
// Intercept related agreements request after entering agreement edit
cy.intercept("GET", "/api/v1/erm/agreements", {
statusCode: 200,
body: cy.get_agreements_to_relate(),
}).as("get-related-agreements");
cy.get("#packages_list table tbody tr:first").contains("Edit").click();
cy.wait("@get-package");
cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
cy.get("#packages_add h2").contains("Edit package");
// Form has been correctly filled in
cy.get("#package_name").should("have.value", erm_package.name);
cy.get("#package_type .vs__selected").contains("Complete");
cy.get("#package_content_type .vs__selected").contains("Print");
//Test related content
cy.get("#package_agreement_0 #agreement_id_0 .vs__selected").contains("second agreement name");
// Submit the form, get 500
cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
statusCode: 500,
error: "Something went wrong",
});
cy.get("#packages_add").contains("Submit").click();
cy.get("main div[class='dialog alert']").contains(
"Something went wrong: Internal Server Error"
);
// Submit the form, success!
cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
statusCode: 200,
body: erm_package,
});
cy.get("#packages_add").contains("Submit").click();
cy.get("main div[class='dialog message']").contains("Package updated");
});
it("Show package", () => {
let erm_package = get_package();
let packages = [erm_package];
// Click the "name" link from the list
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
statusCode: 200,
body: packages,
headers: {
"X-Base-Total-Count": "1",
"X-Total-Count": "1",
},
});
cy.intercept(
"GET",
"/api/v1/erm/eholdings/local/packages/*",
erm_package
).as("get-package");
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
let name_link = cy.get(
"#packages_list table tbody tr:first td:first a"
);
name_link.should(
"have.text",
erm_package.name + " (#" + erm_package.package_id + ")"
);
name_link.click();
cy.wait("@get-package");
cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
cy.get("#packages_show h2").contains(
"Package #" + erm_package.package_id
);
// There are no resources, the table should not be displayed
cy.contains("Titles (0)");
cy.get("#table#title_list").should("not.exist");
// List resources
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages/*", {
...erm_package,
resources_count: 1,
});
cy.intercept(
"GET",
"/api/v1/erm/eholdings/local/packages/1/resources*",
{
statusCode: 200,
body: [
{
package_id: erm_package.package_id,
resource_id: 1,
title_id: 1,
title: {
biblio_id: 42,
publication_title: "A great title",
publication_type: "",
},
},
],
headers: {
"X-Base-Total-Count": "1",
"X-Total-Count": "1",
},
}
).as("get-resource");
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/1");
cy.contains("Titles (1)");
cy.wait("@get-resource");
cy.wait(500);
cy.get("table#title_list").contains("A great title");
});
it("Delete package", () => {
let erm_package = get_package();
let packages = [erm_package];
// Click the 'Delete' button from the list
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
statusCode: 200,
body: packages,
headers: {
"X-Base-Total-Count": "1",
"X-Total-Count": "1",
},
});
cy.intercept(
"GET",
"/api/v1/erm/eholdings/local/packages/*",
erm_package
);
cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
cy.get("#packages_list table tbody tr:first")
.contains("Delete")
.click();
cy.get("#packages_confirm_delete h2").contains("Delete package");
cy.contains("Package name: " + erm_package.name);
// Submit the form, get 500
cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
statusCode: 500,
error: "Something went wrong",
});
cy.contains("Yes, delete").click();
cy.get("main div[class='dialog alert']").contains(
"Something went wrong: Internal Server Error"
);
// Submit the form, success!
cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
statusCode: 204,
body: null,
});
cy.contains("Yes, delete").click();
cy.get("main div[class='dialog message']").contains("Package deleted");
});
});