1 import { mount } from "@cypress/vue";
2 const dayjs = require("dayjs"); /* Cannot use our calendar JS code, it's in an include file (!)
3 Also note that moment.js is deprecated */
5 function get_package() {
9 package_type: "complete",
10 content_type: "Print",
15 description: "agreement description",
16 name: "agreement name"
26 describe("Package CRUD operations", () => {
28 cy.fetch_initial_ERM_sys_pref_value();
29 cy.set_ERM_sys_pref_value(true);
33 cy.login("koha", "koha");
34 cy.title().should("eq", "Koha staff interface");
38 cy.reset_initial_ERM_sys_pref_value();
41 it("List package", () => {
42 // GET package returns 500
43 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
45 error: "Something went wrong",
47 cy.visit("/cgi-bin/koha/erm/erm.pl");
48 cy.get("#navmenulist").contains("Packages").click();
49 cy.get("main div[class='dialog alert']").contains(
50 /Something went wrong/
53 // GET packages returns empty list
54 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", []);
55 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
56 cy.get("#packages_list").contains("There are no packages defined");
58 // GET packages returns something
59 let erm_package = get_package();
60 let packages = [erm_package];
62 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
66 "X-Base-Total-Count": "1",
72 "/api/v1/erm/eholdings/local/packages/*",
75 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
76 cy.get("#packages_list").contains("Showing 1 to 1 of 1 entries");
79 it("Add package", () => {
81 cy.intercept("GET", "/api/v1/erm/agreements", []);
83 // Click the button in the toolbar
84 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
85 cy.contains("New package").click();
86 cy.get("#packages_add h2").contains("New package");
88 // Fill in the form for normal attributes
89 let erm_package = get_package();
91 cy.get("#packages_add").contains("Submit").click();
92 cy.get("input:invalid,textarea:invalid,select:invalid").should(
96 cy.get("#package_name").type(erm_package.name);
97 cy.get("#package_type .vs__search").type(
98 erm_package.package_type + "{enter}",
101 cy.get("#package_content_type .vs__search").type(
102 erm_package.content_type + "{enter}",
106 cy.get("#package_agreements").contains(
107 "There are no agreements created yet"
110 // Submit the form, get 500
111 cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
113 error: "Something went wrong",
115 cy.get("#packages_add").contains("Submit").click();
116 cy.get("main div[class='dialog alert']").contains(
117 "Something went wrong: Internal Server Error"
120 // Submit the form, success!
121 cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
125 cy.get("#packages_add").contains("Submit").click();
126 cy.get("main div[class='dialog message']").contains("Package created");
128 // Add new related agreement
129 let related_agreement = erm_package.package_agreements[0];
130 cy.intercept("GET", "/api/v1/erm/agreements", {
132 body: cy.get_agreements_to_relate(),
134 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/add");
135 cy.get("#package_agreements").contains("Add new agreement").click();
136 cy.get("#package_agreement_0").contains("Agreement 1");
137 cy.get("#agreement_id_0 .vs__search").type(
138 related_agreement.agreement.name
140 cy.get("#agreement_id_0 .vs__dropdown-menu li").eq(0).click( { force: true } ); //click first agreement suggestion
143 it("Edit package", () => {
144 let erm_package = get_package();
145 let packages = [erm_package];
146 // Click the 'Edit' button from the list
147 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
151 "X-Base-Total-Count": "1",
152 "X-Total-Count": "1",
157 "/api/v1/erm/eholdings/local/packages/*",
160 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
161 // Intercept related agreements request after entering agreement edit
162 cy.intercept("GET", "/api/v1/erm/agreements", {
164 body: cy.get_agreements_to_relate(),
165 }).as("get-related-agreements");
166 cy.get("#packages_list table tbody tr:first").contains("Edit").click();
167 cy.wait("@get-package");
168 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
169 cy.get("#packages_add h2").contains("Edit package");
171 // Form has been correctly filled in
172 cy.get("#package_name").should("have.value", erm_package.name);
173 cy.get("#package_type .vs__selected").contains("Complete");
174 cy.get("#package_content_type .vs__selected").contains("Print");
176 //Test related content
177 cy.get("#package_agreement_0 #agreement_id_0 .vs__selected").contains("second agreement name");
179 // Submit the form, get 500
180 cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
182 error: "Something went wrong",
184 cy.get("#packages_add").contains("Submit").click();
185 cy.get("main div[class='dialog alert']").contains(
186 "Something went wrong: Internal Server Error"
189 // Submit the form, success!
190 cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
194 cy.get("#packages_add").contains("Submit").click();
195 cy.get("main div[class='dialog message']").contains("Package updated");
198 it("Show package", () => {
199 let erm_package = get_package();
200 let packages = [erm_package];
201 // Click the "name" link from the list
202 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
206 "X-Base-Total-Count": "1",
207 "X-Total-Count": "1",
212 "/api/v1/erm/eholdings/local/packages/*",
215 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
216 let name_link = cy.get(
217 "#packages_list table tbody tr:first td:first a"
221 erm_package.name + " (#" + erm_package.package_id + ")"
224 cy.wait("@get-package");
225 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
226 cy.get("#packages_show h2").contains(
227 "Package #" + erm_package.package_id
229 // There are no resources, the table should not be displayed
230 cy.contains("Titles (0)");
231 cy.get("#table#title_list").should("not.exist");
234 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages/*", {
240 "/api/v1/erm/eholdings/local/packages/1/resources*",
245 package_id: erm_package.package_id,
250 publication_title: "A great title",
251 publication_type: "",
256 "X-Base-Total-Count": "1",
257 "X-Total-Count": "1",
260 ).as("get-resource");
261 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/1");
262 cy.contains("Titles (1)");
263 cy.wait("@get-resource");
265 cy.get("table#title_list").contains("A great title");
268 it("Delete package", () => {
269 let erm_package = get_package();
270 let packages = [erm_package];
272 // Click the 'Delete' button from the list
273 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
277 "X-Base-Total-Count": "1",
278 "X-Total-Count": "1",
283 "/api/v1/erm/eholdings/local/packages/*",
286 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
288 cy.get("#packages_list table tbody tr:first")
291 cy.get("#packages_confirm_delete h2").contains("Delete package");
292 cy.contains("Package name: " + erm_package.name);
294 // Submit the form, get 500
295 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
297 error: "Something went wrong",
299 cy.contains("Yes, delete").click();
300 cy.get("main div[class='dialog alert']").contains(
301 "Something went wrong: Internal Server Error"
304 // Submit the form, success!
305 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
309 cy.contains("Yes, delete").click();
310 cy.get("main div[class='dialog message']").contains("Package deleted");