 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>
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* eslint-disable no-console */
 | |
| "use strict";
 | |
| 
 | |
| var assert = require("@sinonjs/referee-sinon").assert;
 | |
| var sinon = require("@sinonjs/referee-sinon").sinon;
 | |
| 
 | |
| var deprecated = require("./deprecated");
 | |
| 
 | |
| var msg = "test";
 | |
| 
 | |
| describe("deprecated", function () {
 | |
|     describe("defaultMsg", function () {
 | |
|         it("should return a string", function () {
 | |
|             assert.equals(
 | |
|                 deprecated.defaultMsg("sinon", "someFunc"),
 | |
|                 "sinon.someFunc is deprecated and will be removed from the public API in a future version of sinon."
 | |
|             );
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe("printWarning", function () {
 | |
|         beforeEach(function () {
 | |
|             sinon.replace(process, "emitWarning", sinon.fake());
 | |
|         });
 | |
| 
 | |
|         afterEach(sinon.restore);
 | |
| 
 | |
|         describe("when `process.emitWarning` is defined", function () {
 | |
|             it("should call process.emitWarning with a msg", function () {
 | |
|                 deprecated.printWarning(msg);
 | |
|                 assert.calledOnceWith(process.emitWarning, msg);
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         describe("when `process.emitWarning` is undefined", function () {
 | |
|             beforeEach(function () {
 | |
|                 sinon.replace(console, "info", sinon.fake());
 | |
|                 sinon.replace(console, "log", sinon.fake());
 | |
|                 process.emitWarning = undefined;
 | |
|             });
 | |
| 
 | |
|             afterEach(sinon.restore);
 | |
| 
 | |
|             describe("when `console.info` is defined", function () {
 | |
|                 it("should call `console.info` with a message", function () {
 | |
|                     deprecated.printWarning(msg);
 | |
|                     assert.calledOnceWith(console.info, msg);
 | |
|                 });
 | |
|             });
 | |
| 
 | |
|             describe("when `console.info` is undefined", function () {
 | |
|                 it("should call `console.log` with a message", function () {
 | |
|                     console.info = undefined;
 | |
|                     deprecated.printWarning(msg);
 | |
|                     assert.calledOnceWith(console.log, msg);
 | |
|                 });
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe("wrap", function () {
 | |
|         // eslint-disable-next-line mocha/no-setup-in-describe
 | |
|         var method = sinon.fake();
 | |
|         var wrapped;
 | |
| 
 | |
|         beforeEach(function () {
 | |
|             wrapped = deprecated.wrap(method, msg);
 | |
|         });
 | |
| 
 | |
|         it("should return a wrapper function", function () {
 | |
|             assert.match(wrapped, sinon.match.func);
 | |
|         });
 | |
| 
 | |
|         it("should assign the prototype of the passed method", function () {
 | |
|             assert.equals(method.prototype, wrapped.prototype);
 | |
|         });
 | |
| 
 | |
|         context("when the passed method has falsy prototype", function () {
 | |
|             it("should not be assigned to the wrapped method", function () {
 | |
|                 method.prototype = null;
 | |
|                 wrapped = deprecated.wrap(method, msg);
 | |
|                 assert.match(wrapped.prototype, sinon.match.object);
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         context("when invoking the wrapped function", function () {
 | |
|             before(function () {
 | |
|                 sinon.replace(deprecated, "printWarning", sinon.fake());
 | |
|                 wrapped({});
 | |
|             });
 | |
| 
 | |
|             it("should call `printWarning` before invoking", function () {
 | |
|                 assert.calledOnceWith(deprecated.printWarning, msg);
 | |
|             });
 | |
| 
 | |
|             it("should invoke the passed method with the given arguments", function () {
 | |
|                 assert.calledOnceWith(method, {});
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| });
 |