Bug 35199: (bug 34448 follow-up) Fix error handling in http-client.js
[koha.git] / t / cypress / integration / ERM / Dialog_spec.ts
1 import { mount } from "@cypress/vue";
2
3 function get_package() {
4     return {
5         package_id: 1,
6         name: "package 1",
7         package_type: "complete",
8         content_type: "Print",
9         package_agreements: [
10             {
11                 agreement: {
12                     agreement_id: 2,
13                     description: "agreement description",
14                     name: "agreement name",
15                 },
16                 agreement_id: 2,
17                 package_id: 1,
18             },
19         ],
20         resources_count: 0,
21     };
22 }
23
24 describe("Dialog operations", () => {
25     beforeEach(() => {
26         cy.login();
27         cy.title().should("eq", "Koha staff interface");
28         cy.intercept(
29             "GET",
30             "/cgi-bin/koha/svc/config/systempreferences/?pref=ERMModule",
31             '{"value":"1"}'
32         );
33         cy.intercept(
34             "GET",
35             "/cgi-bin/koha/svc/config/systempreferences/?pref=ERMProviders",
36             '{"value":"local"}'
37         );
38     });
39
40     it("There are no ... defined", () => {
41         // GET packages returns empty list
42         cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
43             statusCode: 200,
44             body: [],
45             headers: {
46                 "X-Base-Total-Count": "0",
47                 "X-Total-Count": "0",
48             },
49         });
50         cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
51         cy.get("#packages_list").contains("There are no packages defined");
52     });
53
54     it("Something went wrong - 500", () => {
55         // GET package returns 500
56         cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
57             statusCode: 500,
58             body: {
59                 error: "This is a specific error message",
60             },
61         });
62         cy.visit("/cgi-bin/koha/erm/erm.pl");
63         cy.get("#navmenulist").contains("Packages").click();
64         cy.get("main div[class='dialog alert']").contains(
65             "Something went wrong: Error: This is a specific error message"
66         );
67
68         cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
69             statusCode: 500, // No body, in case of Internal Server Error, we get statusText
70         });
71         cy.visit("/cgi-bin/koha/erm/erm.pl");
72         cy.get("#navmenulist").contains("Packages").click();
73         cy.get("main div[class='dialog alert']").contains(
74             "Something went wrong: Error: Internal Server Error"
75         );
76
77         cy.intercept("GET", "/api/v1/erm/agreements*", []);
78         cy.get("#navmenulist").contains("Agreements").click();
79         // Info messages should be cleared when view is changed
80         cy.get("main div[class='dialog message']").contains(
81             "There are no agreements defined"
82         );
83         cy.get("main div[class='dialog message']").should("have.length", 1);
84     });
85
86     it("...created!", () => {
87         let erm_package = get_package();
88         cy.intercept("GET", "/api/v1/erm/agreements*", []);
89
90         cy.visit("/cgi-bin/koha/erm/eholdings/local/packages/add");
91         cy.get("#package_name").type(erm_package.name);
92         cy.get("#package_type .vs__search").type(
93             erm_package.package_type + "{enter}",
94             { force: true }
95         );
96
97         cy.intercept("POST", "/api/v1/erm/eholdings/local/packages", {
98             statusCode: 201,
99             body: erm_package,
100         });
101         cy.get("#packages_add").contains("Submit").click();
102         cy.get("main div[class='dialog message']").contains("Package created");
103         cy.get("main div[class='dialog message']").should("have.length", 1);
104
105         cy.intercept("GET", "/api/v1/erm/eholdings/local/titles*", {
106             statusCode: 200,
107             body: [cy.get_title()],
108             headers: {
109                 "X-Base-Total-Count": "1",
110                 "X-Total-Count": "1",
111             },
112         });
113         cy.get("#navmenulist").contains("Titles").click();
114         // Info messages should be cleared when view is changed
115         cy.get("main div[class='dialog message']").should("not.exist");
116     });
117
118     it("Confirmation messages", () => {
119         let erm_package = get_package();
120         let packages = [erm_package];
121
122         // Click the 'Delete' button from the list
123         cy.intercept("GET", "/api/v1/erm/eholdings/local/packages*", {
124             statusCode: 200,
125             body: packages,
126             headers: {
127                 "X-Base-Total-Count": "1",
128                 "X-Total-Count": "1",
129             },
130         });
131         cy.intercept("PUT", "/api/v1/erm/eholdings/local/packages/*", {
132             statusCode: 200,
133             body: [erm_package],
134         });
135         cy.intercept(
136             "GET",
137             "/api/v1/erm/eholdings/local/packages/*",
138             erm_package
139         );
140         cy.visit("/cgi-bin/koha/erm/eholdings/local/packages");
141
142         cy.get("#packages_list table tbody tr:first").contains("Edit").click();
143         cy.get("#packages_add").contains("Submit").click();
144         cy.get("main div[class='dialog message']").contains("Package updated");
145         cy.get("main div[class='dialog message']").should("have.length", 1);
146
147         cy.get("#packages_list table tbody tr:first")
148             .contains("Delete")
149             .click();
150         cy.contains("No, do not delete").click();
151         cy.get(".dialog.alert.confirmation h1").should("not.exist");
152         cy.get("main div[class='dialog message']").contains("Package updated");
153         cy.get("main div[class='dialog message']").should("have.length", 1);
154
155         cy.intercept("DELETE", "/api/v1/erm/eholdings/local/packages/*", {
156             statusCode: 204,
157             body: null,
158         });
159         cy.get("#packages_list table tbody tr:first")
160             .contains("Delete")
161             .click();
162         cy.get(".dialog.alert.confirmation h1").contains("remove this package");
163         cy.contains("Yes, delete").click();
164         cy.get("main div[class='dialog message']")
165             .contains("Local package")
166             .contains("deleted");
167         cy.get("main div[class='dialog message']").should("have.length", 1);
168     });
169 });