contaigents
Version:
Modular AI Content Ecosystem with Audio Generation
211 lines (202 loc) โข 7.67 kB
JavaScript
import { FileWriteTool } from '../services/tools/FileWriteTool.js';
import { FileService } from '../services/fileService.js';
import fs from 'fs/promises';
import path from 'path';
async function testFileWriteTool() {
console.log('๐งช Testing FileWriteTool...\n');
const testDir = path.join(process.cwd(), 'test-file-write');
const fileWriteTool = new FileWriteTool(process.cwd());
const fileService = new FileService(process.cwd());
try {
// Setup test environment
await fs.mkdir(testDir, { recursive: true });
console.log('โ
Created test directory:', testDir);
// Test 1: File Creation
console.log('\n๐ Test 1: File Creation');
const createResult = await fileWriteTool.execute({
operation_type: 'create',
file_path: 'test-file-write/new-file.md',
content: `
This is a newly created file for testing.
- File creation
- Content writing
- Markdown support
\`\`\`javascript
console.log("Hello from new file!");
\`\`\`
`
});
if (createResult.success) {
console.log('โ
File creation successful!');
console.log('๐ Result:', createResult.data);
console.log('๐ฌ Message:', createResult.message);
}
else {
console.log('โ File creation failed:', createResult.error);
}
// Test 2: Try to create the same file again (should fail)
console.log('\n๐ซ Test 2: Duplicate File Creation (should fail)');
const duplicateResult = await fileWriteTool.execute({
operation_type: 'create',
file_path: 'test-file-write/new-file.md',
content: 'This should fail'
});
if (!duplicateResult.success) {
console.log('โ
Duplicate creation correctly prevented!');
console.log('โ Error message:', duplicateResult.error);
}
else {
console.log('โ Duplicate creation should have failed!');
}
// Test 3: Full File Rewrite
console.log('\n๐ Test 3: Full File Rewrite');
const rewriteResult = await fileWriteTool.execute({
operation_type: 'rewrite',
file_path: 'test-file-write/new-file.md',
content: `
This file has been completely rewritten.
- Complete replacement
- Backup creation
- New structure
\`\`\`python
print("Hello from rewritten file!")
\`\`\`
## Additional Section
This is new content that wasn't in the original file.
`,
create_backup: true
});
if (rewriteResult.success) {
console.log('โ
File rewrite successful!');
console.log('๐ Result:', rewriteResult.data);
console.log('๐ฌ Message:', rewriteResult.message);
}
else {
console.log('โ File rewrite failed:', rewriteResult.error);
}
// Test 4: Partial Write - Replace specific lines
console.log('\nโ๏ธ Test 4: Partial Write - Replace Lines 3-5');
const partialResult = await fileWriteTool.execute({
operation_type: 'partial',
file_path: 'test-file-write/new-file.md',
content: `This content replaces lines 3-5.
- This replaces the original content
- Lines 3-5 have been updated`,
start_line: 3,
end_line: 5,
create_backup: true
});
if (partialResult.success) {
console.log('โ
Partial write successful!');
console.log('๐ Result:', partialResult.data);
console.log('๐ฌ Message:', partialResult.message);
}
else {
console.log('โ Partial write failed:', partialResult.error);
}
// Test 5: Partial Write - Insert at specific line
console.log('\nโ Test 5: Partial Write - Insert at Line 8');
const insertResult = await fileWriteTool.execute({
operation_type: 'partial',
file_path: 'test-file-write/new-file.md',
content: `
This content was inserted at line 8.
- New bullet point
- Another new point
`,
start_line: 8,
end_line: 8,
create_backup: false
});
if (insertResult.success) {
console.log('โ
Partial insert successful!');
console.log('๐ Result:', insertResult.data);
console.log('๐ฌ Message:', insertResult.message);
}
else {
console.log('โ Partial insert failed:', insertResult.error);
}
// Test 6: Read the final file to verify all operations
console.log('\n๐ Test 6: Reading Final File Content');
try {
const finalContent = await fileService.readFile('test-file-write/new-file.md');
console.log('โ
Final file content:');
console.log('โ'.repeat(50));
console.log(finalContent);
console.log('โ'.repeat(50));
}
catch (error) {
console.log('โ Failed to read final file:', error);
}
// Test 7: Error Handling - Invalid operation
console.log('\n๐ซ Test 7: Error Handling - Invalid Operation');
const invalidResult = await fileWriteTool.execute({
operation_type: 'invalid_operation',
file_path: 'test-file-write/test.md',
content: 'test'
});
if (!invalidResult.success) {
console.log('โ
Invalid operation correctly rejected!');
console.log('โ Error message:', invalidResult.error);
}
else {
console.log('โ Invalid operation should have failed!');
}
// Test 8: Error Handling - Unsupported file type
console.log('\n๐ซ Test 8: Error Handling - Unsupported File Type');
const unsupportedResult = await fileWriteTool.execute({
operation_type: 'create',
file_path: 'test-file-write/test.exe',
content: 'binary content'
});
if (!unsupportedResult.success) {
console.log('โ
Unsupported file type correctly rejected!');
console.log('โ Error message:', unsupportedResult.error);
}
else {
console.log('โ Unsupported file type should have failed!');
}
// List backup files created
console.log('\n๐พ Backup Files Created:');
try {
const files = await fs.readdir(testDir);
const backupFiles = files.filter(file => file.includes('.backup.'));
if (backupFiles.length > 0) {
backupFiles.forEach(file => {
console.log(`๐ ${file}`);
});
}
else {
console.log('No backup files found');
}
}
catch (error) {
console.log('Error listing backup files:', error);
}
console.log('\n๐ All FileWriteTool tests completed!');
}
catch (error) {
console.error('โ Test failed:', error);
}
finally {
// Cleanup
try {
await fs.rm(testDir, { recursive: true, force: true });
console.log('\n๐งน Cleaned up test files');
}
catch (cleanupError) {
console.error('Failed to cleanup:', cleanupError);
}
}
}
// Run the test if this file is executed directly
if (import.meta.url === `file://${process.argv[1]}`) {
testFileWriteTool().catch(console.error);
}
export { testFileWriteTool };