@v4fire/client
Version:
V4Fire client core library
124 lines (105 loc) • 2.92 kB
JavaScript
// @ts-check
/*!
* V4Fire Client Core
* https://github.com/V4Fire/Client
*
* Released under the MIT license
* https://github.com/V4Fire/Client/blob/master/LICENSE
*/
/**
* @typedef {import('playwright').Page} Page
*/
const
h = include('tests/helpers').default;
/** @param {Page} page */
module.exports = (page) => {
const components = {
emptyWithSlot: undefined,
emptyNoSlot: undefined,
emptyWithData: undefined
};
const nodes = {
emptyWithSlot: undefined,
emptyNoSlot: undefined,
emptyWithData: undefined
};
beforeAll(async () => {
await page.evaluate(() => {
const baseAttrs = {
theme: 'demo',
option: 'section',
optionProps: ({current}) => ({'data-index': current.i})
};
const slots = {
empty: {
tag: 'div',
attrs: {
id: 'empty',
'data-test-ref': 'empty'
},
content: 'Empty'
}
};
const scheme = [
{
attrs: {
...baseAttrs,
dataProvider: 'demo.Pagination',
dbConverter: ({data}) => ({data: data.splice(0, 4)}),
id: 'emptyNoSlot'
}
},
{
attrs: {
...baseAttrs,
dataProvider: 'demo.Pagination',
dbConverter: ({data}) => ({data: data.splice(0, 4)}),
request: {get: {chunkSize: 8, total: 8}},
id: 'emptyWithData'
},
content: {
empty: slots.empty
}
},
{
attrs: {
...baseAttrs,
dataProvider: 'demo.Pagination',
dbConverter: () => ({data: []}),
id: 'emptyWithSlot'
},
content: {
empty: slots.empty
}
}
];
globalThis.renderComponents('b-virtual-scroll', scheme);
});
await h.bom.waitForIdleCallback(page);
for (let keys = Object.keys(components), i = 0; i < keys.length; i++) {
const key = keys[i];
nodes[key] = await h.dom.waitForEl(page, `#${key}`);
await nodes[key].evaluate((ctx) => ctx.style.display = '');
// eslint-disable-next-line require-atomic-updates
components[key] = await h.component.getComponentById(page, key);
}
});
describe('b-virtual-scroll slot empty', () => {
describe('does not render `empty slot`', () => {
it('if it is not set', async () => {
expect(await components.emptyNoSlot.evaluate((ctx) => Boolean(ctx.vdom.getSlot('empty')))).toBe(false);
expect(await h.dom.getRef(nodes.emptyNoSlot, 'empty')).toBeFalsy();
});
it('if there is data', async () => {
expect(await components.emptyWithData.evaluate((ctx) => Boolean(ctx.vdom.getSlot('empty')))).toBe(true);
expect(await nodes.emptyWithData.waitForSelector('#empty', {state: 'hidden'})).toBeFalsy();
});
});
describe('render `empty slot`', () => {
it('if it is set and there is no data', async () => {
expect(await components.emptyWithSlot.evaluate((ctx) => Boolean(ctx.vdom.getSlot('empty')))).toBe(true);
expect(await h.dom.getRef(nodes.emptyWithSlot, 'empty')).toBeTruthy();
});
});
});
};