Backend (@backend-dev): - Add ReportService with PDF/CSV generation (reportlab, pandas) - Implement Report API endpoints (POST, GET, DELETE, download) - Add ReportRepository and schemas - Configure storage with auto-cleanup (30 days) - Rate limiting: 10 downloads/minute - Professional PDF templates with charts support Frontend (@frontend-dev): - Integrate Recharts for data visualization - Add CostBreakdown, TimeSeries, ComparisonBar charts - Implement scenario comparison page with multi-select - Add dark/light mode toggle with ThemeProvider - Create Reports page with generation form and list - Add new UI components: checkbox, dialog, tabs, label, skeleton - Implement useComparison and useReports hooks QA (@qa-engineer): - Setup Playwright E2E testing framework - Create 7 test spec files with 94 test cases - Add visual regression testing with baselines - Configure multi-browser testing (Chrome, Firefox, WebKit) - Add mobile responsive tests - Create test fixtures and helpers - Setup GitHub Actions CI workflow Documentation (@spec-architect): - Create detailed kanban-v0.4.0.md with 27 tasks - Update progress.md with v0.4.0 tracking - Create v0.4.0 planning prompt Features: ✅ PDF/CSV Report Generation ✅ Interactive Charts (Pie, Area, Bar) ✅ Scenario Comparison (2-4 scenarios) ✅ Dark/Light Mode Toggle ✅ E2E Test Suite (94 tests) Dependencies added: - Backend: reportlab, pandas, slowapi - Frontend: recharts, date-fns, @radix-ui/react-checkbox/dialog/tabs - Testing: @playwright/test 27 tasks completed, 100% v0.4.0 implementation
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* Global Setup for Playwright E2E Tests
|
|
*
|
|
* This runs once before all test suites.
|
|
* Used for:
|
|
* - Database seeding
|
|
* - Test environment preparation
|
|
* - Creating test data
|
|
*/
|
|
|
|
import { execSync } from 'child_process';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
|
|
async function globalSetup() {
|
|
console.log('🚀 Starting E2E test setup...');
|
|
|
|
// Ensure test data directories exist
|
|
const testDataDir = path.join(__dirname, 'fixtures');
|
|
if (!fs.existsSync(testDataDir)) {
|
|
fs.mkdirSync(testDataDir, { recursive: true });
|
|
}
|
|
|
|
// Ensure screenshots directory exists
|
|
const screenshotsDir = path.join(__dirname, 'screenshots');
|
|
if (!fs.existsSync(screenshotsDir)) {
|
|
fs.mkdirSync(screenshotsDir, { recursive: true });
|
|
}
|
|
|
|
// Ensure baseline directory exists for visual regression
|
|
const baselineDir = path.join(screenshotsDir, 'baseline');
|
|
if (!fs.existsSync(baselineDir)) {
|
|
fs.mkdirSync(baselineDir, { recursive: true });
|
|
}
|
|
|
|
// Store test start time for cleanup tracking
|
|
const testStartTime = new Date().toISOString();
|
|
process.env.TEST_START_TIME = testStartTime;
|
|
|
|
console.log('✅ E2E test setup complete');
|
|
console.log(` Test started at: ${testStartTime}`);
|
|
}
|
|
|
|
export default globalSetup;
|