mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 18:41:08 +02:00
Implement rock-solid automated testing infrastructure for mana-core-auth with daily execution, notifications, and comprehensive monitoring. Test Suite Improvements: - Fix all 36 failing BetterAuthService tests (missing service mocks) - Add 21 JwtAuthGuard tests achieving 100% statement coverage - Create silentError helper to suppress intentional error logs - Fix Todo backend TaskService test structure - Add jose mock for JWT testing - Configure jest collectCoverageFrom for mana-core-auth GitHub Actions Workflow: - Daily automated test execution (2 AM UTC + manual trigger) - Matrix parallelization across 6 backend services - PostgreSQL and Redis service containers - Coverage enforcement (80% threshold) - Multi-channel notifications (Discord, Slack, GitHub Issues) - Support for success notifications (opt-in) Test Infrastructure: - Coverage aggregation across multiple services - Flaky test detection with 30-run history tracking - Performance metrics tracking with regression detection - Test data seeding and cleanup scripts - Comprehensive test reporting with formatted metrics Documentation: - TESTING_GUIDE.md (4000+ words) - Complete testing documentation - AUTOMATED_TESTING_SYSTEM.md - System architecture and workflows - DISCORD_NOTIFICATIONS_SETUP.md - Discord webhook setup guide - TESTING_DEPLOYMENT_CHECKLIST.md - Pre-deployment verification - TESTING_QUICK_REFERENCE.md - Quick command reference Final Result: - 180/180 tests passing (100% pass rate) - Zero console errors in test output - Automated daily testing with rich notifications - Production-ready test infrastructure
4.4 KiB
4.4 KiB
Testing Quick Reference
Fast reference guide for common testing tasks in the ManaCore monorepo.
Quick Commands
Run Tests
# All tests
pnpm test
# Specific service
cd services/mana-core-auth && pnpm test
# With coverage
pnpm test:cov
# Watch mode
pnpm test:watch
# Specific file
pnpm test src/auth/auth.service.spec.ts
Run Tests with Script
# All packages
./scripts/run-tests-with-coverage.sh
# Specific package
./scripts/run-tests-with-coverage.sh mana-core-auth
./scripts/run-tests-with-coverage.sh chat-backend
Setup/Cleanup
# Start Docker services
pnpm docker:up
# Seed test data
./scripts/test-data/seed-test-data.sh
# Clean test data
./scripts/test-data/cleanup-test-data.sh
# Stop Docker
pnpm docker:down
Test Patterns
Unit Test Template (Backend)
import { Test } from '@nestjs/testing';
import { MyService } from './my.service';
describe('MyService', () => {
let service: MyService;
beforeEach(async () => {
const module = await Test.createTestingModule({
providers: [MyService],
}).compile();
service = module.get<MyService>(MyService);
});
it('should do something', () => {
const result = service.doSomething();
expect(result).toBe(expected);
});
});
Integration Test Template
describe('Integration Test', () => {
let app: INestApplication;
beforeAll(async () => {
const module = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = module.createNestApplication();
await app.init();
});
afterAll(async () => {
await app.close();
});
it('should complete flow', async () => {
// Test full flow
});
});
Mock Template
// Mock entire module
jest.mock('./external-service', () => ({
ExternalService: jest.fn().mockImplementation(() => ({
method: jest.fn().mockResolvedValue(mockData),
})),
}));
// Mock specific function
jest.spyOn(service, 'method').mockResolvedValue(mockData);
Coverage
View Coverage
# Generate report
pnpm test:cov
# Open HTML report (macOS)
open coverage/lcov-report/index.html
# Open HTML report (Linux)
xdg-open coverage/lcov-report/index.html
Coverage Thresholds
- Global: 80% minimum
- Critical paths: 100% required
- Check in CI: Automated daily tests
Test Data
Pre-seeded Users
| Password | Role | |
|---|---|---|
test-user-1@example.com |
TestPassword123! |
user |
test-user-2@example.com |
TestPassword123! |
user |
admin@example.com |
AdminPassword123! |
admin |
Create Test User
const testUser = {
id: uuid(),
email: `test-${Date.now()}@example.com`,
name: 'Test User',
role: 'user',
};
Troubleshooting
Database Connection Failed
# 1. Start Docker
pnpm docker:up
# 2. Verify running
docker ps | grep postgres
# 3. Test connection
psql -U manacore -h localhost -p 5432 -d manacore
Tests Fail in CI but Pass Locally
- Check environment variables
- Verify database setup in workflow
- Check for hardcoded paths
- Review Docker service health checks
Flaky Tests
- Ensure proper
awaitusage - Check test isolation
- Mock time-dependent functions
- Add explicit waits
// ❌ Flaky
it('should complete', () => {
asyncOperation();
expect(result).toBeDefined();
});
// ✅ Stable
it('should complete', async () => {
await asyncOperation();
expect(result).toBeDefined();
});
CI/CD
Trigger Daily Tests Manually
- Go to GitHub Actions
- Select "Daily Tests" workflow
- Click "Run workflow"
- Set optional parameters
- Run
View Test Results
- Workflow Runs: GitHub Actions tab
- Coverage: Download artifacts from workflow
- Metrics: Check test-metrics artifact
- Flaky Tests: Check flaky-test-report artifact
Best Practices
DO ✅
- Write tests for new features
- Use descriptive names
- Keep tests isolated
- Mock external services
- Run locally before push
- Maintain 80%+ coverage
DON'T ❌
- Skip tests
- Use vague names
- Depend on test order
- Make real API calls
- Hardcode values
- Commit failing tests
Getting Help
- Docs:
/Users/wuesteon/dev/mana_universe/manacore-monorepo/docs/TESTING_GUIDE.md - Examples:
/Users/wuesteon/dev/mana_universe/manacore-monorepo/docs/test-examples/ - Issues: Label with
testingon GitHub - Team: Ask in #testing Slack channel