> ## Documentation Index
> Fetch the complete documentation index at: https://launchpad.datalumina.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Testing Your Workflow

> Run workflows locally before involving the full API + Celery stack

Test locally first. Each reference workflow ships with a playground script and a matching set of request examples so you can validate logic without running the full API stack.

## Local Testing Setup

* **Request examples**: each workflow keeps its fixtures under `app/launchpad/workflows/<name>/request_examples/`. For the quickstart, the files are in `app/launchpad/workflows/examples/quickstart/request_examples/` — `invoice.json`, `policy_question.json`, `product.json`, `prompt_injection.json`, `refund.json`, `service_desk.json`, and `spam.json`.
* **Playground scripts**: one-per-workflow scripts in `playground/` that load a fixture, run the workflow in-process, and print the final `TaskContext`.

## Running the quickstart playground

```bash theme={null}
uv run playground/quickstart.py
```

The script is roughly:

```python theme={null}
event_path = project_root / "app/launchpad/workflows/examples/quickstart/request_examples/invoice.json"
with open(event_path) as f:
    event = json.load(f)

workflow = WorkflowRegistry.QUICKSTART.value()
output = workflow.run(event)
print(output.model_dump_json(indent=2))
```

Swap the `event_path` filename to exercise any of the other fixtures.

## Benefits of local testing

### Immediate feedback

You see results instantly without waiting for async processing or checking databases.

### Easy debugging

Add breakpoints and step through your workflow logic in your IDE.

### No extra dependencies

You can test without running Celery workers or the full Supabase stack — only the services the workflow itself needs (for example, the quickstart does not need the database).

### Rapid iteration

Modify and test workflow logic quickly without restarting services.

## Adding your own test events

<Steps>
  <Step title="Create a JSON fixture">
    Add a new file to `app/launchpad/workflows/<name>/request_examples/` with your test payload.
  </Step>

  <Step title="Match the event schema">
    Ensure the JSON structure matches the workflow's `event_schema` exactly — `Workflow.run()` parses it with `event_schema(**event)` and will surface validation errors.
  </Step>

  <Step title="Point the playground at it">
    Update `event_path` in the matching `playground/<name>.py` script (or run a quick one-off Python snippet).
  </Step>
</Steps>
