/** * @jest-environment jsdom */ import { Application } from 'stimulus'; import tabs_and_panels_controller from '../../../app/webpacker/controllers/tabs_and_panels_controller'; describe('TabsAndPanelsController', () => { beforeAll(() => { const application = Application.start(); application.register('tabs-and-panels', tabs_and_panels_controller); }); beforeEach(() => { document.body.innerHTML = `
Peek Ka Boo
Peek me
Ka you
Boo three
` }) it("#activate by clicking on tab", () => { const peakTab = document.getElementById("peek_tab") const kaTab = document.getElementById("ka_tab") const booTab = document.getElementById("boo_tab") const peakPanel = document.getElementById("peek_panel") const kaPanel = document.getElementById("ka_panel") const booPanel = document.getElementById("boo_panel") expect(peakTab.classList.contains("selected")).toBe(true) expect(kaTab.classList.contains("selected")).toBe(false) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("block") expect(kaPanel.style.display).toBe("none") expect(booPanel.style.display).toBe("none") kaTab.click() expect(peakTab.classList.contains("selected")).toBe(false) expect(kaTab.classList.contains("selected")).toBe(true) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("none") expect(kaPanel.style.display).toBe("block") expect(booPanel.style.display).toBe("none") }) it("#activateDefaultPanel on orderCycleSelected event", () => { const peakTab = document.getElementById("peek_tab") const kaTab = document.getElementById("ka_tab") const booTab = document.getElementById("boo_tab") const peakPanel = document.getElementById("peek_panel") const kaPanel = document.getElementById("ka_panel") const booPanel = document.getElementById("boo_panel") expect(peakTab.classList.contains("selected")).toBe(true) expect(kaTab.classList.contains("selected")).toBe(false) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("block") expect(kaPanel.style.display).toBe("none") expect(booPanel.style.display).toBe("none") kaTab.click() expect(peakTab.classList.contains("selected")).toBe(false) expect(kaTab.classList.contains("selected")).toBe(true) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("none") expect(kaPanel.style.display).toBe("block") expect(booPanel.style.display).toBe("none") const event = new Event("orderCycleSelected") window.dispatchEvent(event); expect(peakTab.classList.contains("selected")).toBe(true) expect(kaTab.classList.contains("selected")).toBe(false) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("block") expect(kaPanel.style.display).toBe("none") expect(booPanel.style.display).toBe("none") }) describe("when valid anchor is specified in the url", () => { const oldWindowLocation = window.location beforeAll(() => { Object.defineProperty(window, "location", { value: new URL("http://example.com/#boo_panel"), configurable: true, }) }) afterAll(() => { delete window.location window.location = oldWindowLocation }) it("#activateFromWindowLocationOrDefaultPanelTarget show panel based on anchor", () => { const peakTab = document.getElementById("peek_tab") const kaTab = document.getElementById("ka_tab") const booTab = document.getElementById("boo_tab") const peakPanel = document.getElementById("peek_panel") const kaPanel = document.getElementById("ka_panel") const booPanel = document.getElementById("boo_panel") expect(peakTab.classList.contains("selected")).toBe(false) expect(kaTab.classList.contains("selected")).toBe(false) expect(booTab.classList.contains("selected")).toBe(true) expect(peakPanel.style.display).toBe("none") expect(kaPanel.style.display).toBe("none") expect(booPanel.style.display).toBe("block") }) }) describe("when non valid anchor is specified in the url", () => { const oldWindowLocation = window.location beforeAll(() => { Object.defineProperty(window, "location", { value: new URL("http://example.com/#non_valid_panel"), configurable: true, }) }) afterAll(() => { delete window.location window.location = oldWindowLocation }) it("#activateFromWindowLocationOrDefaultPanelTarget show default panel", () => { const peakTab = document.getElementById("peek_tab") const kaTab = document.getElementById("ka_tab") const booTab = document.getElementById("boo_tab") const peakPanel = document.getElementById("peek_panel") const kaPanel = document.getElementById("ka_panel") const booPanel = document.getElementById("boo_panel") expect(peakTab.classList.contains("selected")).toBe(true) expect(kaTab.classList.contains("selected")).toBe(false) expect(booTab.classList.contains("selected")).toBe(false) expect(peakPanel.style.display).toBe("block") expect(kaPanel.style.display).toBe("none") expect(booPanel.style.display).toBe("none") }) }) })