mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-20 10:10:56 -07:00
98 lines
3.0 KiB
TypeScript
98 lines
3.0 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { AcknowledgedAgentsService } from './acknowledgedAgents.js';
|
|
import { Storage } from '../config/storage.js';
|
|
import * as fs from 'node:fs/promises';
|
|
import * as path from 'node:path';
|
|
import * as os from 'node:os';
|
|
|
|
describe('AcknowledgedAgentsService', () => {
|
|
let tempDir: string;
|
|
let originalGeminiCliHome: string | undefined;
|
|
|
|
beforeEach(async () => {
|
|
// Create a unique temp directory for each test
|
|
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gemini-cli-test-'));
|
|
|
|
// Override GEMINI_CLI_HOME to point to the temp directory
|
|
originalGeminiCliHome = process.env['GEMINI_CLI_HOME'];
|
|
process.env['GEMINI_CLI_HOME'] = tempDir;
|
|
});
|
|
|
|
afterEach(async () => {
|
|
// Restore environment variable
|
|
if (originalGeminiCliHome) {
|
|
process.env['GEMINI_CLI_HOME'] = originalGeminiCliHome;
|
|
} else {
|
|
delete process.env['GEMINI_CLI_HOME'];
|
|
}
|
|
|
|
// Clean up temp directory
|
|
await fs.rm(tempDir, { recursive: true, force: true });
|
|
});
|
|
|
|
it('should acknowledge an agent and save to disk', async () => {
|
|
const service = new AcknowledgedAgentsService();
|
|
const ackPath = Storage.getAcknowledgedAgentsPath();
|
|
|
|
await service.acknowledge('/project', 'AgentA', 'hash1');
|
|
|
|
// Verify file exists and content
|
|
const content = await fs.readFile(ackPath, 'utf-8');
|
|
expect(content).toContain('"AgentA": "hash1"');
|
|
});
|
|
|
|
it('should return true for acknowledged agent', async () => {
|
|
const service = new AcknowledgedAgentsService();
|
|
|
|
await service.acknowledge('/project', 'AgentA', 'hash1');
|
|
|
|
expect(await service.isAcknowledged('/project', 'AgentA', 'hash1')).toBe(
|
|
true,
|
|
);
|
|
expect(await service.isAcknowledged('/project', 'AgentA', 'hash2')).toBe(
|
|
false,
|
|
);
|
|
expect(await service.isAcknowledged('/project', 'AgentB', 'hash1')).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
it('should load acknowledged agents from disk', async () => {
|
|
const ackPath = Storage.getAcknowledgedAgentsPath();
|
|
const data = {
|
|
'/project': {
|
|
AgentLoaded: 'hashLoaded',
|
|
},
|
|
};
|
|
|
|
// Ensure directory exists
|
|
await fs.mkdir(path.dirname(ackPath), { recursive: true });
|
|
await fs.writeFile(ackPath, JSON.stringify(data), 'utf-8');
|
|
|
|
const service = new AcknowledgedAgentsService();
|
|
|
|
expect(
|
|
await service.isAcknowledged('/project', 'AgentLoaded', 'hashLoaded'),
|
|
).toBe(true);
|
|
});
|
|
|
|
it('should handle load errors gracefully', async () => {
|
|
// Create a directory where the file should be to cause a read error (EISDIR)
|
|
const ackPath = Storage.getAcknowledgedAgentsPath();
|
|
await fs.mkdir(ackPath, { recursive: true });
|
|
|
|
const service = new AcknowledgedAgentsService();
|
|
|
|
// Should not throw, and treated as empty
|
|
expect(await service.isAcknowledged('/project', 'Agent', 'hash')).toBe(
|
|
false,
|
|
);
|
|
});
|
|
});
|