pipe-protocol
Version:
A protocol for large scale Interplanetary Intertool Agent Context
147 lines • 6.23 kB
JavaScript
"use strict";
/**
* @file Pipe Tool Test Suite
* @version 1.0.0
* @status STABLE - COMPLETE TEST COVERAGE
* @lastModified 2024-02-04
*
* Tests for Pipe tool functionality
*/
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const pipeTool_1 = require("../pipeTool");
(0, vitest_1.describe)('Pipe Tool', () => {
let mockIpfsClient;
(0, vitest_1.beforeEach)(() => {
mockIpfsClient = {
config: {
endpoint: 'http://localhost:5001',
timeout: 5000,
scope: 'private',
pin: true
},
storedData: new Map(),
pinnedCids: new Map(),
fetch: vitest_1.vi.fn(),
pin: vitest_1.vi.fn(),
unpin: vitest_1.vi.fn(),
replicate: vitest_1.vi.fn(),
getPinnedCids: vitest_1.vi.fn(),
getStatus: vitest_1.vi.fn(),
getNodeInfo: vitest_1.vi.fn(),
getStorageMetrics: vitest_1.vi.fn(),
getConfiguration: vitest_1.vi.fn(),
stop: vitest_1.vi.fn(),
store: vitest_1.vi.fn()
};
// Setup default mock implementations
const defaultRecord = {
type: 'data',
content: { test: 'data' },
scope: 'private',
pinned: false,
accessPolicy: { hiddenFromLLM: false }
};
mockIpfsClient.fetch.mockResolvedValue(defaultRecord);
mockIpfsClient.pin.mockResolvedValue(undefined);
mockIpfsClient.unpin.mockResolvedValue(undefined);
});
(0, vitest_1.it)('should create a tool with correct interface', () => {
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
(0, vitest_1.expect)(pipeTool.name).toBe('pipe');
(0, vitest_1.expect)(pipeTool.description).toContain('Access Pipe Protocol');
(0, vitest_1.expect)(pipeTool.parameters.type).toBe('object');
(0, vitest_1.expect)(pipeTool.parameters.properties).toHaveProperty('action');
(0, vitest_1.expect)(pipeTool.parameters.properties).toHaveProperty('cid');
(0, vitest_1.expect)(pipeTool.parameters.required).toContain('action');
(0, vitest_1.expect)(pipeTool.parameters.required).toContain('cid');
});
(0, vitest_1.it)('should retrieve content', async () => {
const mockContent = {
type: 'data',
content: { test: 'custom data' },
scope: 'private',
pinned: false,
accessPolicy: { hiddenFromLLM: false }
};
mockIpfsClient.fetch.mockResolvedValue(mockContent);
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
const result = await pipeTool.call({
action: 'retrieve',
cid: 'testCid'
});
(0, vitest_1.expect)(mockIpfsClient.fetch).toHaveBeenCalledWith('testCid', 'private');
(0, vitest_1.expect)(result.content).toEqual(mockContent);
(0, vitest_1.expect)(result.cid).toBe('testCid');
(0, vitest_1.expect)(result.metadata.action).toBe('retrieve');
(0, vitest_1.expect)(result.metadata.timestamp).toBeDefined();
});
(0, vitest_1.it)('should pin content', async () => {
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
mockIpfsClient.pin.mockResolvedValue(undefined);
const result = await pipeTool.call({
action: 'pin',
cid: 'testCid'
});
(0, vitest_1.expect)(mockIpfsClient.pin).toHaveBeenCalledWith('testCid', 'private');
(0, vitest_1.expect)(result.success).toBe(true);
(0, vitest_1.expect)(result.cid).toBe('testCid');
(0, vitest_1.expect)(result.metadata.action).toBe('pin');
});
(0, vitest_1.it)('should unpin content', async () => {
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
mockIpfsClient.unpin.mockResolvedValue(undefined);
const result = await pipeTool.call({
action: 'unpin',
cid: 'testCid'
});
(0, vitest_1.expect)(mockIpfsClient.unpin).toHaveBeenCalledWith('testCid', 'private');
(0, vitest_1.expect)(result.success).toBe(true);
(0, vitest_1.expect)(result.cid).toBe('testCid');
(0, vitest_1.expect)(result.metadata.action).toBe('unpin');
});
(0, vitest_1.it)('should get schema', async () => {
const mockSchema = {
type: 'schema',
content: { type: 'object', properties: {} },
scope: 'private',
pinned: false,
accessPolicy: { hiddenFromLLM: false }
};
mockIpfsClient.fetch.mockResolvedValue(mockSchema);
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
const result = await pipeTool.call({
action: 'getSchema',
cid: 'testCid'
});
(0, vitest_1.expect)(mockIpfsClient.fetch).toHaveBeenCalledWith('testCid', 'private');
(0, vitest_1.expect)(result.schema).toEqual(mockSchema);
(0, vitest_1.expect)(result.cid).toBe('testCid');
(0, vitest_1.expect)(result.metadata.action).toBe('getSchema');
});
(0, vitest_1.it)('should throw error for unknown action', async () => {
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
await (0, vitest_1.expect)(pipeTool.call({
action: 'invalid',
cid: 'testCid'
})).rejects.toThrow('Unknown action: invalid');
});
(0, vitest_1.it)('should respect scope parameter', async () => {
const mockContent = {
type: 'data',
content: { test: 'data' },
scope: 'public',
pinned: false,
accessPolicy: { hiddenFromLLM: false }
};
mockIpfsClient.fetch.mockResolvedValue(mockContent);
const pipeTool = (0, pipeTool_1.createPipeTool)(mockIpfsClient);
const result = await pipeTool.call({
action: 'retrieve',
cid: 'testCid',
scope: 'public'
});
(0, vitest_1.expect)(result.metadata.scope).toBe('public');
});
});
//# sourceMappingURL=pipeTool.test.js.map