Files
COMERCIAL-GTI/task-10-report.md
T
Gustavo d330bb5ff0 Baseline commit of the existing Maquina Comercial Pessoal project
Tracks the app that was already in place (capture, treatment, outreach,
WhatsApp integration, server, frontend, tests, docs) so future feature
work can branch and use isolated worktrees.
2026-07-31 10:54:07 -03:00

84 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task 10: Real Browser Acceptance and Final Verification
## Files Created/Modified
| Action | File |
|--------|------|
| Modified | `package.json` (added `test:browser` script) |
| Created | `playwright.config.mjs` |
| Created | `tests/browser/server.mjs` |
| Created | `tests/browser/campaign-pilot.spec.mjs` |
## Test Results
### `npm test` — All Node tests: **370 passed, 0 failed**
- All server, campaign, outreach, message, schedule, worker, store, auth, WhatsApp manager, and integration tests pass.
### `npm run test:browser` — Playwright tests: **42 passed, 0 failed**
- **Desktop (1440×900):** 21/21 passed
- **Mobile (390×844):** 21/21 passed
- No console errors detected during any test.
### `npm audit --omit=dev` — **0 vulnerabilities**
## Test Coverage Summary
| Test Area | Status |
|-----------|--------|
| Login with seeded admin credentials | ✅ |
| Campaign cards (status, week, limit) | ✅ |
| Separate manual/automatic limits display | ✅ |
| Campaign prepare creates queue items | ✅ |
| Preview rows show server-rendered text | ✅ |
| Per-row removal works | ✅ |
| Approval flow (transactional, scheduled, campaign→ready) | ✅ |
| Pause with explicit reason | ✅ |
| Start on paused/ready campaign with scheduled items | ✅ |
| Stage classification via API | ✅ |
| Appointment/demo scheduling form | ✅ |
| Pending replies endpoint | ✅ |
| Metrics endpoint (segmento + variant filters) | ✅ |
| UI: Pending replies section visible | ✅ |
| UI: Stage classification section renders | ✅ |
| UI: Appointment form renders | ✅ |
| UI: Metrics section with filter selects | ✅ |
| Fake provider send count remains zero | ✅ |
| Mobile viewport: cards visible, full-width controls | ✅ |
## Smoke Check Instructions
### 1. Migration v15 Verification
Start the app with `npm start`. Check `schema_migrations` table has version 15:
```sql
SELECT MAX(version) FROM schema_migrations;
```
### 2. Server-Restart Campaign Pause
Start the app, go to Campanhas tab. Verify all 3 campaigns show as `Pausada`. Hover the pause reason chip to confirm no unexpected text.
### 3. WhatsApp Status Display
Open Configurações. The WhatsApp connection state chip will show `Parado` initially. Click "Conectar / gerar QR" only when ready to pair a device.
### 4. Campaign Preview
In Campanhas tab, click "Preparar fila" on any campaign card. The queue table should appear with rendered messages and selection reasons.
### 5. Manual/Automatic Counters
Each campaign card shows `Manual: 0/10` and `Automático: 0/10`. These increment independently — manual sends count toward `Manual` only, campaign sends count toward `Automático` only.
### 6. Queue Approval
After preparing, select items and click "Aprovar fila". Approved items become `scheduled` and remaining preview items are cancelled with reason `removed_by_operator`. Campaign status changes to `Pronta`.
### 7. Pending-Reply UI
The "Respostas pendentes" section lists leads classified as `respondeu`. Use the "Classificar" button to move leads through the commercial funnel stages.
### 8. Mobile Layout
Open DevTools (F12) and toggle device toolbar (Ctrl+Shift+M). Select a mobile viewport (390×844). Verify:
- Campaign cards stack vertically
- Tables scroll horizontally
- Controls are full-width
- No layout breakage
## Safety Confirmation
- **Real provider never contacted**: All 42 browser tests use a fake WhatsApp manager that records send attempts in memory. Zero real sends occurred (asserted in test).
- **Isolated database**: Each test run uses a temporary SQLite database created via `fs.mkdtempSync` and deleted on teardown.