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>
445 lines
18 KiB
TypeScript
445 lines
18 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_title() {
|
|
return {
|
|
access_type: "access type",
|
|
biblio_id: null,
|
|
coverage_depth: "coverage depth",
|
|
date_first_issue_online: "date first",
|
|
date_last_issue_online: "date last",
|
|
date_monograph_published_online: "date mono online",
|
|
date_monograph_published_print: "date mono print",
|
|
embargo_info: "embargo info",
|
|
external_id: "",
|
|
first_author: "first author",
|
|
first_editor: "first editor",
|
|
monograph_edition: "monograph edition",
|
|
monograph_volume: "monograph volume",
|
|
notes: "notes",
|
|
num_first_issue_online: "num first issue",
|
|
num_first_vol_online: "num first vol",
|
|
num_last_issue_online: "num last issue",
|
|
num_last_vol_online: "num last vol",
|
|
online_identifier: "online identifier",
|
|
parent_publication_title_id: "parent id",
|
|
preceeding_publication_title_id: "preceeding id",
|
|
print_identifier: "print identifier",
|
|
publication_title: "publication title",
|
|
publication_type: "journal",
|
|
publisher_name: "publication name",
|
|
resources: [
|
|
{
|
|
ended_on: null,
|
|
package: {
|
|
content_type: "",
|
|
package_id: 1,
|
|
name: "first package name"
|
|
},
|
|
package_id: 1,
|
|
resource_id: 2,
|
|
title: {
|
|
biblio_id: 439,
|
|
title_id: 1,
|
|
},
|
|
title_id: 1
|
|
}
|
|
],
|
|
title_id: 1,
|
|
title_url: "title url"
|
|
};
|
|
}
|
|
|
|
function get_packages_to_relate() {
|
|
return [
|
|
{
|
|
package_id: 1,
|
|
description: "a package",
|
|
name: "first package name"
|
|
},
|
|
{
|
|
package_id: 2,
|
|
description: "a second package",
|
|
name: "second package name"
|
|
}
|
|
]
|
|
}
|
|
|
|
describe("Title 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("Import titles", () => {
|
|
let erm_title = get_title();
|
|
let resource = erm_title.resources[0];
|
|
|
|
// Create a list in case none exists
|
|
cy.visit("/cgi-bin/koha/virtualshelves/shelves.pl");
|
|
cy.contains("New list").click();
|
|
cy.get("#shelfname").type('list name');
|
|
cy.contains("Save").click();
|
|
|
|
// First attempt to import list has no packages
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
|
|
statusCode: 200,
|
|
body: []
|
|
}).as("get-empty-packages");
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
cy.wait(500);
|
|
cy.get("#toolbar a").contains("Import from list").click();
|
|
cy.get("h2").contains("Import from a list");
|
|
cy.get("#package_list .vs__selected").should('not.exist');
|
|
|
|
// Make sure packages are returned
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
|
|
statusCode: 200,
|
|
body: get_packages_to_relate(),
|
|
}).as("get-related-packages");
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
cy.get("#toolbar a").contains("Import from list").click();
|
|
cy.get("h2").contains("Import from a list");
|
|
cy.wait(500);
|
|
|
|
// Prepare background job response to the POST
|
|
cy.intercept("POST", "/api/v1/erm/eholdings/local/titles/import", {
|
|
statusCode: 200,
|
|
body: {job_id: 1},
|
|
}).as("get-job-response");
|
|
cy.get("#list_list tbody tr:first td a").contains("Import").click();
|
|
cy.get("main div[class='dialog message']").contains("Import in progress, see job #1");
|
|
});
|
|
|
|
it("List title", () => {
|
|
// GET title returns 500
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles", {
|
|
statusCode: 500,
|
|
error: "Something went wrong",
|
|
});
|
|
cy.visit("/cgi-bin/koha/erm/erm.pl");
|
|
cy.get("#navmenulist").contains("Titles").click();
|
|
cy.get("main div[class='dialog alert']").contains(
|
|
/Something went wrong/
|
|
);
|
|
|
|
// GET titles returns empty list
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", []);
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
cy.get("#titles_list").contains("There are no titles defined");
|
|
|
|
// GET titles returns something
|
|
let erm_title = get_title();
|
|
let titles = [erm_title];
|
|
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
|
|
statusCode: 200,
|
|
body: titles,
|
|
headers: {
|
|
"X-Base-Total-Count": "1",
|
|
"X-Total-Count": "1",
|
|
},
|
|
});
|
|
cy.intercept(
|
|
"GET",
|
|
"/api/v1/erm/eholdings/local/titles/*",
|
|
erm_title
|
|
);
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
cy.get("#titles_list").contains("Showing 1 to 1 of 1 entries");
|
|
});
|
|
|
|
it("Add title", () => {
|
|
|
|
cy.intercept({
|
|
method: "GET",
|
|
url: "/api/v1/erm/eholdings/local/packages",
|
|
times: 1
|
|
},
|
|
{
|
|
body: [],
|
|
});
|
|
|
|
// Click the button in the toolbar
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
|
|
cy.contains("New title").click();
|
|
cy.get("#titles_add h2").contains("New title");
|
|
|
|
// Fill in the form for normal attributes
|
|
let erm_title = get_title();
|
|
|
|
cy.get("#titles_add").contains("Submit").click();
|
|
cy.get("input:invalid,textarea:invalid,select:invalid").should(
|
|
"have.length",
|
|
1
|
|
);
|
|
cy.get("#title_publication_title").type(erm_title.publication_title);
|
|
cy.get("#title_print_identifier").type(erm_title.print_identifier);
|
|
cy.get("#title_online_identifier").type(erm_title.online_identifier);
|
|
cy.get("#title_date_first_issue_online").type(erm_title.date_first_issue_online);
|
|
cy.get("#title_num_first_vol_online").type(erm_title.num_first_vol_online);
|
|
cy.get("#title_num_first_issue_online").type(erm_title.num_first_issue_online);
|
|
cy.get("#title_date_last_issue_online").type(erm_title.date_last_issue_online);
|
|
cy.get("#title_num_last_vol_online").type(erm_title.num_last_vol_online);
|
|
cy.get("#title_num_last_issue_online").type(erm_title.num_last_issue_online);
|
|
cy.get("#title_title_url").type(erm_title.title_url);
|
|
cy.get("#title_first_author").type(erm_title.first_author);
|
|
cy.get("#title_embargo_info").type(erm_title.embargo_info);
|
|
cy.get("#title_coverage_depth").type(erm_title.coverage_depth);
|
|
cy.get("#title_notes").type(erm_title.notes);
|
|
cy.get("#title_publisher_name").type(erm_title.publisher_name);
|
|
cy.get("#title_publication_type .vs__search").type(
|
|
erm_title.publication_type + "{enter}",
|
|
{ force: true }
|
|
);
|
|
cy.get("#title_date_monograph_published_print").type(erm_title.date_monograph_published_print);
|
|
cy.get("#title_date_monograph_published_online").type(erm_title.date_monograph_published_online);
|
|
cy.get("#title_monograph_volume").type(erm_title.monograph_volume);
|
|
cy.get("#title_monograph_edition").type(erm_title.monograph_edition);
|
|
cy.get("#title_first_editor").type(erm_title.first_editor);
|
|
cy.get("#title_parent_publication_title_id").type(erm_title.parent_publication_title_id);
|
|
cy.get("#title_preceeding_publication_title_id").type(erm_title.preceeding_publication_title_id);
|
|
cy.get("#title_access_type").type(erm_title.access_type);
|
|
|
|
cy.get("#resources").contains(
|
|
"There are no packages created yet"
|
|
);
|
|
|
|
// Submit the form, get 500
|
|
cy.intercept("POST", "/api/v1/erm/eholdings/local/titles", {
|
|
statusCode: 500,
|
|
error: "Something went wrong",
|
|
});
|
|
cy.get("#titles_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/titles", {
|
|
statusCode: 201,
|
|
body: erm_title,
|
|
});
|
|
cy.get("#titles_add").contains("Submit").click();
|
|
cy.get("main div[class='dialog message']").contains("Title created");
|
|
|
|
// Add new related package (resource)
|
|
let related_package = erm_title.resources[0];
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
|
|
statusCode: 200,
|
|
body: get_packages_to_relate(),
|
|
}).as('get-related-packages');
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles/add");
|
|
cy.get("#resources").contains("Add to another package").click();
|
|
cy.get("#resources").contains("Package 1");
|
|
cy.get("#resources #resource_package_id_0 .vs__search").type(
|
|
related_package.package.name
|
|
);
|
|
cy.get("#resources #resource_package_id_0 .vs__dropdown-menu li").eq(0).click( { force: true } ); //click first package suggestion
|
|
});
|
|
|
|
it("Edit title", () => {
|
|
let erm_title = get_title();
|
|
let titles = [erm_title];
|
|
// Click the 'Edit' button from the list
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
|
|
statusCode: 200,
|
|
body: titles,
|
|
headers: {
|
|
"X-Base-Total-Count": "1",
|
|
"X-Total-Count": "1",
|
|
},
|
|
});
|
|
cy.intercept(
|
|
"GET",
|
|
"/api/v1/erm/eholdings/local/titles/*",
|
|
erm_title
|
|
).as("get-title");
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
// Intercept related packages request after entering title edit
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
|
|
statusCode: 200,
|
|
body: get_packages_to_relate(),
|
|
}).as('get-related-packages');
|
|
|
|
cy.get("#titles_list table tbody tr:first").contains("Edit").click();
|
|
cy.wait("@get-title");
|
|
cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
|
|
cy.get("#titles_add h2").contains("Edit title");
|
|
|
|
// Form has been correctly filled in
|
|
cy.get("#title_publication_title").should("have.value", erm_title.publication_title);
|
|
cy.get("#title_print_identifier").should("have.value", erm_title.print_identifier);
|
|
cy.get("#title_online_identifier").should("have.value", erm_title.online_identifier);
|
|
cy.get("#title_date_first_issue_online").should("have.value", erm_title.date_first_issue_online);
|
|
cy.get("#title_num_first_vol_online").should("have.value", erm_title.num_first_vol_online);
|
|
cy.get("#title_num_first_issue_online").should("have.value", erm_title.num_first_issue_online);
|
|
cy.get("#title_date_last_issue_online").should("have.value", erm_title.date_last_issue_online);
|
|
cy.get("#title_num_last_vol_online").should("have.value", erm_title.num_last_vol_online);
|
|
cy.get("#title_num_last_issue_online").should("have.value", erm_title.num_last_issue_online);
|
|
cy.get("#title_title_url").should("have.value", erm_title.title_url);
|
|
cy.get("#title_first_author").should("have.value", erm_title.first_author);
|
|
cy.get("#title_embargo_info").should("have.value", erm_title.embargo_info);
|
|
cy.get("#title_coverage_depth").should("have.value", erm_title.coverage_depth);
|
|
cy.get("#title_notes").should("have.value", erm_title.notes);
|
|
cy.get("#title_publisher_name").should("have.value", erm_title.publisher_name);
|
|
cy.get("#title_publication_type .vs__selected").contains('Journal');
|
|
cy.get("#title_date_monograph_published_print").should("have.value", erm_title.date_monograph_published_print);
|
|
cy.get("#title_date_monograph_published_online").should("have.value", erm_title.date_monograph_published_online);
|
|
cy.get("#title_monograph_volume").should("have.value", erm_title.monograph_volume);
|
|
cy.get("#title_monograph_edition").should("have.value", erm_title.monograph_edition);
|
|
cy.get("#title_first_editor").should("have.value", erm_title.first_editor);
|
|
cy.get("#title_parent_publication_title_id").should("have.value", erm_title.parent_publication_title_id);
|
|
cy.get("#title_preceeding_publication_title_id").should("have.value", erm_title.preceeding_publication_title_id);
|
|
cy.get("#title_access_type").should("have.value", erm_title.access_type);
|
|
|
|
//Test related content
|
|
cy.get("#resources #resource_package_id_0 .vs__selected").contains("package name");
|
|
|
|
// Submit the form, get 500
|
|
cy.intercept("PUT", "/api/v1/erm/eholdings/local/titles/*", {
|
|
statusCode: 500,
|
|
error: "Something went wrong",
|
|
});
|
|
cy.get("#titles_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/titles/*", {
|
|
statusCode: 200,
|
|
body: erm_title,
|
|
});
|
|
cy.get("#titles_add").contains("Submit").click();
|
|
cy.get("main div[class='dialog message']").contains("Title updated");
|
|
});
|
|
|
|
it("Show title", () => {
|
|
let erm_title = get_title();
|
|
let titles = [erm_title];
|
|
// Click the "name" link from the list
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
|
|
statusCode: 200,
|
|
body: titles,
|
|
headers: {
|
|
"X-Base-Total-Count": "1",
|
|
"X-Total-Count": "1",
|
|
},
|
|
});
|
|
// Title with empty resources.
|
|
cy.intercept(
|
|
{
|
|
method: "GET",
|
|
url: "/api/v1/erm/eholdings/local/titles/*",
|
|
times: 1
|
|
},
|
|
{
|
|
body: {
|
|
publication_title: "publication title",
|
|
resources: [],
|
|
title_id: 1,
|
|
}
|
|
}
|
|
).as("get-title");
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
let title_link = cy.get(
|
|
"#titles_list table tbody tr:first td:first a"
|
|
);
|
|
title_link.should(
|
|
"have.text",
|
|
erm_title.publication_title + " (#" + erm_title.title_id + ")"
|
|
);
|
|
cy.get(
|
|
"#titles_list table tbody tr:first td:first a"
|
|
).click();
|
|
cy.wait("@get-title");
|
|
cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
|
|
cy.get("#eholdings_title_show h2").contains(
|
|
"Title #" + erm_title.title_id
|
|
);
|
|
// There are no packages, the table should not be displayed
|
|
cy.contains("Packages (0)");
|
|
cy.get("#table#package_list").should("not.exist");
|
|
|
|
// Test now with all values
|
|
cy.intercept(
|
|
"GET",
|
|
"/api/v1/erm/eholdings/local/titles/*",
|
|
erm_title
|
|
).as("get-title");
|
|
|
|
// List packages
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles/1");
|
|
cy.contains("Packages (1)");
|
|
cy.wait(500);
|
|
|
|
// Visit resource
|
|
let related_package = erm_title.resources[0];
|
|
// cy.get("#package_list tbody tr:first td a").contains("first package name").click();
|
|
cy.intercept(
|
|
"GET",
|
|
"/api/v1/erm/eholdings/local/resources/"+related_package.resource_id,
|
|
related_package
|
|
).as("get-related-package");
|
|
cy.get("table#package_list").contains("first package name").click();
|
|
cy.contains("Resource #"+related_package.resource_id);
|
|
cy.contains(related_package.package.name);
|
|
});
|
|
|
|
it("Delete title", () => {
|
|
let erm_title = get_title();
|
|
let titles = [erm_title];
|
|
|
|
// Click the 'Delete' button from the list
|
|
cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
|
|
statusCode: 200,
|
|
body: titles,
|
|
headers: {
|
|
"X-Base-Total-Count": "1",
|
|
"X-Total-Count": "1",
|
|
},
|
|
});
|
|
cy.intercept(
|
|
"GET",
|
|
"/api/v1/erm/eholdings/local/titles/*",
|
|
erm_title
|
|
);
|
|
cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
|
|
|
|
cy.get("#titles_list table tbody tr:first")
|
|
.contains("Delete")
|
|
.click();
|
|
cy.get("#eholdings_confirm_delete h2").contains("Delete title");
|
|
cy.contains("Title: " + erm_title.publication_title);
|
|
|
|
// Submit the form, get 500
|
|
cy.intercept("DELETE", "/api/v1/erm/eholdings/local/titles/*", {
|
|
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/titles/*", {
|
|
statusCode: 204,
|
|
body: null,
|
|
});
|
|
cy.contains("Yes, delete").click();
|
|
cy.get("main div[class='dialog message']").contains("Title deleted");
|
|
});
|
|
});
|