Files
fuel-price/testing.md
Ovidiu U 02d4c9d888
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Add comprehensive project documentation and architecture guidelines
Establishes core rules and conventions for the FuelAlert Laravel application: architecture patterns (fat services, thin controllers), database schema with partitioned station_prices table, multi-tier notification system with Vonage and OneSignal, 4-signal scoring engine for fuel price recommendations, Stripe subscription tiers, Livewire classic component structure, and Pest testing standards.
2026-04-03 16:49:19 +01:00

49 lines
1.4 KiB
Markdown

# Testing
## Framework
Pest PHP. Never use PHPUnit test classes directly — always Pest syntax.
## Test structure
```
tests/
├── Feature/
│ ├── Scoring/AlertScoringServiceTest.php
│ ├── Notifications/NotificationDispatchTest.php
│ ├── Payments/SubscriptionTest.php
│ └── Livewire/DashboardTest.php
└── Unit/
├── Services/FuelPriceServiceTest.php
└── Services/StationTaggingServiceTest.php
```
## Conventions
- Use `RefreshDatabase` trait on Feature tests
- Factory-first: all test data via Eloquent factories — never raw DB inserts
- Mock external APIs (Fuel Finder, Vonage, OneSignal, FRED) — never hit live APIs in tests
- Use `Http::fake()` for all outbound HTTP in tests
- Stripe: use Cashier's built-in test helpers, never hit Stripe API in tests
## What to test
- AlertScoringService: all signal combinations, confidence thresholds, no_signal cases
- NotificationDispatchService: correct channels returned per tier
- SubscriptionService: tier detection, SMS limit counting
- Livewire components: use `Livewire::test()` for interaction testing
- Stripe webhooks: test `customer.subscription.deleted` downgrades user correctly
## Running tests
```bash
php artisan test # Full suite
php artisan test --filter=Scoring # Single test class
php artisan test --parallel # Parallel (faster)
```
---
paths:
- "tests/**/*.php"
---