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_packages_to_relate() {
9 description: "a package",
10 name: "first package name"
14 description: "a second package",
15 name: "second package name"
20 describe("Title CRUD operations", () => {
22 cy.fetch_initial_ERM_sys_pref_value();
23 cy.set_ERM_sys_pref_value(true);
28 cy.title().should("eq", "Koha staff interface");
32 cy.reset_initial_ERM_sys_pref_value();
35 it("Import titles", () => {
36 let erm_title = cy.get_title();
37 let resource = erm_title.resources[0];
39 // Create a list in case none exists
40 cy.visit("/cgi-bin/koha/virtualshelves/shelves.pl");
41 cy.contains("New list").click();
42 cy.get("#shelfname").type('list name');
43 cy.contains("Save").click();
45 // First attempt to import list has no packages
46 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
49 }).as("get-empty-packages");
50 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
52 cy.get("#toolbar a").contains("Import from list").click();
53 cy.get("h2").contains("Import from a list");
54 cy.get("#package_list .vs__selected").should('not.exist');
56 // Make sure packages are returned
57 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
59 body: get_packages_to_relate(),
60 }).as("get-related-packages");
61 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
62 cy.get("#toolbar a").contains("Import from list").click();
63 cy.get("h2").contains("Import from a list");
66 // Prepare background job response to the POST
67 cy.intercept("POST", "/api/v1/erm/eholdings/local/titles/import", {
70 }).as("get-job-response");
71 cy.get("#list_list tbody tr:first td a").contains("Import").click();
72 cy.get("main div[class='dialog message']").contains("Import in progress, see job #1");
75 it("List title", () => {
76 // GET title returns 500
77 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
79 error: "Something went wrong",
81 cy.visit("/cgi-bin/koha/erm/erm.pl");
82 cy.get("#navmenulist").contains("Titles").click();
83 cy.get("main div[class='dialog alert']").contains(
84 /Something went wrong/
87 // GET titles returns empty list
88 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
92 "X-Base-Total-Count": "0",
96 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
97 cy.get("#titles_list").contains("There are no titles defined");
99 // GET titles returns something
100 let erm_title = cy.get_title();
101 let titles = [erm_title];
103 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
107 "X-Base-Total-Count": "1",
108 "X-Total-Count": "1",
111 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
112 cy.get("#titles_list").contains("Showing 1 to 1 of 1 entries");
115 it("Add title", () => {
119 url: "/api/v1/erm/eholdings/local/packages*",
126 // Click the button in the toolbar
127 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
128 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
129 cy.contains("New title").click();
130 cy.get("#titles_add h2").contains("New title");
132 // Fill in the form for normal attributes
133 let erm_title = cy.get_title();
135 cy.get("#titles_add").contains("Submit").click();
136 cy.get("input:invalid,textarea:invalid,select:invalid").should(
140 cy.get("#title_publication_title").type(erm_title.publication_title);
141 cy.get("#title_print_identifier").type(erm_title.print_identifier);
142 cy.get("#title_online_identifier").type(erm_title.online_identifier);
143 cy.get("#title_date_first_issue_online").type(erm_title.date_first_issue_online);
144 cy.get("#title_num_first_vol_online").type(erm_title.num_first_vol_online);
145 cy.get("#title_num_first_issue_online").type(erm_title.num_first_issue_online);
146 cy.get("#title_date_last_issue_online").type(erm_title.date_last_issue_online);
147 cy.get("#title_num_last_vol_online").type(erm_title.num_last_vol_online);
148 cy.get("#title_num_last_issue_online").type(erm_title.num_last_issue_online);
149 cy.get("#title_title_url").type(erm_title.title_url);
150 cy.get("#title_first_author").type(erm_title.first_author);
151 cy.get("#title_embargo_info").type(erm_title.embargo_info);
152 cy.get("#title_coverage_depth").type(erm_title.coverage_depth);
153 cy.get("#title_notes").type(erm_title.notes);
154 cy.get("#title_publisher_name").type(erm_title.publisher_name);
155 cy.get("#title_publication_type .vs__search").type(
156 erm_title.publication_type + "{enter}",
159 cy.get("#title_date_monograph_published_print").type(erm_title.date_monograph_published_print);
160 cy.get("#title_date_monograph_published_online").type(erm_title.date_monograph_published_online);
161 cy.get("#title_monograph_volume").type(erm_title.monograph_volume);
162 cy.get("#title_monograph_edition").type(erm_title.monograph_edition);
163 cy.get("#title_first_editor").type(erm_title.first_editor);
164 cy.get("#title_parent_publication_title_id").type(erm_title.parent_publication_title_id);
165 cy.get("#title_preceeding_publication_title_id").type(erm_title.preceeding_publication_title_id);
166 cy.get("#title_access_type").type(erm_title.access_type);
168 cy.get("#resources").contains(
169 "There are no packages created yet"
172 // Submit the form, get 500
173 cy.intercept("POST", "/api/v1/erm/eholdings/local/titles", {
175 error: "Something went wrong",
177 cy.get("#titles_add").contains("Submit").click();
178 cy.get("main div[class='dialog alert']").contains(
179 "Something went wrong: Error: Internal Server Error"
182 // Submit the form, success!
183 cy.intercept("POST", "/api/v1/erm/eholdings/local/titles", {
187 cy.get("#titles_add").contains("Submit").click();
188 cy.get("main div[class='dialog message']").contains("Title created");
190 // Add new related package (resource)
191 let related_package = erm_title.resources[0];
192 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
194 body: get_packages_to_relate(),
195 }).as('get-related-packages');
196 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles/add");
197 cy.get("#resources").contains("Add to another package").click();
198 cy.get("#resources").contains("Package 1");
199 cy.get("#resources #resource_package_id_0 .vs__search").type(
200 related_package.package.name
202 cy.get("#resources #resource_package_id_0 .vs__dropdown-menu li").eq(0).click( { force: true } ); //click first package suggestion
205 it("Edit title", () => {
206 let erm_title = cy.get_title();
207 let titles = [erm_title];
208 // Click the 'Edit' button from the list
209 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
213 "X-Base-Total-Count": "1",
214 "X-Total-Count": "1",
219 "/api/v1/erm/eholdings/local/titles/*",
222 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
223 // Intercept related packages request after entering title edit
224 cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
226 body: get_packages_to_relate(),
227 }).as('get-related-packages');
229 cy.get("#titles_list table tbody tr:first").contains("Edit").click();
230 cy.wait("@get-title");
231 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
232 cy.get("#titles_add h2").contains("Edit title");
234 // Form has been correctly filled in
235 cy.get("#title_publication_title").should("have.value", erm_title.publication_title);
236 cy.get("#title_print_identifier").should("have.value", erm_title.print_identifier);
237 cy.get("#title_online_identifier").should("have.value", erm_title.online_identifier);
238 cy.get("#title_date_first_issue_online").should("have.value", erm_title.date_first_issue_online);
239 cy.get("#title_num_first_vol_online").should("have.value", erm_title.num_first_vol_online);
240 cy.get("#title_num_first_issue_online").should("have.value", erm_title.num_first_issue_online);
241 cy.get("#title_date_last_issue_online").should("have.value", erm_title.date_last_issue_online);
242 cy.get("#title_num_last_vol_online").should("have.value", erm_title.num_last_vol_online);
243 cy.get("#title_num_last_issue_online").should("have.value", erm_title.num_last_issue_online);
244 cy.get("#title_title_url").should("have.value", erm_title.title_url);
245 cy.get("#title_first_author").should("have.value", erm_title.first_author);
246 cy.get("#title_embargo_info").should("have.value", erm_title.embargo_info);
247 cy.get("#title_coverage_depth").should("have.value", erm_title.coverage_depth);
248 cy.get("#title_notes").should("have.value", erm_title.notes);
249 cy.get("#title_publisher_name").should("have.value", erm_title.publisher_name);
250 cy.get("#title_publication_type .vs__selected").contains('Journal');
251 cy.get("#title_date_monograph_published_print").should("have.value", erm_title.date_monograph_published_print);
252 cy.get("#title_date_monograph_published_online").should("have.value", erm_title.date_monograph_published_online);
253 cy.get("#title_monograph_volume").should("have.value", erm_title.monograph_volume);
254 cy.get("#title_monograph_edition").should("have.value", erm_title.monograph_edition);
255 cy.get("#title_first_editor").should("have.value", erm_title.first_editor);
256 cy.get("#title_parent_publication_title_id").should("have.value", erm_title.parent_publication_title_id);
257 cy.get("#title_preceeding_publication_title_id").should("have.value", erm_title.preceeding_publication_title_id);
258 cy.get("#title_access_type").should("have.value", erm_title.access_type);
260 //Test related content
261 cy.get("#resources #resource_package_id_0 .vs__selected").contains("package name");
263 // Submit the form, get 500
264 cy.intercept("PUT", "/api/v1/erm/eholdings/local/titles/*", {
266 error: "Something went wrong",
268 cy.get("#titles_add").contains("Submit").click();
269 cy.get("main div[class='dialog alert']").contains(
270 "Something went wrong: Error: Internal Server Error"
273 // Submit the form, success!
274 cy.intercept("PUT", "/api/v1/erm/eholdings/local/titles/*", {
278 cy.get("#titles_add").contains("Submit").click();
279 cy.get("main div[class='dialog message']").contains("Title updated");
282 it("Show title", () => {
283 let erm_title = cy.get_title();
284 let titles = [erm_title];
285 // Click the "name" link from the list
286 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
290 "X-Base-Total-Count": "1",
291 "X-Total-Count": "1",
294 // Title with empty resources.
298 url: "/api/v1/erm/eholdings/local/titles/*",
303 publication_title: "publication title",
309 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
310 let title_link = cy.get(
311 "#titles_list table tbody tr:first td:first a"
315 erm_title.publication_title + " (#" + erm_title.title_id + ")"
318 "#titles_list table tbody tr:first td:first a"
320 cy.wait("@get-title");
321 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
322 cy.get("#eholdings_title_show h2").contains(
323 "Title #" + erm_title.title_id
325 // There are no packages, the table should not be displayed
326 cy.contains("Packages (0)");
327 cy.get("#table#package_list").should("not.exist");
329 // Test now with all values
332 "/api/v1/erm/eholdings/local/titles/*",
337 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles/1");
338 cy.contains("Packages (1)");
342 let related_package = erm_title.resources[0];
343 // cy.get("#package_list tbody tr:first td a").contains("first package name").click();
346 "/api/v1/erm/eholdings/local/resources/"+related_package.resource_id,
348 ).as("get-related-package");
349 cy.get("table#package_list").contains("first package name").click();
350 cy.contains("Resource #"+related_package.resource_id);
351 cy.contains(related_package.package.name);
354 it("Delete title", () => {
355 let erm_title = cy.get_title();
356 let titles = [erm_title];
358 // Click the 'Delete' button from the list
359 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
363 "X-Base-Total-Count": "1",
364 "X-Total-Count": "1",
369 "/api/v1/erm/eholdings/local/titles/*",
372 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
374 cy.get("#titles_list table tbody tr:first")
377 cy.get(".dialog.alert.confirmation h1").contains("remove this title");
378 cy.contains(erm_title.publication_title);
380 // Accept the confirmation dialog, get 500
381 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/titles/*", {
383 error: "Something went wrong",
385 cy.contains("Yes, delete").click();
386 cy.get("main div[class='dialog alert']").contains(
387 "Something went wrong: Error: Internal Server Error"
390 // Accept the confirmation dialog, success!
391 cy.intercept("DELETE", "/api/v1/erm/eholdings/local/titles/*", {
395 cy.get("#titles_list table tbody tr:first")
398 cy.get(".dialog.alert.confirmation h1").contains("remove this title");
399 cy.contains("Yes, delete").click();
400 cy.get("main div[class='dialog message']").contains("Local title").contains("deleted");
403 // Click the "name" link from the list
404 cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
408 "X-Base-Total-Count": "1",
409 "X-Total-Count": "1",
412 // Title with empty resources.
416 url: "/api/v1/erm/eholdings/local/titles/*",
421 publication_title: "publication title",
427 cy.visit("/cgi-bin/koha/erm/eholdings/local/titles");
428 let title_link = cy.get(
429 "#titles_list table tbody tr:first td:first a"
433 erm_title.publication_title + " (#" + erm_title.title_id + ")"
436 "#titles_list table tbody tr:first td:first a"
438 cy.wait("@get-title");
439 cy.wait(500); // Cypress is too fast! Vue hasn't populated the form yet!
440 cy.get("#eholdings_title_show h2").contains(
441 "Title #" + erm_title.title_id
444 cy.get('#eholdings_title_show .action_links .fa-trash').click();
445 cy.get(".dialog.alert.confirmation h1").contains("remove this title");
446 cy.contains("Yes, delete").click();
448 //Make sure we return to list after deleting from show
449 cy.get("#titles_list table tbody tr:first")