UNPKG

@v4fire/client

Version:

V4Fire client core library

170 lines (136 loc) 3.91 kB
// @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 {initRouter} = include('src/base/b-router/test/helpers/init'); /** * Generates common specs for all router engines of "simple usage" runners * * @param {Page} page * @param {'historyApiRouterEngine'|'inMemoryRouterEngine'} engineName */ module.exports.generateSimpleUsageCommonSpecs = function generateSimpleUsageCommonSpecs(page, engineName) { describe('common', () => { let root; beforeEach(async () => { root = await initRouter(page, engineName); }); it('checking the root', async () => { expect(await root.evaluate((ctx) => ctx.meta.params.root)).toBe(true); }); it('checking the `router` property', async () => { expect(await root.evaluate(({router}) => router.componentName)).toBe('b-router'); }); it('`push` a page by a route identifier', async () => { expect(await root.evaluate(async (ctx) => { await ctx.router.push('second'); return ctx.route.meta.content; })).toBe('Second page'); }); it('`push` a page by a path', async () => { expect(await root.evaluate(async (ctx) => { await ctx.router.push('/'); return ctx.route.meta.content; })).toBe('Main page'); }); it('checking the `activePage` property', async () => { expect(await root.evaluate(async (ctx) => { await ctx.router.push('second'); return ctx.activePage; })).toBe('second'); expect(await root.evaluate(async (ctx) => { await ctx.router.push('main'); return ctx.activePage; })).toBe('main'); }); it('updating of routes', async () => { expect(await root.evaluate(async (ctx) => { const {router} = ctx; const res = {}, oldRoutes = ctx.router.routes; await router.updateRoutes({ main: { path: '/', default: true, content: 'Dynamic main page' } }); res.dynamicPage = ctx.route.meta.content; router.routes = oldRoutes; router.routeStore = undefined; await router.initRoute('main'); res.restoredPage = ctx.route.meta.content; return res; })).toEqual({ dynamicPage: 'Dynamic main page', restoredPage: 'Main page' }); }); it('updating of a base path', async () => { expect(await root.evaluate(async (ctx) => { const {router} = ctx; const res = {}, oldRoutes = ctx.router.routes; await router.updateRoutes('/demo', '/demo/second', { main: { path: '/', default: true, content: 'Dynamic main page' }, second: { path: '/second', default: true, content: 'Dynamic second page' } }); res.dynamicPage = ctx.route.meta.content; router.basePath = '/'; router.routes = oldRoutes; router.routeStore = undefined; await router.initRoute('/'); res.restoredPage = ctx.route.meta.content; return res; })).toEqual({ dynamicPage: 'Dynamic second page', restoredPage: 'Main page' }); }); it('getting URL by a query', async () => { expect(await root.evaluate(({router}) => router.getRoutePath('second', {query: {bla: 1}}))) .toBe('/second?bla=1'); expect(await root.evaluate(({router}) => router.getRoutePath('/', {query: {bla: 1}}))) .toBe('/?bla=1'); }); it('getting route parameters by a query', async () => { const pageMeta = { name: 'main', page: 'main', path: '/', default: false, external: false, content: 'Main page' }; expect(await root.evaluate(({router}) => { const route = router.getRoute('main'); return route.meta; })).toEqual(pageMeta); expect(await root.evaluate(({router}) => { const route = router.getRoute('/'); return route.meta; })).toEqual(pageMeta); }); }); };