 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>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var every = require("./prototypes/array").every;
 | |
| 
 | |
| /**
 | |
|  * @private
 | |
|  */
 | |
| function hasCallsLeft(callMap, spy) {
 | |
|     if (callMap[spy.id] === undefined) {
 | |
|         callMap[spy.id] = 0;
 | |
|     }
 | |
| 
 | |
|     return callMap[spy.id] < spy.callCount;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @private
 | |
|  */
 | |
| function checkAdjacentCalls(callMap, spy, index, spies) {
 | |
|     var calledBeforeNext = true;
 | |
| 
 | |
|     if (index !== spies.length - 1) {
 | |
|         calledBeforeNext = spy.calledBefore(spies[index + 1]);
 | |
|     }
 | |
| 
 | |
|     if (hasCallsLeft(callMap, spy) && calledBeforeNext) {
 | |
|         callMap[spy.id] += 1;
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * A Sinon proxy object (fake, spy, stub)
 | |
|  * @typedef {object} SinonProxy
 | |
|  * @property {Function} calledBefore - A method that determines if this proxy was called before another one
 | |
|  * @property {string} id - Some id
 | |
|  * @property {number} callCount - Number of times this proxy has been called
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Returns true when the spies have been called in the order they were supplied in
 | |
|  * @param  {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments
 | |
|  * @returns {boolean} true when spies are called in order, false otherwise
 | |
|  */
 | |
| function calledInOrder(spies) {
 | |
|     var callMap = {};
 | |
|     // eslint-disable-next-line no-underscore-dangle
 | |
|     var _spies = arguments.length > 1 ? arguments : spies;
 | |
| 
 | |
|     return every(_spies, checkAdjacentCalls.bind(null, callMap));
 | |
| }
 | |
| 
 | |
| module.exports = calledInOrder;
 |