Skip to main content
Glama

filesystem-mcp

by sylphxltd
stats-utils.test.ts3.19 kB
import { describe, it, expect } from 'vitest'; import { formatStats, FormattedStats } from '../../src/utils/stats-utils'; function makeMockStats(partial: Partial<Record<keyof FormattedStats, any>> = {}): any { // Provide default values and allow overrides return { isFile: () => partial.isFile ?? true, isDirectory: () => partial.isDirectory ?? false, isSymbolicLink: () => partial.isSymbolicLink ?? false, size: partial.size ?? 1234, atime: partial.atime ?? new Date('2024-01-01T01:02:03.000Z'), mtime: partial.mtime ?? new Date('2024-01-02T01:02:03.000Z'), ctime: partial.ctime ?? new Date('2024-01-03T01:02:03.000Z'), birthtime: partial.birthtime ?? new Date('2024-01-04T01:02:03.000Z'), mode: partial.mode ?? 0o755, uid: partial.uid ?? 1000, gid: partial.gid ?? 1000, }; } describe('formatStats', () => { it('formats a regular file', () => { const stats = makeMockStats({ isFile: true, isDirectory: false, isSymbolicLink: false, mode: 0o644 }); const result = formatStats('foo\\bar.txt', '/abs/foo/bar.txt', stats as any); expect(result).toEqual({ path: 'foo/bar.txt', isFile: true, isDirectory: false, isSymbolicLink: false, size: 1234, atime: '2024-01-01T01:02:03.000Z', mtime: '2024-01-02T01:02:03.000Z', ctime: '2024-01-03T01:02:03.000Z', birthtime: '2024-01-04T01:02:03.000Z', mode: '644', uid: 1000, gid: 1000, }); }); it('formats a directory', () => { const stats = makeMockStats({ isFile: false, isDirectory: true, isSymbolicLink: false, mode: 0o755 }); const result = formatStats('dir\\', '/abs/dir', stats as any); expect(result.isDirectory).toBe(true); expect(result.isFile).toBe(false); expect(result.mode).toBe('755'); }); it('formats a symbolic link', () => { const stats = makeMockStats({ isFile: false, isDirectory: false, isSymbolicLink: true, mode: 0o777 }); const result = formatStats('link', '/abs/link', stats as any); expect(result.isSymbolicLink).toBe(true); expect(result.mode).toBe('777'); }); it('pads mode with leading zeros', () => { const stats = makeMockStats({ mode: 0o7 }); const result = formatStats('file', '/abs/file', stats as any); expect(result.mode).toBe('007'); }); it('converts all date fields to ISO string', () => { const stats = makeMockStats({ atime: new Date('2020-01-01T00:00:00.000Z'), mtime: new Date('2020-01-02T00:00:00.000Z'), ctime: new Date('2020-01-03T00:00:00.000Z'), birthtime: new Date('2020-01-04T00:00:00.000Z'), }); const result = formatStats('file', '/abs/file', stats as any); expect(result.atime).toBe('2020-01-01T00:00:00.000Z'); expect(result.mtime).toBe('2020-01-02T00:00:00.000Z'); expect(result.ctime).toBe('2020-01-03T00:00:00.000Z'); expect(result.birthtime).toBe('2020-01-04T00:00:00.000Z'); }); it('replaces backslashes in path with forward slashes', () => { const stats = makeMockStats(); const result = formatStats('foo\\bar\\baz.txt', '/abs/foo/bar/baz.txt', stats as any); expect(result.path).toBe('foo/bar/baz.txt'); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sylphxltd/filesystem-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server