Files
payloadcms/test/globals/int.spec.ts
2023-09-15 17:08:15 -04:00

229 lines
5.0 KiB
TypeScript

import { GraphQLClient } from 'graphql-request'
import payload from '../../packages/payload/src'
import { initPayloadTest } from '../helpers/configHelpers'
import { RESTClient } from '../helpers/rest'
import configPromise, {
accessControlSlug,
arraySlug,
englishLocale,
slug,
spanishLocale,
} from './config'
describe('globals', () => {
let serverURL
beforeAll(async () => {
const init = await initPayloadTest({ __dirname, init: { local: false } })
serverURL = init.serverURL
})
describe('REST', () => {
let client: RESTClient
beforeAll(async () => {
const config = await configPromise
client = new RESTClient(config, { serverURL, defaultSlug: slug })
})
it('should create', async () => {
const title = 'update'
const data = {
title,
}
const { status, doc } = await client.updateGlobal({ data })
expect(status).toEqual(200)
expect(doc).toMatchObject(data)
})
it('should read', async () => {
const title = 'read'
const data = {
title,
}
await client.updateGlobal({ data })
const { status, doc } = await client.findGlobal()
expect(status).toEqual(200)
expect(doc.globalType).toEqual(slug)
expect(doc).toMatchObject(data)
})
it('should update with localization', async () => {
const array = [
{
text: 'one',
},
]
const { status, doc } = await client.updateGlobal({
slug: arraySlug,
data: {
array,
},
})
expect(status).toBe(200)
expect(doc.array).toHaveLength(1)
expect(doc.array).toMatchObject(array)
expect(doc.id).toBeDefined()
})
})
describe('local', () => {
it('should save empty json objects', async () => {
const createdJSON: any = await payload.updateGlobal({
slug,
data: {
json: {
state: {},
},
},
})
expect(createdJSON.json.state).toEqual({})
})
it('should create', async () => {
const data = {
title: 'title',
}
const doc = await payload.updateGlobal({
slug,
data,
})
expect(doc).toMatchObject(data)
})
it('should read', async () => {
const title = 'read'
const data = {
title,
}
await payload.updateGlobal({
slug,
data,
})
const doc = await payload.findGlobal({
slug,
})
expect(doc.globalType).toEqual(slug)
expect(doc).toMatchObject(data)
})
it('should update with localization', async () => {
const localized = {
en: {
array: [
{
text: 'one',
},
],
},
es: {
array: [
{
text: 'uno',
},
],
},
}
await payload.updateGlobal({
slug: arraySlug,
locale: englishLocale,
data: {
array: localized.en.array,
},
})
await payload.updateGlobal({
slug: arraySlug,
locale: spanishLocale,
data: {
array: localized.es.array,
},
})
const en = await payload.findGlobal({
locale: englishLocale,
slug: arraySlug,
})
const es = await payload.findGlobal({
locale: spanishLocale,
slug: arraySlug,
})
expect(en).toMatchObject(localized.en)
expect(es).toMatchObject(localized.es)
})
it('should respect valid access query constraint', async () => {
const emptyGlobal = await payload.findGlobal({
slug: accessControlSlug,
overrideAccess: false,
})
expect(Object.keys(emptyGlobal)).toHaveLength(0)
await payload.updateGlobal({
slug: accessControlSlug,
data: {
enabled: true,
},
})
const hasAccess = await payload.findGlobal({
slug: accessControlSlug,
overrideAccess: false,
})
expect(hasAccess.title).toBeDefined()
})
})
describe('graphql', () => {
let client: GraphQLClient
beforeAll(async () => {
const config = await configPromise
const url = `${serverURL}${config.routes.api}${config.routes.graphQL}`
client = new GraphQLClient(url)
})
it('should create', async () => {
const title = 'graphql-title'
const query = `mutation {
updateGlobal(data: {title: "${title}"}) {
title
}
}`
const response = await client.request(query)
const doc = response.updateGlobal
expect(doc).toMatchObject({ title })
})
it('should read', async () => {
const data = {
title: 'updated graphql',
}
await payload.updateGlobal({
slug,
data,
})
const query = `query {
Global {
title
}
}`
const response = await client.request(query)
const doc = response.Global
expect(doc).toMatchObject(data)
})
})
})