Koha-clms/t/cypress/integration/Admin/RecordSources_spec.ts

236 lines
7.6 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 */
describe("Breadcrumbs tests", () => {
beforeEach(() => {
cy.login();
cy.title().should("eq", "Koha staff interface");
});
it("Breadcrumbs", () => {
cy.visit("/cgi-bin/koha/admin/admin-home.pl");
cy.contains("Record sources").click();
cy.get("#breadcrumbs").contains("Administration");
cy.get(".breadcrumb-item").eq(2).contains("Record sources");
// use the 'New' button
cy.contains("New record source").click();
cy.get('[aria-current="page"]').contains("Add record source");
cy.get("#breadcrumbs")
.contains("Record sources")
.should("have.attr", "href")
.and("equal", "/cgi-bin/koha/admin/record_sources");
});
});
describe("Record sources CRUD tests", () => {
beforeEach(() => {
cy.login();
cy.title().should("eq", "Koha staff interface");
});
it("Add", () => {
cy.visit("/cgi-bin/koha/admin/admin-home.pl");
cy.contains("Record sources").click();
cy.contains("New record source").click();
cy.get("#name").type("Poop");
// Submit the form, get 201
cy.intercept("POST", "/api/v1/record_sources", {
statusCode: 201,
body: {},
});
cy.get("#record_sources_add").contains("Save").click();
cy.get("main div[class='alert alert-info']").contains(
"Record source created!"
);
});
it("List", () => {
cy.intercept("GET", "/api/v1/record_sources*", {
statusCode: 200,
body: [],
headers: {
"X-Base-Total-Count": "0",
"X-Total-Count": "0",
},
});
cy.visit("/cgi-bin/koha/admin/record_sources");
cy.get("#record_sources_list").contains(
"There are no record sources defined"
);
cy.intercept("GET", "/api/v1/record_sources*", {
statusCode: 200,
body: [
{
record_source_id: 1,
name: "Source 1",
can_be_edited: true,
usage_count: 0,
},
{
record_source_id: 2,
name: "Source 2",
can_be_edited: false,
usage_count: 1,
},
{
record_source_id: 3,
name: "Source 3",
can_be_edited: true,
usage_count: 0,
},
],
headers: {
"X-Base-Total-Count": "3",
"X-Total-Count": "3",
},
});
cy.visit("/cgi-bin/koha/admin/record_sources");
cy.get("#record_sources_list").contains("Showing 1 to 3 of 3 entries");
cy.get(".dataTable > tbody > tr:first-child").within(() => {
// Test true => "Yes"
cy.get("td:nth-child(3n+3)").contains("Yes");
// last column
cy.get("td:last-child").within(() => {
cy.contains("Edit");
// usage_count = 0 then the delete button is displayed
cy.contains("Delete");
});
});
cy.get(".dataTable > tbody > tr:nth-child(2)").within(() => {
// Test false => "No"
cy.get("td:nth-child(3n+3)").contains("No");
// last column
cy.get("td:last-child").within(() => {
cy.contains("Edit");
// usage_count > 0 then no delete button
cy.should("not.contain", "Delete");
});
});
});
it("Edit", () => {
cy.intercept("GET", "/api/v1/record_sources*", {
statusCode: 200,
body: [
{
record_source_id: 1,
name: "Source 1",
can_be_edited: true,
usage_count: 0,
},
{
record_source_id: 2,
name: "Source 2",
can_be_edited: false,
usage_count: 1,
},
{
record_source_id: 3,
name: "Source 3",
can_be_edited: true,
usage_count: 0,
},
],
headers: {
"X-Base-Total-Count": "3",
"X-Total-Count": "3",
},
});
cy.visit("/cgi-bin/koha/admin/record_sources");
cy.intercept("GET", "/api/v1/record_sources/1", {
statusCode: 200,
body: {
record_source_id: 1,
name: "Source 1",
can_be_edited: true,
},
});
cy.get("#record_sources_list table tbody tr:first")
.contains("Edit")
.click();
cy.get("#name").should("have.value", "Source 1");
cy.get("#can_be_edited").should("be.checked");
cy.intercept("GET", "/api/v1/record_sources/1", {
statusCode: 200,
body: {
record_source_id: 1,
name: "Source 1",
can_be_edited: false,
},
});
cy.visit("/cgi-bin/koha/admin/record_sources/edit/1");
cy.get("#name").should("have.value", "Source 1");
cy.get("#can_be_edited").should("not.be.checked");
// Submit the form, get 500
cy.intercept("PUT", "/api/v1/record_sources/1", {
statusCode: 201,
body: {
record_source_id: 1,
name: "Poop",
can_be_edited: false,
},
});
cy.get("#record_sources_add").contains("Save").click();
});
it("Delete", () => {
cy.intercept("GET", "/api/v1/record_sources*", {
statusCode: 200,
body: [
{
record_source_id: 1,
name: "Source 1",
can_be_edited: true,
usage_count: 0,
},
{
record_source_id: 2,
name: "Source 2",
can_be_edited: false,
usage_count: 0,
},
{
record_source_id: 3,
name: "Source 3",
can_be_edited: true,
usage_count: 1,
},
],
headers: {
"X-Base-Total-Count": "3",
"X-Total-Count": "3",
},
});
cy.visit("/cgi-bin/koha/admin/record_sources");
cy.intercept("DELETE", "/api/v1/record_sources/2", {
statusCode: 204,
body: {},
});
cy.get("#record_sources_list table tbody tr:nth-child(2n+2)")
.contains("Delete")
.click();
cy.get(".alert-warning.confirmation h1").contains(
"Are you sure you want to remove this record source?"
);
cy.contains("Source 2");
cy.contains("No, do not delete").click();
cy.get("#record_sources_list table tbody tr:nth-child(2n+2)")
.contains("Delete")
.click();
cy.contains("Source 2");
cy.contains("Yes, delete").click();
cy.get("main div[class='alert alert-info']").contains(
"Record source Source 2 deleted"
);
});
});