fix: run queues via the /payload-jobs/run endpoint without workflows (#9509)

Fixes https://github.com/payloadcms/payload/discussions/9418 (the
`/api/payload-jobs/run` endpoint) when the config doesn't have any
`workflows` but only `tasks`
This commit is contained in:
Sasha
2024-11-25 17:57:51 +02:00
committed by GitHub
parent cae300e8e3
commit b96475b7b9
2 changed files with 43 additions and 5 deletions

View File

@@ -1,13 +1,25 @@
import type { Endpoint } from '../config/types.js'
import type { Endpoint, SanitizedConfig } from '../config/types.js'
import { runJobs, type RunJobsArgs } from './operations/runJobs/index.js'
const configHasJobs = (config: SanitizedConfig): boolean => {
if (!config.jobs) {
return false
}
if (config.jobs.tasks.length > 0) {
return true
}
if (Array.isArray(config.jobs.workflows) && config.jobs.workflows.length > 0) {
return true
}
return false
}
export const runJobsEndpoint: Endpoint = {
handler: async (req) => {
if (
!Array.isArray(req.payload.config.jobs.workflows) ||
!(req.payload.config.jobs?.workflows?.length > 0)
) {
if (!configHasJobs(req.payload.config)) {
return Response.json(
{
message: 'No jobs to run.',

View File

@@ -423,6 +423,32 @@ describe('Queues', () => {
expect(allSimples.docs[0].title).toBe('from single task')
})
it('can queue and run via the endpoint single tasks without workflows', async () => {
const workflowsRef = payload.config.jobs.workflows
delete payload.config.jobs.workflows
await payload.jobs.queue({
task: 'CreateSimple',
input: {
message: 'from single task',
},
})
await restClient.GET('/payload-jobs/run', {
headers: {
Authorization: `JWT ${token}`,
},
})
const allSimples = await payload.find({
collection: 'simple',
limit: 100,
})
expect(allSimples.totalDocs).toBe(1)
expect(allSimples.docs[0].title).toBe('from single task')
payload.config.jobs.workflows = workflowsRef
})
/*
// Task rollbacks are not supported in the current version of Payload. This test will be re-enabled when task rollbacks are supported once we figure out the transaction issues
it('transaction test against payload-jobs collection', async () => {