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:
22
frontend/node_modules/@jest/source-map/LICENSE
generated
vendored
Normal file
22
frontend/node_modules/@jest/source-map/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
Copyright Contributors to the Jest project.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
17
frontend/node_modules/@jest/source-map/build/index.d.ts
generated
vendored
Normal file
17
frontend/node_modules/@jest/source-map/build/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* 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 callsites from 'callsites';
|
||||
|
||||
export declare function getCallsite(
|
||||
level: number,
|
||||
sourceMaps?: SourceMapRegistry | null,
|
||||
): callsites.CallSite;
|
||||
|
||||
export declare type SourceMapRegistry = Map<string, string>;
|
||||
|
||||
export {};
|
||||
145
frontend/node_modules/@jest/source-map/build/index.js
generated
vendored
Normal file
145
frontend/node_modules/@jest/source-map/build/index.js
generated
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
/*!
|
||||
* /**
|
||||
* * 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_modules__ = ({
|
||||
|
||||
/***/ "./src/getCallsite.ts":
|
||||
/***/ ((__unused_webpack_module, exports) => {
|
||||
|
||||
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({
|
||||
value: true
|
||||
}));
|
||||
exports["default"] = getCallsite;
|
||||
function _traceMapping() {
|
||||
const data = require("@jridgewell/trace-mapping");
|
||||
_traceMapping = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _callsites() {
|
||||
const data = _interopRequireDefault(require("callsites"));
|
||||
_callsites = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _gracefulFs() {
|
||||
const data = require("graceful-fs");
|
||||
_gracefulFs = function () {
|
||||
return data;
|
||||
};
|
||||
return data;
|
||||
}
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Copied from https://github.com/rexxars/sourcemap-decorate-callsites/blob/5b9735a156964973a75dc62fd2c7f0c1975458e8/lib/index.js#L113-L158
|
||||
const addSourceMapConsumer = (callsite, tracer) => {
|
||||
const getLineNumber = callsite.getLineNumber.bind(callsite);
|
||||
const getColumnNumber = callsite.getColumnNumber.bind(callsite);
|
||||
let position = null;
|
||||
function getPosition() {
|
||||
position ??= (0, _traceMapping().originalPositionFor)(tracer, {
|
||||
column: getColumnNumber() ?? -1,
|
||||
line: getLineNumber() ?? -1
|
||||
});
|
||||
return position;
|
||||
}
|
||||
Object.defineProperties(callsite, {
|
||||
getColumnNumber: {
|
||||
value() {
|
||||
const value = getPosition().column;
|
||||
return value == null || value === 0 ? getColumnNumber() : value;
|
||||
},
|
||||
writable: false
|
||||
},
|
||||
getLineNumber: {
|
||||
value() {
|
||||
const value = getPosition().line;
|
||||
return value == null || value === 0 ? getLineNumber() : value;
|
||||
},
|
||||
writable: false
|
||||
}
|
||||
});
|
||||
};
|
||||
function getCallsite(level, sourceMaps) {
|
||||
const levelAfterThisCall = level + 1;
|
||||
const stack = (0, _callsites().default)()[levelAfterThisCall];
|
||||
const sourceMapFileName = sourceMaps?.get(stack.getFileName() ?? '');
|
||||
if (sourceMapFileName != null && sourceMapFileName !== '') {
|
||||
try {
|
||||
const sourceMap = (0, _gracefulFs().readFileSync)(sourceMapFileName, 'utf8');
|
||||
addSourceMapConsumer(stack, new (_traceMapping().TraceMap)(sourceMap));
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
||||
/******/ if (cachedModule !== undefined) {
|
||||
/******/ return cachedModule.exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
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
|
||||
}));
|
||||
Object.defineProperty(exports, "getCallsite", ({
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _getCallsite.default;
|
||||
}
|
||||
}));
|
||||
var _getCallsite = _interopRequireDefault(__webpack_require__("./src/getCallsite.ts"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
})();
|
||||
|
||||
module.exports = __webpack_exports__;
|
||||
/******/ })()
|
||||
;
|
||||
3
frontend/node_modules/@jest/source-map/build/index.mjs
generated
vendored
Normal file
3
frontend/node_modules/@jest/source-map/build/index.mjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
import cjsModule from './index.js';
|
||||
|
||||
export const getCallsite = cjsModule.getCallsite;
|
||||
36
frontend/node_modules/@jest/source-map/package.json
generated
vendored
Normal file
36
frontend/node_modules/@jest/source-map/package.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "@jest/source-map",
|
||||
"version": "30.0.1",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jestjs/jest.git",
|
||||
"directory": "packages/jest-source-map"
|
||||
},
|
||||
"license": "MIT",
|
||||
"main": "./build/index.js",
|
||||
"types": "./build/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./build/index.d.ts",
|
||||
"require": "./build/index.js",
|
||||
"import": "./build/index.mjs",
|
||||
"default": "./build/index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"callsites": "^3.1.0",
|
||||
"graceful-fs": "^4.2.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/graceful-fs": "^4.1.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "5ce865b4060189fe74cd486544816c079194a0f7"
|
||||
}
|
||||
Reference in New Issue
Block a user