47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { GatewayHermesRuntimeTransport } from './hermes-runtime.transport.js';
|
|
|
|
const scope = {
|
|
actorId: 'owner-1',
|
|
tenantId: 'tenant-1',
|
|
channelId: 'cli',
|
|
correlationId: 'correlation-1',
|
|
};
|
|
|
|
describe('GatewayHermesRuntimeTransport', () => {
|
|
it('preserves a configured path prefix and authenticates the concrete runtime request', async () => {
|
|
const fetchFn = vi
|
|
.fn()
|
|
.mockResolvedValue(new Response(JSON.stringify(['session.list']), { status: 200 }));
|
|
const transport = new GatewayHermesRuntimeTransport(
|
|
'https://runtime.example.test/hermes',
|
|
'test-service-token',
|
|
fetchFn,
|
|
);
|
|
|
|
await expect(transport.capabilities(scope)).resolves.toEqual(['session.list']);
|
|
|
|
expect(fetchFn).toHaveBeenCalledWith(
|
|
new URL('https://runtime.example.test/hermes/capabilities'),
|
|
expect.objectContaining({
|
|
headers: expect.objectContaining({
|
|
authorization: 'Bearer test-service-token',
|
|
'x-mosaic-channel-id': 'cli',
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
|
|
it('rejects non-loopback HTTP runtime endpoints before sending identity headers', async () => {
|
|
const fetchFn = vi.fn();
|
|
const transport = new GatewayHermesRuntimeTransport(
|
|
'http://runtime.example.test/hermes',
|
|
'test-service-token',
|
|
fetchFn,
|
|
);
|
|
|
|
await expect(transport.capabilities(scope)).rejects.toThrow('requires HTTPS');
|
|
expect(fetchFn).not.toHaveBeenCalled();
|
|
});
|
|
});
|