 aacb45156b
			
		
	
	aacb45156b
	
	
	
		
			
			- 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>
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| const mimicFn = require('mimic-fn');
 | |
| 
 | |
| const calledFunctions = new WeakMap();
 | |
| 
 | |
| const onetime = (function_, options = {}) => {
 | |
| 	if (typeof function_ !== 'function') {
 | |
| 		throw new TypeError('Expected a function');
 | |
| 	}
 | |
| 
 | |
| 	let returnValue;
 | |
| 	let callCount = 0;
 | |
| 	const functionName = function_.displayName || function_.name || '<anonymous>';
 | |
| 
 | |
| 	const onetime = function (...arguments_) {
 | |
| 		calledFunctions.set(onetime, ++callCount);
 | |
| 
 | |
| 		if (callCount === 1) {
 | |
| 			returnValue = function_.apply(this, arguments_);
 | |
| 			function_ = null;
 | |
| 		} else if (options.throw === true) {
 | |
| 			throw new Error(`Function \`${functionName}\` can only be called once`);
 | |
| 		}
 | |
| 
 | |
| 		return returnValue;
 | |
| 	};
 | |
| 
 | |
| 	mimicFn(onetime, function_);
 | |
| 	calledFunctions.set(onetime, callCount);
 | |
| 
 | |
| 	return onetime;
 | |
| };
 | |
| 
 | |
| module.exports = onetime;
 | |
| // TODO: Remove this for the next major release
 | |
| module.exports.default = onetime;
 | |
| 
 | |
| module.exports.callCount = function_ => {
 | |
| 	if (!calledFunctions.has(function_)) {
 | |
| 		throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
 | |
| 	}
 | |
| 
 | |
| 	return calledFunctions.get(function_);
 | |
| };
 |