Jonathan Druart
fc48e6117f
We cannot (yet) move login to before, but we can set the pref before all the tests. We need to login in before anyway to retrieve the value of the pref. 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>
312 lines
11 KiB
TypeScript
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();
|
|
cy.set_ERM_sys_pref_value(true);
|
|
});
|
|
|
|
beforeEach(() => {
|
|
cy.login("koha", "koha");
|
|
cy.title().should("eq", "Koha staff interface");
|
|
});
|
|
|
|
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");
|
|
});
|
|
});
|