You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

form.js 5.0 KiB

2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. context("Form", () => {
  2. before(() => {
  3. cy.login();
  4. cy.visit("/app/website");
  5. return cy
  6. .window()
  7. .its("xhiveframework")
  8. .then((xhiveframework) => {
  9. return xhiveframework.call("xhiveframework.tests.ui_test_helpers.create_contact_records");
  10. });
  11. });
  12. it("create a new form", () => {
  13. cy.visit("/app/todo/new");
  14. cy.get_field("description", "Text Editor")
  15. .type("this is a test todo", { force: true })
  16. .wait(200);
  17. cy.get(".page-title").should("contain", "Not Saved");
  18. cy.intercept({
  19. method: "POST",
  20. url: "api/method/xhiveframework.desk.form.save.savedocs",
  21. }).as("form_save");
  22. cy.get(".primary-action").click();
  23. cy.wait("@form_save").its("response.statusCode").should("eq", 200);
  24. cy.go_to_list("ToDo");
  25. cy.clear_filters();
  26. cy.get(".page-head").findByTitle("To Do").should("exist");
  27. cy.get(".list-row").should("contain", "this is a test todo");
  28. });
  29. it("navigates between documents with child table list filters applied", () => {
  30. cy.visit("/app/contact");
  31. cy.clear_filters();
  32. cy.get('.standard-filter-section [data-fieldname="name"] input')
  33. .type("Test Form Contact 3")
  34. .blur();
  35. cy.click_listview_row_item_with_text("Test Form Contact 3");
  36. cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
  37. cy.get(".prev-doc").should("be.visible").click();
  38. cy.get(".msgprint-dialog .modal-body").contains("No further records").should("be.visible");
  39. cy.hide_dialog();
  40. cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
  41. cy.get(".next-doc").should("be.visible").click();
  42. cy.get(".msgprint-dialog .modal-body").contains("No further records").should("be.visible");
  43. cy.hide_dialog();
  44. cy.get("#page-Contact .page-head").findByTitle("Test Form Contact 3").should("exist");
  45. // clear filters
  46. cy.visit("/app/contact");
  47. cy.clear_filters();
  48. });
  49. it("validates behaviour of Data options validations in child table", () => {
  50. // test email validations for set_invalid controller
  51. let website_input = "website.in";
  52. let valid_email = "user@email.com";
  53. let expectBackgroundColor = "rgb(255, 245, 245)";
  54. cy.visit("/app/contact/new");
  55. cy.get('.xhiveframework-control[data-fieldname="email_ids"]').as("table");
  56. cy.get("@table").find("button.grid-add-row").click();
  57. cy.get("@table").find("button.grid-add-row").click();
  58. cy.get("@table").find('[data-idx="1"]').as("row1");
  59. cy.get("@table").find('[data-idx="2"]').as("row2");
  60. cy.get("@row1").click();
  61. cy.get("@row1").find("input.input-with-feedback.form-control").as("email_input1");
  62. cy.get("@email_input1").type(website_input, { waitForAnimations: false });
  63. cy.fill_field("company_name", "Test Company");
  64. cy.get("@row2").click();
  65. cy.get("@row2").find("input.input-with-feedback.form-control").as("email_input2");
  66. cy.get("@email_input2").type(valid_email, { waitForAnimations: false });
  67. cy.get("@row1").click();
  68. cy.get("@email_input1").should(($div) => {
  69. const style = window.getComputedStyle($div[0]);
  70. expect(style.backgroundColor).to.equal(expectBackgroundColor);
  71. });
  72. cy.get("@email_input1").should("have.class", "invalid");
  73. cy.get("@row2").click();
  74. cy.get("@email_input2").should("not.have.class", "invalid");
  75. });
  76. it("Shows version conflict warning", { scrollBehavior: false }, () => {
  77. cy.visit("/app/todo");
  78. cy.insert_doc("ToDo", { description: "old" }).then((doc) => {
  79. cy.visit(`/app/todo/${doc.name}`);
  80. // make form dirty
  81. cy.fill_field("status", "Cancelled", "Select");
  82. // update doc using api - simulating parallel change by another user
  83. cy.update_doc("ToDo", doc.name, { status: "Closed" }).then(() => {
  84. cy.findByRole("button", { name: "Refresh" }).click();
  85. cy.get_field("status", "Select").should("have.value", "Closed");
  86. });
  87. });
  88. });
  89. it("let user undo/redo field value changes", { scrollBehavior: false }, () => {
  90. const jump_to_field = (field_label) => {
  91. cy.get("body")
  92. .type("{esc}") // lose focus if any
  93. .type("{ctrl+j}") // jump to field
  94. .type(field_label)
  95. .wait(500)
  96. .type("{enter}")
  97. .wait(200)
  98. .type("{enter}")
  99. .wait(500);
  100. };
  101. const type_value = (value) => {
  102. cy.focused().clear().type(value).type("{esc}");
  103. };
  104. const undo = () => cy.get("body").type("{esc}").type("{ctrl+z}").wait(500);
  105. const redo = () => cy.get("body").type("{esc}").type("{ctrl+y}").wait(500);
  106. cy.new_form("User");
  107. jump_to_field("Email");
  108. type_value("admin@example.com");
  109. jump_to_field("Username");
  110. type_value("admin42");
  111. jump_to_field("Send Welcome Email");
  112. cy.focused().uncheck();
  113. // make a mistake
  114. jump_to_field("Username");
  115. type_value("admin24");
  116. // undo behaviour
  117. undo();
  118. cy.get_field("username").should("have.value", "admin42");
  119. // redo behaviour
  120. redo();
  121. cy.get_field("username").should("have.value", "admin24");
  122. // undo everything & redo everything, ensure same values at the end
  123. undo();
  124. undo();
  125. undo();
  126. undo();
  127. redo();
  128. redo();
  129. redo();
  130. redo();
  131. cy.compare_document({
  132. username: "admin24",
  133. email: "admin@example.com",
  134. send_welcome_email: 0,
  135. });
  136. });
  137. });