Modal.spec.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { flushPromises } from "@vue/test-utils";
  2. import { h } from "vue";
  3. import { useTestUtils } from "@/composables/useTestUtils";
  4. import { useModalsStore } from "@/stores/modals";
  5. import Modal from "@/components/Modal.vue";
  6. const { getWrapper } = useTestUtils();
  7. describe("Modal component", () => {
  8. beforeEach(async context => {
  9. context.wrapper = await getWrapper(Modal);
  10. });
  11. test("title prop", async ({ wrapper }) => {
  12. const title = "Modal Title";
  13. await wrapper.setProps({ title });
  14. expect(wrapper.find(".modal-card-title").text()).toBe(title);
  15. });
  16. test("size prop", async ({ wrapper }) => {
  17. await wrapper.setProps({ size: "slim" });
  18. expect(wrapper.find(".modal-card").classes()).toContain("modal-slim");
  19. await wrapper.setProps({ size: "wide" });
  20. expect(wrapper.find(".modal-card").classes()).toContain("modal-wide");
  21. });
  22. test("split prop", async ({ wrapper }) => {
  23. expect(wrapper.find(".modal-card").classes()).not.toContain(
  24. "modal-split"
  25. );
  26. await wrapper.setProps({ split: true });
  27. expect(wrapper.find(".modal-card").classes()).toContain("modal-split");
  28. });
  29. test("christmas lights render if enabled", async () => {
  30. const wrapper = await getWrapper(Modal, {
  31. shallow: true,
  32. lofig: { siteSettings: { christmas: true } }
  33. });
  34. expect(
  35. wrapper.findComponent({ name: "ChristmasLights" }).exists()
  36. ).toBeTruthy();
  37. });
  38. test("click to close modal emits if intercepted", async ({ wrapper }) => {
  39. await wrapper.setProps({ interceptClose: true });
  40. await wrapper.find(".modal-background").trigger("click");
  41. await wrapper.find(".modal-card-head > .delete").trigger("click");
  42. expect(wrapper.emitted()).toHaveProperty("close");
  43. expect(wrapper.emitted().close).toHaveLength(2);
  44. });
  45. test("click to close modal calls store action if not intercepted", async ({
  46. wrapper
  47. }) => {
  48. const modalsStore = useModalsStore();
  49. await wrapper.find(".modal-background").trigger("click");
  50. await wrapper.find(".modal-card-head > .delete").trigger("click");
  51. await flushPromises();
  52. expect(modalsStore.closeCurrentModal).toHaveBeenCalledTimes(2);
  53. });
  54. test("renders slots", async () => {
  55. const wrapper = await getWrapper(Modal, {
  56. slots: {
  57. sidebar: h("div", {}, "Sidebar Slot"),
  58. toggleMobileSidebar: h("div", {}, "Toggle Mobile Sidebar Slot"),
  59. body: h("div", {}, "Body Slot"),
  60. footer: h("div", {}, "Footer Slot")
  61. }
  62. });
  63. expect(wrapper.html()).toMatchSnapshot();
  64. });
  65. });