Add unit testing infrastructure with Vitest

Set up Vitest for both server (Node + Supertest) and client (jsdom + React
Testing Library). Extract Express app into app.js for testability. Add example
tests covering bills validation, bills route CRUD, ThemeContext, and App nav
rendering. Update CLAUDE.md with testing docs and requirement to write tests
with features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 21:03:29 -04:00
parent 10f8debdf5
commit e9f5a48f2d
15 changed files with 3851 additions and 40 deletions

View File

@@ -1,42 +1,9 @@
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const path = require('path');
const healthRouter = require('./routes/health');
const configRouter = require('./routes/config');
const billsRouter = require('./routes/bills');
const paychecksRouter = require('./routes/paychecks');
const actualsRouter = require('./routes/actuals');
const oneTimeExpensesRouter = require('./routes/one-time-expenses');
const summaryRouter = require('./routes/summary');
const { router: financingRouter } = require('./routes/financing');
const app = require('./app');
const db = require('./db');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(cors());
app.use(express.json());
// API routes
app.use('/api', healthRouter);
app.use('/api', configRouter);
app.use('/api', billsRouter);
app.use('/api', paychecksRouter);
app.use('/api', actualsRouter);
app.use('/api', oneTimeExpensesRouter);
app.use('/api', summaryRouter);
app.use('/api', financingRouter);
// Serve static client files in production
const clientDist = path.join(__dirname, '../../client/dist');
app.use(express.static(clientDist));
// SPA fallback — send index.html for any unmatched route
app.get('*', (req, res) => {
res.sendFile(path.join(clientDist, 'index.html'));
});
(async () => {
await db.initialize();
app.listen(PORT, () => {