/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import fs from 'fs/promises'; import { StandardFileSystemService } from './fileSystemService.js'; vi.mock('fs/promises'); describe('StandardFileSystemService', () => { let fileSystem: StandardFileSystemService; beforeEach(() => { vi.resetAllMocks(); fileSystem = new StandardFileSystemService(); }); afterEach(() => { vi.restoreAllMocks(); }); describe('readTextFile', () => { it('should read file content using fs', async () => { const testContent = 'Hello, World!'; vi.mocked(fs.readFile).mockResolvedValue(testContent); const result = await fileSystem.readTextFile('/test/file.txt'); expect(fs.readFile).toHaveBeenCalledWith('/test/file.txt', 'utf-8'); expect(result).toBe(testContent); }); it('should propagate fs.readFile errors', async () => { const error = new Error('ENOENT: File not found'); vi.mocked(fs.readFile).mockRejectedValue(error); await expect(fileSystem.readTextFile('/test/file.txt')).rejects.toThrow( 'ENOENT: File not found', ); }); }); describe('writeTextFile', () => { it('should write file content using fs', async () => { vi.mocked(fs.writeFile).mockResolvedValue(); await fileSystem.writeTextFile('/test/file.txt', 'Hello, World!'); expect(fs.writeFile).toHaveBeenCalledWith( '/test/file.txt', 'Hello, World!', 'utf-8', ); }); }); });