Consolidate Reports and Data Entry apps into a single Vue.js SPA with: Architecture: - Module-based structure with lazy-loaded routes (@reports, @data-entry) - Error boundaries per module to prevent cascade failures - Dual API proxy in Vite for microservices (reports:8001, data-entry:8003) - Pinia store factories for shared auth, company, and period stores - Vite path aliases for clear module boundaries (@shared, @reports, @data-entry) Service Management: - Granular service control scripts (backend-reports.sh, backend-data-entry.sh, bot.sh, frontend.sh) - 87% faster frontend restart: 7s vs 53s full restart - 38% faster full startup: 33s vs 53s via parallel backend initialization - Enhanced start-dev.sh with proper service timeouts (OCR: 30s, Vite: 15s, Bot: 10s) - status.sh for comprehensive health checks Features: - Auto-select first company on login with period auto-load - Hamburger menu with feature toggle support - JWT token auto-injection via axios interceptors - Unified header with company/period selectors - IIS web.config for production deployment with multi-API routing UX Improvements: - Vue watchers for reactive company/period loading - Lazy store initialization with graceful error handling - Period persistence per user+company in localStorage - Feature flags for optional modules Deployment: - Single IIS site serves unified frontend with API proxy rules - Maintains separate backend processes for microservices - Windows line ending fixes (.env CRLF → LF conversion) Stats: 112 files changed, 38,342 insertions(+), 2,342 deletions(-) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
ROA2WEB Unified App - Integration Testing Checklist
Pre-Test Setup
- Stop any previously running services:
./start-test.sh stop - Verify SSH tunnel is configured:
./ssh-tunnel-test.sh status - Start all services:
./start-test.sh - Wait for all services to start (check logs if needed)
Service Health Checks
Backend Services
- Reports Backend (8001): http://localhost:8001/health
- Reports API Docs: http://localhost:8001/docs
- Data Entry Backend (8003): http://localhost:8003/health
- Data Entry API Docs: http://localhost:8003/docs
- Telegram Bot Internal API (8002): Should be running (check logs:
/tmp/telegram_bot.log)
Frontend
- Unified Frontend loads: http://localhost:3000
- No console errors in browser DevTools
- Login page displays correctly
Authentication Flow
Login
- Navigate to http://localhost:3000
- Should redirect to
/loginautomatically - Enter valid test credentials
- Login succeeds and redirects to dashboard
- User info displays in header (username, company selector)
- Access token stored in localStorage
- JWT contains correct user info and companies
Session Persistence
- Refresh page - user remains logged in
- Close tab and reopen - user remains logged in
- Open in new tab - user is already logged in
Reports Module (http://localhost:3000/reports)
Navigation
- Click "Rapoarte" in menu
- Dashboard loads at
/reports/dashboard - No console errors
- Company selector works (change company)
- Period selector works (change accounting period)
Dashboard Widgets
- Metrics cards display (Sales, Purchases, etc.)
- Charts render correctly
- Data loads from Reports API (8001)
- Check Network tab: requests go to
/api/reports/*
Reports Pages
- Navigate to "Facturi Clienți" (
/reports/invoices/sales) - Table loads with data
- Filters work (date range, company, status)
- Pagination works
- Export buttons work (Excel, PDF)
- Invoice details modal opens
- Navigate to "Facturi Furnizori" (
/reports/invoices/purchases) - Verify same functionality as sales invoices
Treasury Reports
- Navigate to "Trezorerie" (
/reports/treasury) - Cash flow data loads
- Charts display correctly
- Date filters work
Error Boundary Testing
- Manually trigger an error in Reports module (e.g., bad API call)
- ErrorBoundary catches the error
- Error message displays: "A apărut o eroare în modulul Rapoarte"
- Other modules (Data Entry) remain functional
Data Entry Module (http://localhost:3000/data-entry)
Navigation
- Click "Introduceri" in menu
- Receipts list loads at
/data-entry/receipts - No console errors
- Check Network tab: requests go to
/api/data-entry/*
Receipts List
- Table displays receipts
- Status badges display correctly (DRAFT, PENDING, APPROVED)
- Filters work (date range, status, user)
- Create new receipt button visible
Create Receipt
- Click "Adaugă Bon Fiscal"
- Form displays at
/data-entry/receipts/new - Partner/Supplier dropdown loads from Data Entry API
- Expense type dropdown works
- Date picker works
- Amount fields accept input
- File upload works (image/PDF)
- Save as DRAFT works
- Receipt appears in list with DRAFT status
Edit Receipt
- Click edit on a DRAFT receipt
- Form loads with existing data
- Modify fields
- Save changes - updates successfully
- Delete receipt - removes from list
Submit for Review
- Open a DRAFT receipt
- Click "Trimite spre aprobare"
- Status changes to PENDING_REVIEW
- Accounting entries auto-generated
- Receipt is read-only in PENDING state
Approval Workflow (Accountant Role)
- Login as accountant user
- See pending receipts
- Open PENDING receipt
- Review accounting entries
- Approve receipt - status changes to APPROVED
- Receipt becomes fully read-only
Error Boundary Testing
- Manually trigger an error in Data Entry module
- ErrorBoundary catches the error
- Error message displays: "A apărut o eroare în modulul Introduceri"
- Other modules (Reports) remain functional
Cross-Module Testing
Module Switching
- Start in Reports module
- Navigate to Data Entry module
- Return to Reports module
- Company selection persists across modules
- No console errors during switching
- No memory leaks (check DevTools Memory tab)
Shared State
- Login state shared (logout in one module logs out everywhere)
- Company selection shared (change company affects both modules)
- Period selection shared (for modules that use it)
API Isolation
- Reports module only calls
/api/reports/* - Data Entry module only calls
/api/data-entry/* - No cross-contamination of API calls
- Auth headers included in all requests
Logout Flow
- Click logout button in header
- User redirected to
/login - Access token removed from localStorage
- Cannot access protected routes without re-login
- Attempting to access
/reportsor/data-entryredirects to login
Browser Compatibility
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (if available)
Responsive Design
- Desktop (1920x1080)
- Laptop (1366x768)
- Tablet (768x1024)
- Mobile (375x667)
Performance
- Initial page load < 3s
- Navigation between modules smooth
- No unnecessary re-renders (check React DevTools)
- API responses cached appropriately
- Bundle sizes reasonable (check Network tab)
Build & Production
- Run
npm run build - Build completes without errors
- Dist folder created with proper structure
- index.html exists
- Assets folder has JS/CSS bundles
- Chunk splitting works (separate bundles for modules)
- Source maps generated (for debugging)
Cleanup
- Stop all services:
./start-test.sh stop - Verify all ports released (8001, 8003, 8002, 3000)
- SSH tunnel stopped
- No lingering processes
Issues Found
Document any issues discovered during testing:
| Issue | Module | Severity | Description | Status |
|---|---|---|---|---|
Sign-Off
- Tester: _______________
- Date: _______________
- Environment: TEST / DEV / PROD
- Status: PASS / FAIL / NEEDS FIXES
Notes
Additional observations or comments: