Set up comprehensive frontend testing infrastructure

- Install Jest for unit testing with React Testing Library
- Install Playwright for end-to-end testing
- Configure Jest with proper TypeScript support and module mapping
- Create test setup files and utilities for both unit and e2e tests

Components:
* Jest configuration with coverage thresholds
* Playwright configuration with browser automation
* Unit tests for LoginForm, AuthContext, and useSocketIO hook
* E2E tests for authentication, dashboard, and agents workflows
* GitHub Actions workflow for automated testing
* Mock data and API utilities for consistent testing
* Test documentation with best practices

Testing features:
- Unit tests with 70% coverage threshold
- E2E tests with API mocking and user journey testing
- CI/CD integration for automated test runs
- Cross-browser testing support with Playwright
- Authentication system testing end-to-end

🚀 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-07-11 14:06:34 +10:00
parent c6d69695a8
commit aacb45156b
6109 changed files with 777927 additions and 1 deletions

View File

@@ -0,0 +1,20 @@
import { writeDataTransferToClipboard } from '../utils/dataTransfer/Clipboard.js';
import { copySelection } from '../document/copySelection.js';
async function copy() {
const doc = this.config.document;
var _doc_activeElement;
const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== undefined ? _doc_activeElement : /* istanbul ignore next */ doc.body;
const clipboardData = copySelection(target);
if (clipboardData.items.length === 0) {
return;
}
if (this.dispatchUIEvent(target, 'copy', {
clipboardData
}) && this.config.writeToClipboard) {
await writeDataTransferToClipboard(doc, clipboardData);
}
return clipboardData;
}
export { copy };

View File

@@ -0,0 +1,20 @@
import { writeDataTransferToClipboard } from '../utils/dataTransfer/Clipboard.js';
import { copySelection } from '../document/copySelection.js';
async function cut() {
const doc = this.config.document;
var _doc_activeElement;
const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== undefined ? _doc_activeElement : /* istanbul ignore next */ doc.body;
const clipboardData = copySelection(target);
if (clipboardData.items.length === 0) {
return;
}
if (this.dispatchUIEvent(target, 'cut', {
clipboardData
}) && this.config.writeToClipboard) {
await writeDataTransferToClipboard(target.ownerDocument, clipboardData);
}
return clipboardData;
}
export { cut };

View File

@@ -0,0 +1,3 @@
export { copy } from './copy.js';
export { cut } from './cut.js';
export { paste } from './paste.js';

View File

@@ -0,0 +1,23 @@
import { createDataTransfer } from '../utils/dataTransfer/DataTransfer.js';
import { readDataTransferFromClipboard } from '../utils/dataTransfer/Clipboard.js';
import { getWindow } from '../utils/misc/getWindow.js';
async function paste(clipboardData) {
const doc = this.config.document;
var _doc_activeElement;
const target = (_doc_activeElement = doc.activeElement) !== null && _doc_activeElement !== undefined ? _doc_activeElement : /* istanbul ignore next */ doc.body;
var _ref;
const dataTransfer = (_ref = typeof clipboardData === 'string' ? getClipboardDataFromString(doc, clipboardData) : clipboardData) !== null && _ref !== undefined ? _ref : await readDataTransferFromClipboard(doc).catch(()=>{
throw new Error('`userEvent.paste()` without `clipboardData` requires the `ClipboardAPI` to be available.');
});
this.dispatchUIEvent(target, 'paste', {
clipboardData: dataTransfer
});
}
function getClipboardDataFromString(doc, text) {
const dt = createDataTransfer(getWindow(doc));
dt.setData('text', text);
return dt;
}
export { paste };