39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { describe, test, expect } from 'vitest';
|
|||
|
|
import { Accordion } from './Accordion';
|
||
|
|
|
||
|
|
const toHtml = (Accordion as any).toHtml;
|
||
|
|
|
||
|
|
const items = [
|
||
|
|
{ title: 'Q1', content: 'A1', isOpen: true },
|
||
|
|
{ title: 'Q2', content: 'A2', isOpen: false },
|
||
|
|
];
|
||
|
|
|
||
|
|
describe('Accordion.toHtml basic export', () => {
|
||
|
|
test('renders a <details> per item with the open attribute honored', () => {
|
||
|
|
const { html } = toHtml({ items }, '');
|
||
|
|
const detailsBlocks = html.match(/<details[^>]*>/g) || [];
|
||
|
|
expect(detailsBlocks.length).toBe(2);
|
||
|
|
expect(detailsBlocks[0]).toContain(' open');
|
||
|
|
expect(detailsBlocks[1]).not.toContain(' open');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('headerBg/headerColor/contentBg/borderColor emit into the panel styles', () => {
|
||
|
|
const { html } = toHtml({ items, headerBg: '#111111', headerColor: '#222222', contentBg: '#333333', borderColor: '#444444' }, '');
|
||
|
|
expect(html).toContain('#111111');
|
||
|
|
expect(html).toContain('#222222');
|
||
|
|
expect(html).toContain('#333333');
|
||
|
|
expect(html).toContain('#444444');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
describe('Accordion.craft.props includes the box-model/animation/visibility rollout props', () => {
|
||
|
|
test('animation, animationDelay, and all 3 hideOn* flags are declared (blank/false defaults)', () => {
|
||
|
|
const props = (Accordion as any).craft.props;
|
||
|
|
expect(props).toHaveProperty('animation', '');
|
||
|
|
expect(props).toHaveProperty('animationDelay', '');
|
||
|
|
expect(props).toHaveProperty('hideOnDesktop', false);
|
||
|
|
expect(props).toHaveProperty('hideOnTablet', false);
|
||
|
|
expect(props).toHaveProperty('hideOnMobile', false);
|
||
|
|
});
|
||
|
|
});
|