docs: map existing codebase

This commit is contained in:
2026-02-15 21:49:31 +01:00
parent e629a20cec
commit 348330af4b
7 changed files with 1503 additions and 0 deletions
+214
View File
@@ -0,0 +1,214 @@
# Testing Patterns
**Analysis Date:** 2026-02-15
## Test Framework
**Runner:**
- Not detected - no test runner configured in package.json
- No Vitest, Jest, Mocha, or other test framework installed
- No test scripts in `package.json` for either frontend or backend
**Assertion Library:**
- Not installed - no testing dependencies found
**Run Commands:**
- No test commands available
- Frontend: `npm run dev`, `npm run build`, `npm run preview`
- Backend: `npm start`, `npm run dev` (nodemon)
## Test File Organization
**Location:**
- No test files found in project
- No `.test.js`, `.spec.js`, `.test.jsx`, or `.spec.jsx` files in source directories
- No `__tests__` directories present
**Naming:**
- Not applicable - no tests exist
**Structure:**
- Not applicable - no tests exist
## Current Test Status
**Coverage:**
- Not tested - zero test files, no coverage tooling
- No test requirements or targets defined
- No test configuration files (vitest.config.*, jest.config.*, etc.)
**View Coverage:**
- Not applicable - no coverage tools present
## Testing Gaps
### High Priority
**Authentication Flow:**
- Location: `frontend/src/context/AuthContext.jsx`, `frontend/src/pages/LoginPage.jsx`, `frontend/src/pages/RegisterPage.jsx`, `backend/src/index.js` (routes)
- Missing: Token validation, login/register error handling, token expiration, protected route behavior
- Risk: Auth system could silently fail or allow unauthorized access
**Workout Logging:**
- Location: `frontend/src/App.jsx` (logSet function), `backend/src/index.js` (POST /api/logs)
- Missing: Set creation/update, duplicate handling, weight/reps validation, concurrent updates
- Risk: Incorrect workout data, lost entries, or duplicate logs
**API Error Handling:**
- Location: All fetch calls in `frontend/src/**`, all route handlers in `backend/src/index.js`
- Missing: Network failures, timeout handling, malformed responses, edge cases
- Risk: Silent failures, infinite loading states, unhandled exceptions
### Medium Priority
**Profile Management:**
- Location: `frontend/src/pages/ProfilePage.jsx`, `frontend/src/pages/OnboardingWizard.jsx`, `backend/src/index.js` (user routes)
- Missing: Profile updates, measurements tracking, strength tracking, optional field handling
- Risk: Lost user data, incorrect profile state
**Program Navigation:**
- Location: `frontend/src/pages/Dashboard.jsx`, `frontend/src/App.jsx`, `backend/src/index.js` (program routes)
- Missing: Week/day navigation, today's workout calculation, day cycling logic
- Risk: Wrong workout shown, incorrect day assignments
**Data Validation:**
- Location: All form submissions (Login, Register, Profile updates), API inputs
- Missing: Email format validation, password requirements, numeric field bounds, null checks
- Risk: Invalid data persisted, server errors, SQL injection (though using parameterized queries)
### Low Priority
**UI State Management:**
- Location: `frontend/src/App.jsx`, `frontend/src/pages/Dashboard.jsx`
- Missing: View transitions, state consistency between pages, race conditions in state updates
- Risk: Inconsistent UI, stale data display
**Warmup Tracking:**
- Location: `frontend/src/pages/WorkoutPage.jsx`
- Missing: Warmup completion tracking, persistence, session state
- Risk: Lost warmup progress on page reload
## Recommended Testing Strategy
### Phase 1: Core Functionality
1. **Auth Integration Tests**
- Register → Login → Protected Route → Logout flow
- Error cases (invalid credentials, duplicate email)
- Token persistence across page reloads
2. **Workout Logging Integration Tests**
- Log set → Verify in state → Verify in API
- Update existing log vs create new
- Progression calculation
3. **API Unit Tests**
- Backend route handlers with mocked database
- Error handling (400, 401, 404, 500 status codes)
- Database constraint handling (duplicate email, foreign keys)
### Phase 2: Data Integrity
1. Form validation tests (Login, Register, Profile, Measurements)
2. Profile update consistency tests
3. Program/day/exercise relationship tests
### Phase 3: UI/UX
1. Component rendering tests (pages, conditional displays)
2. State transition tests (view changes, navigation)
3. Loading/error states display
## Testing Patterns (When Tests Are Added)
### Frontend (React) Pattern
```javascript
// Expected pattern for future tests
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { BrowserRouter } from 'react-router-dom';
import { AuthProvider } from '../context/AuthContext';
import LoginPage from '../pages/LoginPage';
describe('LoginPage', () => {
it('should submit login form with valid credentials', async () => {
render(
<BrowserRouter>
<AuthProvider>
<LoginPage />
</AuthProvider>
</BrowserRouter>
);
fireEvent.change(screen.getByPlaceholderText('E-post'), { target: { value: 'test@example.com' } });
fireEvent.change(screen.getByPlaceholderText('Lösenord'), { target: { value: 'password123' } });
fireEvent.click(screen.getByText('Logga in'));
await waitFor(() => {
expect(screen.queryByText('Loggar in...')).not.toBeInTheDocument();
});
});
});
```
### Backend (Express) Pattern
```javascript
// Expected pattern for future tests
const request = require('supertest');
const app = require('../index');
describe('POST /api/auth/login', () => {
it('should return 401 for invalid credentials', async () => {
const res = await request(app)
.post('/api/auth/login')
.send({ email: 'test@example.com', password: 'wrong' });
expect(res.status).toBe(401);
expect(res.body).toHaveProperty('error');
});
it('should return token for valid credentials', async () => {
const res = await request(app)
.post('/api/auth/login')
.send({ email: 'test@example.com', password: 'correct' });
expect(res.status).toBe(200);
expect(res.body).toHaveProperty('token');
expect(res.body).toHaveProperty('user');
});
});
```
## Setup Recommendations
**Install testing dependencies:**
```bash
# Frontend
npm install --save-dev @testing-library/react @testing-library/jest-dom vitest
# Backend
npm install --save-dev supertest jest
```
**Create config files:**
- `frontend/vitest.config.js` - Configure for React components
- `backend/jest.config.js` - Configure for Node.js
**Test structure:**
```
frontend/src/
__tests__/
context/
AuthContext.test.jsx
pages/
LoginPage.test.jsx
Dashboard.test.jsx
components/
Icons.test.jsx
backend/src/
__tests__/
auth.test.js
programs.test.js
logs.test.js
```
---
*Testing analysis: 2026-02-15*