import { TransitionComponent } from './transition.component';
describe('ymlwebcl-transition', () => {
const TRANSITION_COMPONENT = 'ymlwebcl-transition';
let transitionElement: TransitionComponent;
const getShadowRoot = (tagName: string): ShadowRoot | null =>
document.body.getElementsByTagName(tagName)[0].shadowRoot;
beforeEach(() => {
transitionElement = window.document.createElement(
TRANSITION_COMPONENT
) as TransitionComponent;
document.body.appendChild(transitionElement);
});
afterEach(() => {
document.body.getElementsByTagName(TRANSITION_COMPONENT)[0].remove();
});
it('matches component snapshot', async () => {
expect(
document.body.getElementsByTagName(TRANSITION_COMPONENT)[0]
).toMatchSnapshot();
});
it('renders the slot elements', async () => {
transitionElement['componentArray'] = ['slot1'];
getShadowRoot(TRANSITION_COMPONENT)
.querySelector('div')
.querySelector('div').innerHTML =
'
Test
';
await transitionElement.updateComplete;
const elem = getShadowRoot(TRANSITION_COMPONENT)
.querySelector('div')
.querySelector('div')
.querySelector('h2');
expect(elem.classList.contains('slot-test')).toBe(true);
});
it('displays the first slot elements by default', async () => {
transitionElement['componentArray'] = ['slot1', 'slot2'];
await transitionElement.updateComplete;
const slotComponents = getShadowRoot(TRANSITION_COMPONENT)
.querySelector('div')
.querySelectorAll('div')[0];
expect(slotComponents.style.display).toBe('block');
});
it('hides the second slot elements by default', async () => {
transitionElement['componentArray'] = ['slot1', 'slot2'];
await transitionElement.updateComplete;
const slotComponents = getShadowRoot(TRANSITION_COMPONENT)
.querySelector('div')
.querySelectorAll('div')[1];
expect(slotComponents.style.display).toBe('none');
});
it('set the background color for parent div of slot elements', async () => {
transitionElement['componentArray'] = ['slot1', 'slot2'];
transitionElement['backgroundColor'] = 'white';
window.document.body.appendChild(transitionElement);
await transitionElement.updateComplete;
const slotComponents =
getShadowRoot(TRANSITION_COMPONENT).querySelector('div');
expect(slotComponents.style.background).toBe('white');
});
it('set the speed in which new component appears', async () => {
document.body.getElementsByTagName(TRANSITION_COMPONENT)[0].remove();
transitionElement = window.document.createElement(
TRANSITION_COMPONENT
) as TransitionComponent;
transitionElement['componentArray'] = ['mySlot1', 'mySlot2'];
transitionElement.setAttribute('animationDuration', '3');
await window.document.body.appendChild(transitionElement);
const slotComponents =
getShadowRoot(TRANSITION_COMPONENT).getElementById('mySlot1');
expect(slotComponents.style.animationDuration).toBe('3s');
});
it('set the delay at which new component appears', async () => {
document.body.getElementsByTagName(TRANSITION_COMPONENT)[0].remove();
transitionElement = window.document.createElement(
TRANSITION_COMPONENT
) as TransitionComponent;
transitionElement['componentArray'] = ['mySlot1', 'mySlot2'];
transitionElement.setAttribute('animationDelay', '2');
await window.document.body.appendChild(transitionElement);
const slotComponents =
getShadowRoot(TRANSITION_COMPONENT).getElementById('mySlot1');
expect(slotComponents.style.animationDelay).toBe('2s');
});
});