2
0
mirror of https://github.com/frappe/frappe.git synced 2024-06-13 12:52:20 +00:00
frappe/cypress/integration/form.js
2022-08-04 14:51:01 +05:30

171 lines
5.2 KiB
JavaScript

context("Form", () => {
before(() => {
cy.login();
cy.visit("/app/website");
return cy
.window()
.its("frappe")
.then((frappe) => {
return frappe.call("frappe.tests.ui_test_helpers.create_contact_records");
});
});
it("create a new form", () => {
cy.visit("/app/todo/new");
cy.get_field("description", "Text Editor")
.type("this is a test todo", { force: true })
.wait(200);
cy.get(".page-title").should("contain", "Not Saved");
cy.intercept({
method: "POST",
url: "api/method/frappe.desk.form.save.savedocs",
}).as("form_save");
cy.get(".primary-action").click();
cy.wait("@form_save").its("response.statusCode").should("eq", 200);
cy.go_to_list("ToDo");
cy.clear_filters();
cy.get(".page-head").findByTitle("To Do").should("exist");
cy.get(".list-row").should("contain", "this is a test todo");
});
it("navigates between documents with child table list filters applied", () => {
cy.visit("/app/contact");
cy.clear_filters();
cy.get('.standard-filter-section [data-fieldname="name"] input')
.type("Test Form Contact 3")
.blur();
cy.click_listview_row_item_with_text("Test Form Contact 3");
cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
cy.get(".prev-doc").should("be.visible").click();
cy.get(".msgprint-dialog .modal-body").contains("No further records").should("be.visible");
cy.hide_dialog();
cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
cy.get(".next-doc").should("be.visible").click();
cy.get(".msgprint-dialog .modal-body").contains("No further records").should("be.visible");
cy.hide_dialog();
cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
// clear filters
cy.visit("/app/contact");
cy.clear_filters();
});
it("validates behaviour of Data options validations in child table", () => {
// test email validations for set_invalid controller
let website_input = "website.in";
let valid_email = "user@email.com";
let expectBackgroundColor = "rgb(255, 245, 245)";
cy.visit("/app/contact/new");
cy.get('.frappe-control[data-fieldname="email_ids"]').as("table");
cy.get("@table").find("button.grid-add-row").click();
cy.get("@table").find("button.grid-add-row").click();
cy.get("@table").find('[data-idx="1"]').as("row1");
cy.get("@table").find('[data-idx="2"]').as("row2");
cy.get("@row1").click();
cy.get("@row1").find("input.input-with-feedback.form-control").as("email_input1");
cy.get("@email_input1").type(website_input, { waitForAnimations: false });
cy.fill_field("company_name", "Test Company");
cy.get("@row2").click();
cy.get("@row2").find("input.input-with-feedback.form-control").as("email_input2");
cy.get("@email_input2").type(valid_email, { waitForAnimations: false });
cy.get("@row1").click();
cy.get("@email_input1").should(($div) => {
const style = window.getComputedStyle($div[0]);
expect(style.backgroundColor).to.equal(expectBackgroundColor);
});
cy.get("@email_input1").should("have.class", "invalid");
cy.get("@row2").click();
cy.get("@email_input2").should("not.have.class", "invalid");
});
it("Shows version conflict warning", { scrollBehavior: false }, () => {
cy.visit("/app/todo");
cy.insert_doc("ToDo", { description: "old" }).then((doc) => {
cy.visit(`/app/todo/${doc.name}`);
// make form dirty
cy.fill_field("status", "Cancelled", "Select");
// update doc using api - simulating parallel change by another user
cy.update_doc("ToDo", doc.name, { status: "Closed" }).then(() => {
cy.findByRole("button", { name: "Refresh" }).click();
cy.get_field("status", "Select").should("have.value", "Closed");
});
});
});
it("let user undo/redo field value changes", { scrollBehavior: false }, () => {
const jump_to_field = (field_label) => {
cy.get("body")
.type("{esc}") // lose focus if any
.type("{ctrl+j}") // jump to field
.type(field_label)
.wait(500)
.type("{enter}")
.wait(200)
.type("{enter}")
.wait(500);
};
const type_value = (value) => {
cy.focused().clear().type(value).type("{esc}");
};
const undo = () => cy.get("body").type("{esc}").type("{ctrl+z}").wait(500);
const redo = () => cy.get("body").type("{esc}").type("{ctrl+y}").wait(500);
cy.new_form("User");
jump_to_field("Email");
type_value("admin@example.com");
jump_to_field("Username");
type_value("admin42");
jump_to_field("Birth Date");
type_value("12-31-01");
jump_to_field("Send Welcome Email");
cy.focused().uncheck();
// make a mistake
jump_to_field("Username");
type_value("admin24");
// undo behaviour
undo();
cy.get_field("username").should("have.value", "admin42");
// redo behaviour
redo();
cy.get_field("username").should("have.value", "admin24");
// undo everything & redo everything, ensure same values at the end
undo();
undo();
undo();
undo();
undo();
redo();
redo();
redo();
redo();
redo();
cy.get_field("username").should("have.value", "admin24");
cy.get_field("email").should("have.value", "admin@example.com");
cy.get_field("birth_date").should("have.value", "12-31-2001"); // parsed value
cy.get_field("send_welcome_email").should("not.be.checked");
});
});