Files
letta-code/src/tests/tools/overflow.test.ts
2026-01-07 14:15:51 -08:00

206 lines
6.1 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, test } from "bun:test";
import * as fs from "node:fs";
import * as os from "node:os";
import * as path from "node:path";
import {
cleanupOldOverflowFiles,
ensureOverflowDirectory,
getOverflowDirectory,
getOverflowStats,
OVERFLOW_CONFIG,
writeOverflowFile,
} from "../../tools/impl/overflow";
describe("overflow utilities", () => {
const testWorkingDir = "/test/project/path";
let overflowDir: string;
beforeEach(() => {
overflowDir = getOverflowDirectory(testWorkingDir);
});
afterEach(() => {
// Clean up test files
if (fs.existsSync(overflowDir)) {
const files = fs.readdirSync(overflowDir);
for (const file of files) {
fs.unlinkSync(path.join(overflowDir, file));
}
// Try to remove the directory (will fail if not empty)
try {
fs.rmdirSync(overflowDir);
} catch {
// Directory not empty, that's OK
}
}
});
describe("OVERFLOW_CONFIG", () => {
test("has expected default values", () => {
expect(OVERFLOW_CONFIG.ENABLED).toBeDefined();
expect(OVERFLOW_CONFIG.MIDDLE_TRUNCATE).toBeDefined();
});
});
describe("getOverflowDirectory", () => {
test("generates consistent directory path", () => {
const dir1 = getOverflowDirectory(testWorkingDir);
const dir2 = getOverflowDirectory(testWorkingDir);
expect(dir1).toBe(dir2);
});
test("creates path under ~/.letta", () => {
const dir = getOverflowDirectory(testWorkingDir);
const homeDir = os.homedir();
expect(dir).toContain(path.join(homeDir, ".letta"));
});
test("sanitizes working directory path", () => {
const dir = getOverflowDirectory("/path/with spaces/and:colons");
expect(dir).not.toContain(" ");
expect(dir).not.toContain(":");
expect(dir).toContain("path_with_spaces_and_colons");
});
});
describe("ensureOverflowDirectory", () => {
test("creates directory if it doesn't exist", () => {
const dir = ensureOverflowDirectory(testWorkingDir);
expect(fs.existsSync(dir)).toBe(true);
expect(fs.statSync(dir).isDirectory()).toBe(true);
});
test("returns existing directory without error", () => {
const dir1 = ensureOverflowDirectory(testWorkingDir);
const dir2 = ensureOverflowDirectory(testWorkingDir);
expect(dir1).toBe(dir2);
expect(fs.existsSync(dir1)).toBe(true);
});
});
describe("writeOverflowFile", () => {
test("writes content to a file", () => {
const content = "Test content for overflow file";
const filePath = writeOverflowFile(content, testWorkingDir, "TestTool");
expect(fs.existsSync(filePath)).toBe(true);
expect(fs.readFileSync(filePath, "utf-8")).toBe(content);
});
test("generates unique filenames", () => {
const content = "Test content";
const file1 = writeOverflowFile(content, testWorkingDir, "TestTool");
const file2 = writeOverflowFile(content, testWorkingDir, "TestTool");
expect(file1).not.toBe(file2);
});
test("includes tool name in filename", () => {
const content = "Test content";
const filePath = writeOverflowFile(
content,
testWorkingDir,
"MyCustomTool",
);
expect(path.basename(filePath)).toContain("mycustomtool");
});
test("handles large content", () => {
const largeContent = "x".repeat(100_000);
const filePath = writeOverflowFile(
largeContent,
testWorkingDir,
"TestTool",
);
expect(fs.existsSync(filePath)).toBe(true);
expect(fs.readFileSync(filePath, "utf-8")).toBe(largeContent);
});
});
describe("cleanupOldOverflowFiles", () => {
test("removes files older than specified age", async () => {
// Create a test file
const content = "Test content";
const filePath = writeOverflowFile(content, testWorkingDir, "TestTool");
// Manually set the file's mtime to be old
const oldTime = Date.now() - 48 * 60 * 60 * 1000; // 48 hours ago
fs.utimesSync(filePath, new Date(oldTime), new Date(oldTime));
// Clean up files older than 24 hours
const deletedCount = cleanupOldOverflowFiles(
testWorkingDir,
24 * 60 * 60 * 1000,
);
expect(deletedCount).toBe(1);
expect(fs.existsSync(filePath)).toBe(false);
});
test("preserves recent files", () => {
const content = "Test content";
const filePath = writeOverflowFile(content, testWorkingDir, "TestTool");
// Clean up files older than 24 hours (file is recent)
const deletedCount = cleanupOldOverflowFiles(
testWorkingDir,
24 * 60 * 60 * 1000,
);
expect(deletedCount).toBe(0);
expect(fs.existsSync(filePath)).toBe(true);
});
test("returns 0 if directory doesn't exist", () => {
const nonExistentDir = "/non/existent/directory";
const deletedCount = cleanupOldOverflowFiles(
nonExistentDir,
24 * 60 * 60 * 1000,
);
expect(deletedCount).toBe(0);
});
});
describe("getOverflowStats", () => {
test("returns correct stats for empty directory", () => {
ensureOverflowDirectory(testWorkingDir);
const stats = getOverflowStats(testWorkingDir);
expect(stats.exists).toBe(true);
expect(stats.fileCount).toBe(0);
expect(stats.totalSize).toBe(0);
});
test("returns correct stats for directory with files", () => {
const content1 = "Test content 1";
const content2 = "Test content 2 is longer";
writeOverflowFile(content1, testWorkingDir, "Tool1");
writeOverflowFile(content2, testWorkingDir, "Tool2");
const stats = getOverflowStats(testWorkingDir);
expect(stats.exists).toBe(true);
expect(stats.fileCount).toBe(2);
expect(stats.totalSize).toBeGreaterThan(0);
});
test("returns correct stats for non-existent directory", () => {
const nonExistentDir = "/non/existent/directory";
const stats = getOverflowStats(nonExistentDir);
expect(stats.exists).toBe(false);
expect(stats.fileCount).toBe(0);
expect(stats.totalSize).toBe(0);
});
});
});