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

43
frontend/node_modules/@jest/expect/build/index.d.mts generated vendored Normal file
View File

@@ -0,0 +1,43 @@
import { AsymmetricMatchers, AsymmetricMatchers as AsymmetricMatchers$1, BaseExpect, MatcherContext, MatcherFunction, MatcherFunctionWithContext, MatcherState, MatcherUtils, Matchers, Matchers as Matchers$1 } from "expect";
import { SnapshotMatchers, SnapshotState, addSerializer } from "jest-snapshot";
//#region src/types.d.ts
type JestExpect = {
<T = unknown>(actual: T): JestMatchers<void, T> & Inverse<JestMatchers<void, T>> & PromiseMatchers<T>;
addSnapshotSerializer: typeof addSerializer;
} & BaseExpect & AsymmetricMatchers$1 & Inverse<Omit<AsymmetricMatchers$1, 'any' | 'anything'>>;
type Inverse<Matchers> = {
/**
* Inverse next matcher. If you know how to test something, `.not` lets you test its opposite.
*/
not: Matchers$1;
};
type JestMatchers<R extends void | Promise<void>, T> = Matchers$1<R, T> & SnapshotMatchers<R, T>;
type PromiseMatchers<T = unknown> = {
/**
* Unwraps the reason of a rejected promise so any other matcher can be chained.
* If the promise is fulfilled the assertion fails.
*/
rejects: JestMatchers<Promise<void>, T> & Inverse<JestMatchers<Promise<void>, T>>;
/**
* Unwraps the value of a fulfilled promise so any other matcher can be chained.
* If the promise is rejected the assertion fails.
*/
resolves: JestMatchers<Promise<void>, T> & Inverse<JestMatchers<Promise<void>, T>>;
};
declare module 'expect' {
interface MatcherState {
snapshotState: SnapshotState;
/** Whether the test was called with `test.failing()` */
testFailing?: boolean;
}
interface BaseExpect {
addSnapshotSerializer: typeof addSerializer;
}
}
//#endregion
//#region src/index.d.ts
declare const jestExpect: JestExpect;
//#endregion
export { AsymmetricMatchers, JestExpect, MatcherContext, MatcherFunction, MatcherFunctionWithContext, MatcherState, MatcherUtils, Matchers, jestExpect };

66
frontend/node_modules/@jest/expect/build/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,66 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import {
AsymmetricMatchers,
BaseExpect,
Inverse,
MatcherContext,
MatcherFunction,
MatcherFunctionWithContext,
MatcherState,
MatcherUtils,
Matchers,
} from 'expect';
import {SnapshotMatchers, addSerializer} from 'jest-snapshot';
export {AsymmetricMatchers};
export declare type JestExpect = {
<T = unknown>(
actual: T,
): JestMatchers<void, T> &
Inverse<JestMatchers<void, T>> &
PromiseMatchers<T>;
addSnapshotSerializer: typeof addSerializer;
} & BaseExpect &
AsymmetricMatchers &
Inverse<Omit<AsymmetricMatchers, 'any' | 'anything'>>;
export declare const jestExpect: JestExpect;
declare type JestMatchers<R extends void | Promise<void>, T> = Matchers<R, T> &
SnapshotMatchers<R, T>;
export {MatcherContext};
export {MatcherFunction};
export {MatcherFunctionWithContext};
export {Matchers};
export {MatcherState};
export {MatcherUtils};
declare type PromiseMatchers<T = unknown> = {
/**
* Unwraps the reason of a rejected promise so any other matcher can be chained.
* If the promise is fulfilled the assertion fails.
*/
rejects: JestMatchers<Promise<void>, T> &
Inverse<JestMatchers<Promise<void>, T>>;
/**
* Unwraps the value of a fulfilled promise so any other matcher can be chained.
* If the promise is rejected the assertion fails.
*/
resolves: JestMatchers<Promise<void>, T> &
Inverse<JestMatchers<Promise<void>, T>>;
};
export {};

57
frontend/node_modules/@jest/expect/build/index.js generated vendored Normal file
View File

@@ -0,0 +1,57 @@
/*!
* /**
* * Copyright (c) Meta Platforms, Inc. and affiliates.
* *
* * This source code is licensed under the MIT license found in the
* * LICENSE file in the root directory of this source tree.
* * /
*/
/******/ (() => { // webpackBootstrap
/******/ "use strict";
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).
(() => {
var exports = __webpack_exports__;
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.jestExpect = void 0;
function _expect() {
const data = require("expect");
_expect = function () {
return data;
};
return data;
}
function _jestSnapshot() {
const data = require("jest-snapshot");
_jestSnapshot = function () {
return data;
};
return data;
}
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
function createJestExpect() {
_expect().expect.extend({
toMatchInlineSnapshot: _jestSnapshot().toMatchInlineSnapshot,
toMatchSnapshot: _jestSnapshot().toMatchSnapshot,
toThrowErrorMatchingInlineSnapshot: _jestSnapshot().toThrowErrorMatchingInlineSnapshot,
toThrowErrorMatchingSnapshot: _jestSnapshot().toThrowErrorMatchingSnapshot
});
_expect().expect.addSnapshotSerializer = _jestSnapshot().addSerializer;
return _expect().expect;
}
const jestExpect = exports.jestExpect = createJestExpect();
})();
module.exports = __webpack_exports__;
/******/ })()
;

3
frontend/node_modules/@jest/expect/build/index.mjs generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import cjsModule from './index.js';
export const jestExpect = cjsModule.jestExpect;