Ctrl K
ComunidadGuías…

CLOUDFLARE_TESTING.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Cloudflare Workers Testing Guide

This guide explains how to run tests against Cloudflare Workers instead of
Supabase Edge Functions.

## Overview

By default, tests run against Supabase Edge Functions
(`supabase functions serve`). However, since production primarily uses
Cloudflare Workers, you can now run tests directly against local Cloudflare
Workers to ensure compatibility.

## Architecture

The application has three Cloudflare Workers:

1. **API Worker** (port 8787): Handles most API endpoints
   - `/bundle`, `/app`, `/device`, `/channel`, `/apikey`, `/organization`,
     `/statistics`
   - Private endpoints: `/private/*`
   - Trigger endpoints for cron jobs and database triggers

2. **Plugin Worker** (port 8788): Handles plugin-specific endpoints
   - `/updates`, `/channel_self`, `/stats`, `/ok`, `/latency`

3. **Files Worker** (port 8789): Handles file operations
   - File upload and download

## Prerequisites

1. Supabase must be running: `supabase start`
2. Database must be seeded: `supabase db reset`
3. Environment variables must be configured in `cloudflare_workers/.env.local`
   Note: `./scripts/start-cloudflare-workers.sh` overrides the Supabase keys at runtime using `supabase status` to match your local instance, and also sets Cloudflare-local defaults like `CLOUDFLARE_FUNCTION_URL`.
## Testing Modes

The workers support two testing modes:

### PostgreSQL

- Tests the traditional PostgreSQL code path
- Simpler and faster for basic testing

## Running Tests

### Option 1: Manual Setup (Recommended for Development)

1. Start the Cloudflare Workers:

   ```bash
   ./scripts/start-cloudflare-workers.sh
   ```

   This will start all three workers in the background. Press Ctrl+C to stop
   them.

   `wrangler dev` refuses a `compatibility_date` that is still in the future, so this script runs Wrangler with `--compatibility-date` set to today in UTC (override with `WRANGLER_DEV_COMPATIBILITY_DATE`). Deployed Workers still use the date in each `wrangler.jsonc`.

2. In another terminal, run the tests:
   ```bash
   bun test:cloudflare:all
   ```

### Option 2: Individual Test Suites

You can run specific test suites:

```bash
# Run all Cloudflare tests (excluding CLI tests)
bun test:cloudflare:backend

# Run only update-related tests
bun test:cloudflare:updates
```

### Option 3: Quick Test (Single Command)

For a quick test run without keeping workers alive:

```bash
# Start workers in background, run tests, then stop workers
./scripts/start-cloudflare-workers.sh &
WORKERS_PID=$!
sleep 5
bun test:cloudflare:all
kill $WORKERS_PID
```

## Environment Variables

The Cloudflare Worker tests use the following environment variables (set
automatically by `vitest.config.cloudflare.ts`):

- `USE_CLOUDFLARE_WORKERS=true` - Enables Cloudflare Worker mode
- `CLOUDFLARE_API_URL=http://127.0.0.1:8787` - API Worker URL
- `CLOUDFLARE_PLUGIN_URL=http://127.0.0.1:8788` - Plugin Worker URL
- `CLOUDFLARE_FILES_URL=http://127.0.0.1:8789` - Files Worker URL

## How It Works

The test utilities (`tests/test-utils.ts`) automatically route requests to the
correct worker:

- Plugin endpoints (`/updates`, `/channel_self`, `/stats`) → Plugin Worker
  (8788)
- All other endpoints → API Worker (8787)

This is done via the `getEndpointUrl()` helper function which determines the
correct worker based on the endpoint path.

## Differences from Supabase Edge Functions

1. **Port Configuration**: Cloudflare Workers run on different ports (8787,
   8788, 8789)
2. **Environment Loading**: Uses `cloudflare_workers/.env.local` instead of
   Supabase secrets
3. **Runtime**: Uses Cloudflare Workers runtime instead of Deno
4. **Worker Separation**: API and Plugin endpoints are handled by separate
   workers

## Troubleshooting

### Workers won't start

```bash
# Check if ports are already in use
lsof -i :8787
lsof -i :8788
lsof -i :8789

# Kill any existing wrangler processes
pkill -f "wrangler dev"
```

### Tests timeout

- Ensure Supabase is running: `supabase status`
- Check workers are responding:
  ```bash
  curl http://127.0.0.1:8787/ok
  curl http://127.0.0.1:8788/ok
  ```

### Database connection issues

- Verify `internal/cloudflare/.env.local` has correct database credentials
- Reset database: `supabase db reset`

## CI/CD Integration

To run Cloudflare Worker tests in CI:

```yaml
- name: Start Supabase
  run: supabase start

- name: Start Cloudflare Workers
  run: ./scripts/start-cloudflare-workers.sh &

- name: Wait for workers
  run: sleep 5

- name: Run tests
  run: bun test:cloudflare:all

- name: Stop workers
  run: pkill -f "wrangler dev"
```

## Development Tips

1. **Keep workers running**: Start workers once and run tests multiple times for
   faster iteration
2. **Watch mode**: Wrangler supports hot reload, changes to backend code will
   automatically restart workers
3. **Debug mode**: Add `--log-level debug` to wrangler commands in the start
   script for verbose logging
4. **Separate terminal**: Run workers in a dedicated terminal to see logs in
   real-time