diff --git a/src/config/types.ts b/src/config/types.ts index 7844ef013a..6a319ef0c1 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -139,6 +139,7 @@ export type Config = { webpack?: (config: Configuration) => Configuration; }; collections?: CollectionConfig[]; + endpoints?: Endpoint[]; globals?: GlobalConfig[]; serverURL?: string; cookiePrefix?: string; diff --git a/test/collections-rest/Endpoints/index.ts b/test/collections-rest/Endpoints/index.ts deleted file mode 100644 index 4221883c11..0000000000 --- a/test/collections-rest/Endpoints/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Response } from 'express'; -import { CollectionConfig } from '../../../src/collections/config/types'; -import { openAccess } from '../../helpers/configHelpers'; -import { PayloadRequest } from '../../../src/express/types'; - -export const endpointsSlug = 'endpoints'; - -const Endpoints: CollectionConfig = { - slug: endpointsSlug, - access: openAccess, - endpoints: [ - { - path: '/say-hello/joe-bloggs', - method: 'get', - handler: (req: PayloadRequest, res: Response): void => { - res.json({ message: 'Hey Joey!' }); - }, - }, - { - path: '/say-hello/:group/:name', - method: 'get', - handler: (req: PayloadRequest, res: Response): void => { - res.json({ message: `Hello ${req.params.name} @ ${req.params.group}` }); - }, - }, - { - path: '/say-hello/:name', - method: 'get', - handler: (req: PayloadRequest, res: Response): void => { - res.json({ message: `Hello ${req.params.name}!` }); - }, - }, - { - path: '/whoami', - method: 'post', - handler: (req: PayloadRequest, res: Response): void => { - res.json({ - name: req.body.name, - age: req.body.age, - }); - }, - }, - ], - fields: [ - { - name: 'title', - type: 'text', - }, - ], -}; - -export default Endpoints; diff --git a/test/collections-rest/config.ts b/test/collections-rest/config.ts index 9e114549a6..e471b4499e 100644 --- a/test/collections-rest/config.ts +++ b/test/collections-rest/config.ts @@ -2,7 +2,6 @@ import type { CollectionConfig } from '../../src/collections/config/types'; import { devUser } from '../credentials'; import { buildConfig } from '../buildConfig'; import type { Post } from './payload-types'; -import Endpoints from './Endpoints'; export interface Relation { id: string; @@ -121,7 +120,6 @@ export default buildConfig({ }, ], }, - Endpoints, ], onInit: async (payload) => { await payload.create({ diff --git a/test/collections-rest/payload-types.ts b/test/collections-rest/payload-types.ts index c12c10847a..58116fe6d3 100644 --- a/test/collections-rest/payload-types.ts +++ b/test/collections-rest/payload-types.ts @@ -93,16 +93,6 @@ export interface CustomIdNumber { createdAt: string; updatedAt: string; } -/** - * This interface was referenced by `Config`'s JSON-Schema - * via the `definition` "endpoints". - */ -export interface Endpoint { - id: string; - title?: string; - createdAt: string; - updatedAt: string; -} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "users". diff --git a/test/dataloader/payload-types.ts b/test/dataloader/payload-types.ts new file mode 100644 index 0000000000..6a77cff1be --- /dev/null +++ b/test/dataloader/payload-types.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/** + * This file was automatically generated by Payload CMS. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +export interface Config {} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "posts". + */ +export interface Post { + id: string; + title: string; + owner?: string | User; + createdAt: string; + updatedAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: string; + email?: string; + resetPasswordToken?: string; + resetPasswordExpiration?: string; + loginAttempts?: number; + lockUntil?: string; + createdAt: string; + updatedAt: string; +} diff --git a/test/endpoints/config.ts b/test/endpoints/config.ts new file mode 100644 index 0000000000..ea94d8b413 --- /dev/null +++ b/test/endpoints/config.ts @@ -0,0 +1,80 @@ +import { Response } from 'express'; +import { devUser } from '../credentials'; +import { buildConfig } from '../buildConfig'; +import { openAccess } from '../helpers/configHelpers'; +import { PayloadRequest } from '../../src/express/types'; + +export const collectionSlug = 'endpoints'; +export const globalSlug = 'global-endpoints'; + +export const globalEndpoint = 'global'; + +export default buildConfig({ + collections: [ + { + slug: collectionSlug, + access: openAccess, + endpoints: [ + { + path: '/say-hello/joe-bloggs', + method: 'get', + handler: (req: PayloadRequest, res: Response): void => { + res.json({ message: 'Hey Joey!' }); + }, + }, + { + path: '/say-hello/:group/:name', + method: 'get', + handler: (req: PayloadRequest, res: Response): void => { + res.json({ message: `Hello ${req.params.name} @ ${req.params.group}` }); + }, + }, + { + path: '/say-hello/:name', + method: 'get', + handler: (req: PayloadRequest, res: Response): void => { + res.json({ message: `Hello ${req.params.name}!` }); + }, + }, + { + path: '/whoami', + method: 'post', + handler: (req: PayloadRequest, res: Response): void => { + res.json({ + name: req.body.name, + age: req.body.age, + }); + }, + }, + ], + fields: [ + { + name: 'title', + type: 'text', + }, + ], + }, + ], + globals: [ + { + slug: globalSlug, + endpoints: [{ + path: `/${globalEndpoint}`, + method: 'post', + handler: (req: PayloadRequest, res: Response): void => { + res.json(req.body); + }, + }], + fields: [], + }, + ], + onInit: async (payload) => { + await payload.create({ + collection: 'users', + data: { + email: devUser.email, + password: devUser.password, + }, + }); + }, +}); diff --git a/test/collections-rest/endpoints-int.spec.ts b/test/endpoints/int.spec.ts similarity index 52% rename from test/collections-rest/endpoints-int.spec.ts rename to test/endpoints/int.spec.ts index 05ae6a7c92..bf52ba0e9a 100644 --- a/test/collections-rest/endpoints-int.spec.ts +++ b/test/endpoints/int.spec.ts @@ -1,38 +1,48 @@ import { initPayloadTest } from '../helpers/configHelpers'; -import { endpointsSlug } from './Endpoints'; import { RESTClient } from '../helpers/rest'; -import { slug } from '../globals/config'; +import { collectionSlug, globalEndpoint, globalSlug } from './config'; require('isomorphic-fetch'); let client: RESTClient; -describe('Collections - Endpoints', () => { +describe('Endpoints', () => { beforeAll(async () => { const config = await initPayloadTest({ __dirname, init: { local: false } }); const { serverURL } = config; - client = new RESTClient(config, { serverURL, defaultSlug: slug }); + client = new RESTClient(config, { serverURL, defaultSlug: collectionSlug }); }); - describe('Endpoints', () => { + + describe('Collections', () => { it('should GET a static endpoint', async () => { - const { status, data } = await client.endpoint(`/${endpointsSlug}/say-hello/joe-bloggs`); + const { status, data } = await client.endpoint(`/${collectionSlug}/say-hello/joe-bloggs`); expect(status).toBe(200); expect(data.message).toStrictEqual('Hey Joey!'); }); it('should GET an endpoint with a parameter', async () => { const name = 'George'; - const { status, data } = await client.endpoint(`/${endpointsSlug}/say-hello/${name}`); + const { status, data } = await client.endpoint(`/${collectionSlug}/say-hello/${name}`); expect(status).toBe(200); expect(data.message).toStrictEqual(`Hello ${name}!`); }); it('should POST an endpoint with data', async () => { const params = { name: 'George', age: 29 }; - const { status, data } = await client.endpoint(`/${endpointsSlug}/whoami`, 'post', params); + const { status, data } = await client.endpoint(`/${collectionSlug}/whoami`, 'post', params); expect(status).toBe(200); expect(data.name).toStrictEqual(params.name); expect(data.age).toStrictEqual(params.age); }); }); + + describe('Globals', () => { + it('should call custom endpoint', async () => { + const params = { globals: 'response' }; + const { status, data } = await client.endpoint(`/globals/${globalSlug}/${globalEndpoint}`, 'post', params); + + expect(status).toBe(200); + expect(params).toMatchObject(data); + }); + }); }); diff --git a/test/endpoints/payload-types.ts b/test/endpoints/payload-types.ts new file mode 100644 index 0000000000..fee2200bda --- /dev/null +++ b/test/endpoints/payload-types.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/** + * This file was automatically generated by Payload CMS. + * DO NOT MODIFY IT BY HAND. Instead, modify your source Payload config, + * and re-run `payload generate:types` to regenerate this file. + */ + +export interface Config {} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "global-endpoints". + */ +export interface GlobalEndpoints { + id: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "endpoints". + */ +export interface Endpoint { + id: string; + title?: string; + createdAt: string; + updatedAt: string; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users". + */ +export interface User { + id: string; + email?: string; + resetPasswordToken?: string; + resetPasswordExpiration?: string; + loginAttempts?: number; + lockUntil?: string; + createdAt: string; + updatedAt: string; +} diff --git a/test/fields/payload-types.ts b/test/fields/payload-types.ts index 34c7857078..be91c47f53 100644 --- a/test/fields/payload-types.ts +++ b/test/fields/payload-types.ts @@ -40,6 +40,45 @@ export interface BlockField { blocks: ( | { text: string; + richText?: { + [k: string]: unknown; + }[]; + id?: string; + blockName?: string; + blockType: 'text'; + } + | { + number: number; + id?: string; + blockName?: string; + blockType: 'number'; + } + | { + subBlocks: ( + | { + text: string; + id?: string; + blockName?: string; + blockType: 'text'; + } + | { + number: number; + id?: string; + blockName?: string; + blockType: 'number'; + } + )[]; + id?: string; + blockName?: string; + blockType: 'subBlocks'; + } + )[]; + localizedBlocks: ( + | { + text: string; + richText?: { + [k: string]: unknown; + }[]; id?: string; blockName?: string; blockType: 'text'; @@ -188,6 +227,9 @@ export interface TabsField { blocks: ( | { text: string; + richText?: { + [k: string]: unknown; + }[]; id?: string; blockName?: string; blockType: 'text'; @@ -235,6 +277,7 @@ export interface TabsField { export interface TextField { id: string; text: string; + localizedText?: string; defaultFunction?: string; defaultAsync?: string; createdAt: string; @@ -292,6 +335,8 @@ export interface IndexedField { */ point?: [number, number]; }; + collapsibleLocalizedUnique?: string; + collapsibleTextUnique?: string; createdAt: string; updatedAt: string; } diff --git a/test/globals/config.ts b/test/globals/config.ts index 031db91751..e4cd5841ab 100644 --- a/test/globals/config.ts +++ b/test/globals/config.ts @@ -1,7 +1,5 @@ -import { Response } from 'express'; import { devUser } from '../credentials'; import { buildConfig } from '../buildConfig'; -import { PayloadRequest } from '../../src/express/types'; export const slug = 'global'; export const arraySlug = 'array'; @@ -31,13 +29,6 @@ export default buildConfig({ type: 'text', }, ], - endpoints: [{ - path: `/${globalsEndpoint}`, - method: 'post', - handler: (req: PayloadRequest, res: Response): void => { - res.json(req.body); - }, - }], }, { slug: arraySlug, diff --git a/test/globals/int.spec.ts b/test/globals/int.spec.ts index 847678c628..2a43ffefee 100644 --- a/test/globals/int.spec.ts +++ b/test/globals/int.spec.ts @@ -1,6 +1,6 @@ import { GraphQLClient } from 'graphql-request'; import { initPayloadTest } from '../helpers/configHelpers'; -import config, { arraySlug, englishLocale, globalsEndpoint, slug, spanishLocale } from './config'; +import config, { arraySlug, englishLocale, slug, spanishLocale } from './config'; import payload from '../../src'; import { RESTClient } from '../helpers/rest'; @@ -56,16 +56,6 @@ describe('globals', () => { expect(doc.array).toMatchObject(array); expect(doc.id).toBeDefined(); }); - - describe('Endpoints', () => { - it('should call custom endpoint', async () => { - const params = { globals: 'response' }; - const { status, data } = await client.endpoint(`/globals/${slug}/${globalsEndpoint}`, 'post', params); - - expect(status).toBe(200); - expect(params).toMatchObject(data); - }); - }); }); describe('local', () => {