UNPKG

@websolutespa/payload-plugin-bowl

Version:

Bowl PayloadCms plugin of the BOM Repository

214 lines (213 loc) 9.49 kB
import { config, getTestConfig, PageCollection } from '@/test'; import { clearContext, endUsers, getContext, users } from '@websolutespa/test/payload'; import { v4 as uuid } from 'uuid'; import { afterAll, beforeAll, describe, expect, it } from 'vitest'; import { options } from '../../options'; const BASE_URL = 'https://www.example.com'; describe('route.service', ()=>{ let payload; let client; let userToken; let endUserToken; let apiKey; let testConfig; let query; beforeAll(async ()=>{ const context = await getContext(config); payload = context.payload; client = context.client; userToken = await client.getToken('users', users.admin); endUserToken = await client.getToken('end_users', endUsers.user); apiKey = users.api.apiKey; testConfig = await getTestConfig(client, userToken); query = `?market=${testConfig.documents.market.id}&locale=${options.defaultLocale}`; }); afterAll(async ()=>{ await clearContext(); }); describe('Payload config', ()=>{ it('should have a endpoint with "/route" path and method "get', ()=>{ expect(payload.config.endpoints.find((endpoint)=>endpoint.path === '/route' && endpoint.method === 'get')).toBeDefined(); }); it('should have a endpoint with "/route" path and method "post', ()=>{ expect(payload.config.endpoints.find((endpoint)=>endpoint.path === '/route' && endpoint.method === 'post')).toBeDefined(); }); }); describe('endpoint test requests', ()=>{ let pageDoc; beforeAll(async ()=>{ const { doc } = await client.post(PageCollection.slug, { title: uuid(), category: testConfig.documents.category.id, market: [ testConfig.documents.market.id ], useSplat: true, _status: 'published' }, { headers: { Authorization: `JWT ${userToken}` } }); pageDoc = await client.get(`/${PageCollection.slug}/${doc.id}${query}`, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); }); describe('/route post', ()=>{ it('should return a valid route for an exact route match', async ()=>{ console.log(pageDoc.href); const response = await client.post('route', { pathname: pageDoc.href, href: `${BASE_URL}${pageDoc.href}` }, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); expect(response).toBeDefined(); expect(response.id).toEqual(pageDoc.href); expect(response.splat).toBeUndefined(); }); it('should return a valid route for a route match with splat', async ()=>{ const splatSegment = '/' + uuid(); const response = await client.post('route', { pathname: pageDoc.href + splatSegment, href: `${BASE_URL}${pageDoc.href}${splatSegment}` }, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); expect(response).toBeDefined(); expect(response.id).toEqual(pageDoc.href); expect(response.splat).toEqual(splatSegment); }); it('should return 404 for a non existing route (without matching redirect)', async ()=>{ const pathname = '/' + uuid(); try { const response = await client.post('route', { pathname: pathname, href: `${BASE_URL}${pathname}` }, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); expect(response).toBeUndefined(); } catch (error) { expect(error).toBeDefined(); expect(error.status).toEqual(404); } }); describe('redirects', ()=>{ it('should return a valid redirect response for an exact redirect route match', async ()=>{ const redirectStatus = 301; const redirectFrom = '/from'; await client.post(options.slug.redirect, { status: redirectStatus, from: `${BASE_URL}${redirectFrom}`, to: '/to', isActive: true }, { headers: { Authorization: `JWT ${userToken}` } }); try { const response = await client.post('route', { pathname: redirectFrom, href: `${BASE_URL}${redirectFrom}` }, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); expect(response).toBeUndefined(); } catch (error) { expect(error).toBeDefined(); expect(error.status).toEqual(redirectStatus); } }); it('should return a valid redirect response for a redirect route match with wildcard', async ()=>{ const redirectStatus = 301; await client.post(options.slug.redirect, { status: redirectStatus, from: `${BASE_URL}/from/*`, to: '/to', isActive: true }, { headers: { Authorization: `JWT ${userToken}` } }); try { const response = await client.post('route', { pathname: '/from/xyz', href: `${BASE_URL}/from/xyz` }, { headers: { Authorization: `users API-Key ${users.api.apiKey}` } }); expect(response).toBeUndefined(); } catch (error) { expect(error).toBeDefined(); expect(error.status).toEqual(redirectStatus); } }); }); }); describe('/route get', ()=>{ describe('One market', ()=>{ it('should return one route for each locale', async ()=>{ const routes = await client.get(`/route?t=${uuid()}`, { headers: { Authorization: `JWT ${userToken}` } }); options.locales.forEach((locale)=>{ const code = typeof locale === 'string' ? locale : locale.code; expect(routes.find((route)=>route.locale === code)).toBeDefined(); }); }); it('should allow filtering via query params', async ()=>{ const routes = await client.get(`/route?t=${uuid()}&where[id][equals]=${pageDoc.href}`, { headers: { Authorization: `JWT ${userToken}` } }); expect(routes.length).toEqual(1); }); }); describe('Multiple markets', ()=>{ let marketDoc; beforeAll(async ()=>{ ({ doc: marketDoc } = await client.post(options.slug.market, { id: uuid(), title: uuid(), isActive: true }, { headers: { Authorization: `JWT ${userToken}` } })); }); it('should return one route for each market and locale', async ()=>{ const routes = await client.get(`route?t=${uuid()}&market=${marketDoc.id}`, { headers: { Authorization: `JWT ${userToken}` } }); options.locales.forEach((locale)=>{ const code = typeof locale === 'string' ? locale : locale.code; expect(routes.find((route)=>route.locale === code && route.market === testConfig.documents.market.id)).toBeDefined(); expect(routes.find((route)=>route.locale === code && route.market === marketDoc.id)).toBeDefined(); }); }); }); }); }); }); //# sourceMappingURL=route.service.test.js.map