twentyhq/twenty · warning · Error

Test workflow is not supported for database event triggers

Error message

Test workflow is not supported for database event triggers

What it means

Thrown by getTestPayloadFromTrigger when a workflow's trigger type is DATABASE_EVENT. The Twenty workflow engine cannot synthesize a test payload for database event triggers (record created/updated/deleted) because such events depend on actual workspace data mutations. MANUAL and CRON return undefined (no payload needed), WEBHOOK returns its expectedBody, but DATABASE_EVENT has no meaningful static payload.

Source

Thrown at packages/twenty-front/src/modules/workflow/workflow-trigger/utils/getTestPayloadFromTrigger.ts:20

import { assertUnreachable } from 'twenty-shared/utils';

export const getTestPayloadFromTrigger = (
  trigger: WorkflowTrigger,
): Record<string, unknown> | undefined => {
  switch (trigger.type) {
    case 'MANUAL':
    case 'CRON': {
      return undefined;
    }
    case 'WEBHOOK': {
      if (trigger.settings.httpMethod === 'POST') {
        return trigger.settings.expectedBody;
      }

      return undefined;
    }
    case 'DATABASE_EVENT': {
      throw new Error(
        'Test workflow is not supported for database event triggers',
      );
    }
    default: {
      return assertUnreachable(trigger, 'Unknown trigger type');
    }
  }
};

View on GitHub (pinned to 1f5dd2bbd2)

Solutions

  1. Hide or disable the 'Test workflow' button in the UI when the trigger type is DATABASE_EVENT.
  2. Filter the trigger type before calling: skip getTestPayloadFromTrigger for DATABASE_EVENT triggers.
  3. To actually test a database-event workflow, create or update a real record in the workspace that matches the trigger conditions.

Example fix

// before
const payload = getTestPayloadFromTrigger(trigger);
runTestWorkflow(payload);

// after
if (trigger.type === 'DATABASE_EVENT') {
  showToast('Database event workflows cannot be test-run. Create or update a record to trigger this workflow.');
  return;
}
const payload = getTestPayloadFromTrigger(trigger);
runTestWorkflow(payload);
Defensive patterns

Strategy: validation

Validate before calling

const canTestTrigger = (trigger: WorkflowTrigger): boolean => {
  return trigger.type !== 'DATABASE_EVENT';
};

if (!canTestTrigger(trigger)) {
  showToast('Database event workflows cannot be test-run manually.');
  return;
}

Type guard

const isDatabaseEventTrigger = (
  trigger: WorkflowTrigger,
): trigger is WorkflowTrigger & { type: 'DATABASE_EVENT' } => {
  return trigger.type === 'DATABASE_EVENT';
};

Try / catch

try {
  const payload = getTestPayloadFromTrigger(trigger);
} catch (error) {
  if (error instanceof Error && error.message.includes('DATABASE_EVENT')) {
    // Disable test button for database event triggers
    return;
  }
  throw error;
}

Prevention

When it happens

Trigger: Calling getTestPayloadFromTrigger(trigger) where trigger.type === 'DATABASE_EVENT'. This happens when a user clicks a 'Test workflow' / 'Run test' button in the workflow builder UI for a workflow whose trigger is configured as a database event.

Common situations: A developer builds a workflow triggered on 'company created' and tries to test-run it from the builder. The UI should hide or disable the test button for DATABASE_EVENT triggers; if it doesn't, this error surfaces.

Related errors


AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12). Data as JSON: /api/errors/a6bc0ca1eb7f846e. Report an issue: GitHub.