36 lines
1.7 KiB
Markdown
36 lines
1.7 KiB
Markdown
# Testing
|
|
|
|
## Posture
|
|
|
|
**No formal test infrastructure.** No PHPUnit, no Pest, no `tests/` or `spec/` directories, no `phpunit.xml`, no `composer.json`. No CI pipeline (no `.github/workflows`).
|
|
|
|
## What exists
|
|
|
|
Manual debug scripts under [tmp/](tmp/) — developer-run, not automated:
|
|
|
|
| File | Purpose |
|
|
|---|---|
|
|
| `tmp/debug_clients.php` | Client sync verification |
|
|
| `tmp/debug_clients_remote.php`, `debug_clients_remote2.php` | Remote API checks |
|
|
| `tmp/debug_dup_products.php` | Duplicate product detection (currently uncommitted) |
|
|
| `tmp/debug_eligible_remote.php` | Eligibility checks |
|
|
| `tmp/debug_products_urls.php` | URL fetch verification |
|
|
| `tmp/campaign_alerts_debug.log` | Output log from alerts run |
|
|
| `tmp/meta_active_last30d.json`, `tmp/products_data_save.txt` | Test data snapshots |
|
|
|
|
These scripts contain **live database credentials** — see [concerns.md](concerns.md) for the security implication.
|
|
|
|
## Implicit "tests"
|
|
|
|
- `cron_sync_status` table acts as production-time integration check (phase progression).
|
|
- `logs` table provides audit trail for after-the-fact debugging.
|
|
- Settings keys `*_last_error` / `*_last_error_at` capture last failure per integration.
|
|
|
|
## Recommendations (if testing is introduced)
|
|
|
|
1. Adopt PHPUnit via Composer (also fixes the lack of dependency management).
|
|
2. Start with **factory** layer — it's the most testable (pure DB queries given a fixture DB).
|
|
3. Service layer needs HTTP client abstraction before the cURL calls can be tested without hitting live APIs.
|
|
4. Migrations are already partly idempotent — a CI job that runs `php install.php` against a scratch DB would be cheap insurance.
|
|
5. Move `tmp/debug_*.php` content into proper integration tests; delete the scripts.
|