Modal.spec.ts 2.0 KB

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