@hashgraphonline/conversational-agent
Version:
Hashgraph Online conversational AI agent implementing HCS-10 communication, HCS-2 registries, and content inscription on Hedera. https://hol.org
94 lines (76 loc) • 2.96 kB
text/typescript
/**
* Comprehensive tests for SwarmPlugin
* Tests all public methods and initialization scenarios.
*/
import { describe, expect, beforeEach, jest } from '@jest/globals';
import './SwarmPlugin.mocks';
import { BasePlugin, type GenericPluginContext, type HederaAgentKit } from "hedera-agent-kit";
import { SwarmConfig } from '../config';
import { SwarmPlugin } from "../SwarmPlugin";
describe("SwarmPlugin", () => {
let plugin: SwarmPlugin;
let mockContext: GenericPluginContext;
let hederaKitMock: HederaAgentKit;
let loggerMock: { info: jest.Mock; warn: jest.Mock };
let swarmConfig: SwarmConfig;
beforeEach(() => {
jest.clearAllMocks();
loggerMock = {
info: jest.fn(),
warn: jest.fn(),
};
hederaKitMock = {} as HederaAgentKit; // Mock minimal HederaAgentKit
mockContext = {
config: {
hederaKit: hederaKitMock,
},
logger: loggerMock,
} as unknown as GenericPluginContext;
swarmConfig = {
beeApiUrl: "http://127.0.0.1:1633",
beeFeedPK: "",
autoAssignStamp: true,
deferredUploadSizeThresholdMB: 5
};
plugin = new SwarmPlugin(swarmConfig);
});
it("should construct with config", () => {
plugin = new SwarmPlugin(swarmConfig);
expect(plugin).toBeInstanceOf(SwarmPlugin);
});
it("should skip initialization if hederaKit is missing", async () => {
plugin = new SwarmPlugin(swarmConfig);
const contextWithoutKit = { ...mockContext, config: {} };
await plugin.initialize(contextWithoutKit);
expect(loggerMock.warn).toHaveBeenCalledWith(
"SwarmPlugin skipped because HederaAgentKit was not present in plugin context."
);
expect(plugin.getTools()).toHaveLength(0);
});
it("should skip initialization if config is missing", async () => {
plugin = new SwarmPlugin();
await plugin.initialize(mockContext);
expect(loggerMock.warn).toHaveBeenCalledWith(
"SwarmPlugin skipped because Swarm config was not present."
);
expect(plugin.getTools()).toHaveLength(0);
});
it("should initialize all tools and log info with valid config and hederaKit", async () => {
plugin = new SwarmPlugin(swarmConfig);
// Spy on super.initialize (BasePlugin's initialize)
const superInitializeSpy = jest.spyOn(BasePlugin.prototype, "initialize");
await plugin.initialize(mockContext);
expect(superInitializeSpy).toHaveBeenCalledWith(mockContext);
expect(plugin.getTools()).toHaveLength(12);
expect(loggerMock.info).toHaveBeenCalledWith(
"Swarm Plugin initialized."
);
});
it("getTools returns empty array after cleanup", async () => {
plugin = new SwarmPlugin(swarmConfig);
await plugin.initialize(mockContext);
expect(plugin.getTools()).toHaveLength(12);
await plugin.cleanup();
expect(plugin.getTools()).toHaveLength(0);
});
});