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",
11 package_agreements: [],
16 describe("Package CRUD operations", () => {
18 cy.login("koha", "koha");
19 cy.title().should("eq", "Koha staff interface");
22 it("List package", () => {
23 // GET package returns 500
24 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages", {
26 error: "Something went wrong",
28 cy.visit("/cgi-bin/koha/erm/erm.pl");
29 cy.get("#navmenulist").contains("Packages").click();
30 cy.get("main div[class='dialog alert']").contains(
31 /Something went wrong/
34 // GET packages returns empty list
35 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", []);
36 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
37 cy.get("#packages_list").contains("There are no packages defined");
39 // GET packages returns something
40 let erm_package = get_package();
41 let packages = [erm_package];
43 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
47 "X-Base-Total-Count": "1",
53 "/api/v1/erm/eholdings/local/packages/*",
56 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
57 cy.get("#packages_list").contains("Showing 1 to 1 of 1 entries");
60 it("Add package", () => {
61 // Click the button in the toolbar
62 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
63 cy.contains("New package").click();
64 cy.get("#packages_add h2").contains("New package");
66 // Fill in the form for normal attributes
67 let erm_package = get_package();
69 cy.get("#packages_add").contains("Submit").click();
70 cy.get("input:invalid,textarea:invalid,select:invalid").should(
74 cy.get("#package_name").type(erm_package.name);
75 cy.get("#package_type .vs__search").type(
76 erm_package.package_type + "{enter}",
79 cy.get("#package_content_type .vs__search").type(
80 erm_package.content_type + "{enter}",
84 cy.get("#package_agreements").contains(
85 "There are no agreements created yet"
88 // Submit the form, get 500
89 cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
91 error: "Something went wrong",
93 cy.get("#packages_add").contains("Submit").click();
94 cy.get("main div[class='dialog alert']").contains(
95 "Something went wrong: Internal Server Error"
98 // Submit the form, success!
99 cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
103 cy.get("#packages_add").contains("Submit").click();
104 cy.get("main div[class='dialog message']").contains("Package created");
106 // Link with an agreement
107 cy.intercept("GET", "/api/v1/erm/agreements", {
109 body: [{ package_id: 1, description: "an agreement" }],
111 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/add");
112 cy.get("#package_agreements").contains("Add new agreement");
115 it("Edit package", () => {
116 let erm_package = get_package();
117 let packages = [erm_package];
118 // Click the 'Edit' button from the list
119 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
123 "X-Base-Total-Count": "1",
124 "X-Total-Count": "1",
129 "/api/v1/erm/eholdings/local/packages/*",
132 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
133 cy.get("#packages_list table tbody tr:first").contains("Edit").click();
134 cy.wait("@get-package");
135 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
136 cy.get("#packages_add h2").contains("Edit package");
138 // Form has been correctly filled in
139 cy.get("#package_name").should("have.value", erm_package.name);
140 cy.get("#package_type .vs__selected").contains("Complete");
141 cy.get("#package_content_type .vs__selected").contains("Print");
143 // Submit the form, get 500
144 cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
146 error: "Something went wrong",
148 cy.get("#packages_add").contains("Submit").click();
149 cy.get("main div[class='dialog alert']").contains(
150 "Something went wrong: Internal Server Error"
153 // Submit the form, success!
154 cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
158 cy.get("#packages_add").contains("Submit").click();
159 cy.get("main div[class='dialog message']").contains("Package updated");
162 it("Show package", () => {
163 let erm_package = get_package();
164 let packages = [erm_package];
165 // Click the "name" link from the list
166 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
170 "X-Base-Total-Count": "1",
171 "X-Total-Count": "1",
176 "/api/v1/erm/eholdings/local/packages/*",
179 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
180 let name_link = cy.get(
181 "#packages_list table tbody tr:first td:first a"
185 erm_package.name + " (#" + erm_package.package_id + ")"
188 cy.wait("@get-package");
189 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
190 cy.get("#packages_show h2").contains(
191 "Package #" + erm_package.package_id
193 // There are no resources, the table should not be displayed
194 cy.contains("Titles (0)");
195 cy.get("#table#title_list").should("not.exist");
198 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages/*", {
204 "/api/v1/erm/eholdings/local/packages/1/resources*",
209 package_id: erm_package.package_id,
214 publication_title: "A great title",
215 publication_type: "",
220 "X-Base-Total-Count": "1",
221 "X-Total-Count": "1",
224 ).as("get-resource");
225 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/1");
226 cy.contains("Titles (1)");
227 cy.wait("@get-resource");
229 cy.get("table#title_list").contains("A great title");
232 it("Delete package", () => {
233 let erm_package = get_package();
234 let packages = [erm_package];
236 // Click the 'Delete' button from the list
237 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
241 "X-Base-Total-Count": "1",
242 "X-Total-Count": "1",
247 "/api/v1/erm/eholdings/local/packages/*",
250 cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
252 cy.get("#packages_list table tbody tr:first")
255 cy.get("#packages_confirm_delete h2").contains("Delete package");
256 cy.contains("Package name: " + erm_package.name);
258 // Submit the form, get 500
259 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
261 error: "Something went wrong",
263 cy.contains("Yes, delete").click();
264 cy.get("main div[class='dialog alert']").contains(
265 "Something went wrong: Internal Server Error"
268 // Submit the form, success!
269 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
273 cy.contains("Yes, delete").click();
274 cy.get("main div[class='dialog message']").contains("Package deleted");