import type Docker from "dockerode";
import { beforeEach, describe, expect, it, vi } from "vitest";
import type { HostConfig } from "../../types.js";
import { NetworkService } from "./network-service.js";
import type { ClientManager } from "./utils/client-manager.js";
describe("NetworkService", () => {
let service: NetworkService;
let mockClientManager: ClientManager;
let mockDocker: Docker;
beforeEach(() => {
mockDocker = {
listNetworks: vi.fn(),
} as unknown as Docker;
mockClientManager = {
getClient: vi.fn(() => mockDocker),
} as unknown as ClientManager;
service = new NetworkService(mockClientManager);
});
it("should list networks from multiple hosts", async (): Promise<void> => {
const hosts: HostConfig[] = [
{ name: "host1", host: "server1.example.com" },
{ name: "host2", host: "server2.example.com" },
];
(mockDocker.listNetworks as ReturnType<typeof vi.fn>).mockResolvedValue([
{
Id: "net123",
Name: "bridge",
Driver: "bridge",
Scope: "local",
Created: "2024-01-01T00:00:00Z",
Internal: false,
Attachable: false,
Ingress: false,
},
]);
const result = await service.listNetworks(hosts);
expect(result).toHaveLength(2);
expect(result[0].name).toBe("bridge");
expect(result[0].hostName).toBe("host1");
expect(result[1].hostName).toBe("host2");
});
it("should handle network listing errors gracefully", async (): Promise<void> => {
const hosts: HostConfig[] = [
{ name: "host1", host: "server1.example.com" },
{ name: "host2", host: "unreachable.example.com" },
];
(mockDocker.listNetworks as ReturnType<typeof vi.fn>)
.mockResolvedValueOnce([
{
Id: "net123",
Name: "bridge",
Driver: "bridge",
Scope: "local",
Created: "2024-01-01T00:00:00Z",
Internal: false,
Attachable: false,
Ingress: false,
},
])
.mockRejectedValueOnce(new Error("Connection failed"));
const result = await service.listNetworks(hosts);
expect(result).toHaveLength(1);
expect(result[0].hostName).toBe("host1");
});
});