import { beforeEach, describe, expect, it, vi } from 'vitest' import { elementUpdated, fixture, html } from '@open-wc/testing-helpers' import './UsAccordion' import type { UsAccordion } from './UsAccordion' describe('UsAccordion', () => { let usAccordion: UsAccordion const accordionWrapper = () => { const wrapper = usAccordion.shadowRoot?.querySelector('.accordion-wrapper') return wrapper } let mockHandleChange: Function beforeEach(async () => { usAccordion = await fixture(html``) mockHandleChange = vi.fn() }) it('should be defined', async () => { expect(usAccordion).toBeDefined() expect(usAccordion.tagName).toBe('US-ACCORDION') }) it('should be correct initial properties', () => { expect(usAccordion.widgetView).toBe('vertical') expect(usAccordion.variant).toBe('primary') expect(usAccordion.iconName).toBe('') expect(usAccordion.titleClose).toBe('') expect(usAccordion.infoTooltip).toBeFalsy() }) it('should be certain class "primary" depending on the data passed', async () => { usAccordion.widgetView = 'vertical' usAccordion.iconName = 'card' usAccordion.title = 'Show more' await elementUpdated(usAccordion) expect((accordionWrapper()?.querySelector('.accordion-header') as HTMLElement).className).toContain(usAccordion.variant) }) it('should be certain class "link" depending on the data passed', async () => { usAccordion.widgetView = 'vertical' usAccordion.iconName = 'card' usAccordion.title = 'Show more' usAccordion.variant = 'link' await elementUpdated(usAccordion) expect((accordionWrapper() as HTMLElement).className).toContain(usAccordion.variant) }) it('should be certain class "button" depending on the data passed', async () => { usAccordion.widgetView = 'vertical' usAccordion.iconName = 'card' usAccordion.title = 'Show more' usAccordion.variant = 'button' await elementUpdated(usAccordion) expect((accordionWrapper() as HTMLElement).className).toContain(usAccordion.variant) }) it('should be certain slot with depending on the slot-data passed', async () => { usAccordion = await fixture(html`
`) await elementUpdated(usAccordion) expect((document.querySelector('.target-slot')?.children[0] as HTMLElement).className).toContain('list-content') }) it('should be change property "showContent" after click', async () => { usAccordion = await fixture(html`
`) await elementUpdated(usAccordion) const accordionHeader = accordionWrapper()?.querySelector('.accordion-header') as HTMLElement accordionHeader.addEventListener('click', () => mockHandleChange()) accordionHeader.click() await elementUpdated(usAccordion) expect(mockHandleChange).toHaveBeenCalled() expect(usAccordion.showContent).toBeTruthy() }) })