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,13 @@
import idObj from '../test-redirections/idObjES6Export';
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
import idObj from '../test-redirections/idObjES6ImportExport';
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
import idObj from '../test-redirections/idObjES6Import';
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
import idObj from '..';
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
const idObj = require('..');
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
const idObj = require('../test-redirections/idObjES6Export').default;
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
const idObj = require('../test-redirections/idObjES6ImportExport').default;
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
const idObj = require('../test-redirections/idObjES6Import');
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

View File

@@ -0,0 +1,13 @@
const idObj = require('..');
describe('idObj', () => {
it('should return the key as a string', () => {
expect(idObj.foo).toBe('foo');
});
it('should support dot notation', () => {
expect(idObj.bar).toBe('bar');
});
it('should support bracket notation', () => {
expect(idObj[1]).toBe('1');
});
});

26
frontend/node_modules/identity-obj-proxy/src/index.js generated vendored Normal file
View File

@@ -0,0 +1,26 @@
/* eslint-disable no-var, comma-dangle */
var Reflect; // eslint-disable-line no-unused-vars
var idObj;
function checkIsNodeV6OrAbove() {
if (typeof process === 'undefined') {
return false;
}
return parseInt(process.versions.node.split('.')[0], 10) >= 6;
}
if (!checkIsNodeV6OrAbove()) {
Reflect = require('harmony-reflect'); // eslint-disable-line global-require
}
idObj = new Proxy({}, {
get: function getter(target, key) {
if (key === '__esModule') {
return false;
}
return key;
}
});
module.exports = idObj;

View File

@@ -0,0 +1,3 @@
const idObj = require('..');
export default idObj;

View File

@@ -0,0 +1,3 @@
import idObj from '..';
module.exports = idObj;

View File

@@ -0,0 +1,3 @@
import idObj from '..';
export default idObj;