 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>
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var Buffer = require("safer-buffer").Buffer;
 | |
| 
 | |
| // NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), 
 | |
| // we opt to dependency-inject it instead of creating a hard dependency.
 | |
| module.exports = function(stream_module) {
 | |
|     var Transform = stream_module.Transform;
 | |
| 
 | |
|     // == Encoder stream =======================================================
 | |
| 
 | |
|     function IconvLiteEncoderStream(conv, options) {
 | |
|         this.conv = conv;
 | |
|         options = options || {};
 | |
|         options.decodeStrings = false; // We accept only strings, so we don't need to decode them.
 | |
|         Transform.call(this, options);
 | |
|     }
 | |
| 
 | |
|     IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {
 | |
|         constructor: { value: IconvLiteEncoderStream }
 | |
|     });
 | |
| 
 | |
|     IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
 | |
|         if (typeof chunk != 'string')
 | |
|             return done(new Error("Iconv encoding stream needs strings as its input."));
 | |
|         try {
 | |
|             var res = this.conv.write(chunk);
 | |
|             if (res && res.length) this.push(res);
 | |
|             done();
 | |
|         }
 | |
|         catch (e) {
 | |
|             done(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     IconvLiteEncoderStream.prototype._flush = function(done) {
 | |
|         try {
 | |
|             var res = this.conv.end();
 | |
|             if (res && res.length) this.push(res);
 | |
|             done();
 | |
|         }
 | |
|         catch (e) {
 | |
|             done(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     IconvLiteEncoderStream.prototype.collect = function(cb) {
 | |
|         var chunks = [];
 | |
|         this.on('error', cb);
 | |
|         this.on('data', function(chunk) { chunks.push(chunk); });
 | |
|         this.on('end', function() {
 | |
|             cb(null, Buffer.concat(chunks));
 | |
|         });
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     // == Decoder stream =======================================================
 | |
| 
 | |
|     function IconvLiteDecoderStream(conv, options) {
 | |
|         this.conv = conv;
 | |
|         options = options || {};
 | |
|         options.encoding = this.encoding = 'utf8'; // We output strings.
 | |
|         Transform.call(this, options);
 | |
|     }
 | |
| 
 | |
|     IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {
 | |
|         constructor: { value: IconvLiteDecoderStream }
 | |
|     });
 | |
| 
 | |
|     IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
 | |
|         if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))
 | |
|             return done(new Error("Iconv decoding stream needs buffers as its input."));
 | |
|         try {
 | |
|             var res = this.conv.write(chunk);
 | |
|             if (res && res.length) this.push(res, this.encoding);
 | |
|             done();
 | |
|         }
 | |
|         catch (e) {
 | |
|             done(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     IconvLiteDecoderStream.prototype._flush = function(done) {
 | |
|         try {
 | |
|             var res = this.conv.end();
 | |
|             if (res && res.length) this.push(res, this.encoding);                
 | |
|             done();
 | |
|         }
 | |
|         catch (e) {
 | |
|             done(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     IconvLiteDecoderStream.prototype.collect = function(cb) {
 | |
|         var res = '';
 | |
|         this.on('error', cb);
 | |
|         this.on('data', function(chunk) { res += chunk; });
 | |
|         this.on('end', function() {
 | |
|             cb(null, res);
 | |
|         });
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     return {
 | |
|         IconvLiteEncoderStream: IconvLiteEncoderStream,
 | |
|         IconvLiteDecoderStream: IconvLiteDecoderStream,
 | |
|     };
 | |
| };
 |