cms.spec.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. import { test, expect } from "../setup";
  2. import {
  3. generateName,
  4. generateSlug,
  5. generateDescription,
  6. } from "../utils/faker";
  7. async function createPage(adminPage) {
  8. const cms = {
  9. name: generateName(),
  10. slug: generateSlug(),
  11. shortDescription: generateDescription(),
  12. };
  13. /**
  14. * Reaching the create page.
  15. */
  16. await adminPage.goto("admin/cms");
  17. await adminPage.waitForSelector(
  18. 'a.primary-button:has-text("Create Page")',
  19. { state: "visible" }
  20. );
  21. await adminPage.click('a.primary-button:has-text("Create Page")');
  22. /**
  23. * Description Section.
  24. */
  25. await adminPage.fillInTinymce("#content_ifr", cms.shortDescription);
  26. /**
  27. * General Section.
  28. */
  29. await adminPage.fill("#page_title", cms.name);
  30. await adminPage.click('label[for="channels_1"]');
  31. await expect(adminPage.locator("input#channels_1")).toBeChecked();
  32. /**
  33. * SEO Section.
  34. */
  35. await adminPage.fill("#meta_title", cms.name);
  36. await adminPage.fill("#url_key", cms.slug);
  37. await adminPage.fill("#meta_keywords", cms.name);
  38. await adminPage.fill("#meta_description", cms.shortDescription);
  39. /**
  40. * Now submit the form.
  41. */
  42. await adminPage.click('button.primary-button:has-text("Save Page")');
  43. await expect(
  44. adminPage.locator("#app p", { hasText: "CMS created successfully." })
  45. ).toBeVisible();
  46. await expect(adminPage.getByText(cms.name)).toBeVisible();
  47. await expect(adminPage.getByText(cms.slug)).toBeVisible();
  48. return cms;
  49. }
  50. test.describe("cms management", () => {
  51. test("should create a page", async ({ adminPage }) => {
  52. await createPage(adminPage);
  53. });
  54. test("should edit a page", async ({ adminPage }) => {
  55. const cms = {
  56. name: generateName(),
  57. slug: generateSlug(),
  58. shortDescription: generateDescription(),
  59. };
  60. /**
  61. * Reaching the edit CMS page.
  62. */
  63. await adminPage.goto("admin/cms");
  64. await adminPage.waitForSelector("span.cursor-pointer.icon-edit");
  65. const iconEdit = await adminPage.$$("span.cursor-pointer.icon-edit");
  66. await iconEdit[0].click();
  67. /**
  68. * Edit General Section.
  69. */
  70. await adminPage.getByRole("textbox", { name: "Page Title" }).fill("");
  71. await adminPage
  72. .getByRole("textbox", { name: "Page Title" })
  73. .fill(cms.name);
  74. /**
  75. * Edit Description Section.
  76. */
  77. const editorFrame = adminPage.frameLocator(
  78. "iframe.tox-edit-area__iframe"
  79. );
  80. await editorFrame.locator("body").fill(cms.shortDescription);
  81. /**
  82. * Edit SEO Section.
  83. */
  84. await adminPage.fill("#meta_title", "");
  85. await adminPage.fill("#meta_title", cms.name);
  86. await adminPage.fill("#url_key", "");
  87. await adminPage.fill("#url_key", cms.slug);
  88. await adminPage.fill("#meta_keywords", "");
  89. await adminPage.fill("#meta_keywords", cms.name);
  90. await adminPage.fill("#meta_description", "");
  91. await adminPage.fill("#meta_description", cms.shortDescription);
  92. /**
  93. * Now Submit The Form.
  94. */
  95. await adminPage.click('button.primary-button:has-text("Save Page")');
  96. await expect(
  97. adminPage.locator("#app p", {
  98. hasText: "CMS updated successfully.",
  99. })
  100. ).toBeVisible();
  101. await expect(adminPage.getByText(cms.name)).toBeVisible();
  102. await expect(adminPage.getByText(cms.slug)).toBeVisible();
  103. });
  104. test("should delete a page", async ({ adminPage }) => {
  105. /**
  106. * Creating a page to delete.
  107. */
  108. const cms = await createPage(adminPage);
  109. /**
  110. * Deleting a CMS page.
  111. */
  112. await adminPage.goto("admin/cms");
  113. await adminPage.waitForSelector("span.cursor-pointer.icon-delete", {
  114. state: "visible",
  115. });
  116. const iconDelete = await adminPage.$$(
  117. "span.cursor-pointer.icon-delete"
  118. );
  119. await iconDelete[0].click();
  120. /**
  121. * Confirmation modal for deleting a CMS page.
  122. */
  123. await adminPage.waitForSelector("text=Are you sure");
  124. const agreeButton = await adminPage.locator(
  125. 'button.primary-button:has-text("Agree")'
  126. );
  127. if (await agreeButton.isVisible()) {
  128. await agreeButton.click();
  129. } else {
  130. console.error("Agree button not found or not visible.");
  131. }
  132. /**
  133. * Alert message for deleting a CMS page should appear.
  134. */ ("CMS deleted successfully.");
  135. await expect(
  136. adminPage.locator("#app p", {
  137. hasText: "CMS deleted successfully.",
  138. })
  139. ).toBeVisible();
  140. await expect(adminPage.getByText(cms.name)).not.toBeVisible();
  141. });
  142. test("should mass delete the selected pages", async ({ adminPage }) => {
  143. /**
  144. * Creating CMS pages for multiselect delete.
  145. */
  146. await createPage(adminPage);
  147. /**
  148. * Deleting a CMS page.
  149. */
  150. await adminPage.goto("admin/cms");
  151. await adminPage.waitForSelector("span.cursor-pointer.icon-delete", {
  152. state: "visible",
  153. });
  154. const iconDelete = await adminPage.$$(
  155. "span.cursor-pointer.icon-delete"
  156. );
  157. await iconDelete[0].click();
  158. /**
  159. * Confirmation modal for deleting a CMS page.
  160. */
  161. await adminPage.waitForSelector("text=Are you sure");
  162. const agreeButton = await adminPage.locator(
  163. 'button.primary-button:has-text("Agree")'
  164. );
  165. if (await agreeButton.isVisible()) {
  166. await agreeButton.click();
  167. } else {
  168. console.error("Agree button not found or not visible.");
  169. }
  170. /**
  171. * Alert message for deleting a CMS page should appear.
  172. */
  173. await expect(
  174. adminPage.getByText("CMS deleted successfully.")
  175. ).toBeVisible();
  176. });
  177. test("should mass delete all the rows of current pages", async ({
  178. adminPage,
  179. }) => {
  180. /**
  181. * Creating a page to delete.
  182. */
  183. const cms = await createPage(adminPage);
  184. await adminPage.goto("admin/cms");
  185. /**
  186. * Selecting a multiselector checkbox.
  187. */
  188. await adminPage.locator(".icon-uncheckbox").first().click();
  189. await adminPage
  190. .getByRole("button", { name: "Select Action " })
  191. .click();
  192. await adminPage.getByRole("link", { name: "Delete" }).click();
  193. /**
  194. * Confirmation modal for deleting CMS pages.
  195. */
  196. await adminPage
  197. .getByRole("button", { name: "Agree", exact: true })
  198. .click();
  199. /**
  200. * Confirmation modal for deleting CMS pages.
  201. */
  202. await adminPage.getByText("Selected Data Deleted").click();
  203. await expect(adminPage.getByText(cms.name)).not.toBeVisible();
  204. });
  205. });