/** * @jest-environment jsdom */ import { Application } from "stimulus"; import help_modal_controller from "../../../app/webpacker/controllers/help_modal_controller"; import help_modal_link_controller from "../../../app/webpacker/controllers/help_modal_link_controller"; expect.extend({ toBeVisible(element) { if(element.className.includes("in") && element.style.display == "block") { return { pass: true } } else { return { pass: false } } }, }); describe("HelpModalController", () => { beforeAll(() => { const application = Application.start(); application.register("help-modal", help_modal_controller); application.register("help-modal-link", help_modal_link_controller); jest.useFakeTimers() }); beforeEach(() => { document.body.innerHTML = `
Open `; }); it("opens and closes", () => { const modal = document.getElementById("modal"); const openLink = document.getElementById("open-link"); const closeLink = document.getElementById("close-link"); expect(document.body.className).not.toContain("modal-open") expect(background).not.toBeVisible() expect(modal).not.toBeVisible() openLink.click(); jest.runAllTimers(); expect(document.body.className).toContain("modal-open") expect(background).toBeVisible() expect(modal).toBeVisible() closeLink.click(); jest.runAllTimers(); expect(document.body.className).not.toContain("modal-open") expect(background).not.toBeVisible() expect(modal).not.toBeVisible() }); it("closes when the escape key is pressed", () => { const modal = document.getElementById("modal"); const openLink = document.getElementById("open-link"); openLink.click(); jest.runAllTimers() expect(modal).toBeVisible() document.dispatchEvent(new KeyboardEvent('keyup', { 'code': 'Escape' })); jest.runAllTimers() expect(modal).not.toBeVisible() }); it("closes when the background is clicked", () => { const background = document.getElementById("background"); const modal = document.getElementById("modal"); const openLink = document.getElementById("open-link"); openLink.click(); jest.runAllTimers() expect(modal).toBeVisible() background.click() jest.runAllTimers() expect(modal).not.toBeVisible() }); });