mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-07 07:55:13 +02:00
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { beginCommandSpan, completeCommandSpan, resetCommandSpan } from '../../src/telemetry/command-hook.js';
|
|
|
|
describe('telemetry command hook', () => {
|
|
it('builds a completed command event from a span', () => {
|
|
resetCommandSpan();
|
|
beginCommandSpan({
|
|
commandPath: ['ktx', 'status'],
|
|
flagsPresent: { projectDir: true, json: true },
|
|
projectDir: '/tmp/private',
|
|
hasProject: true,
|
|
attachProjectGroup: true,
|
|
startedAt: 100,
|
|
});
|
|
|
|
expect(
|
|
completeCommandSpan({
|
|
completedAt: 125,
|
|
outcome: 'ok',
|
|
}),
|
|
).toEqual({
|
|
commandPath: ['ktx', 'status'],
|
|
durationMs: 25,
|
|
outcome: 'ok',
|
|
flagsPresent: { projectDir: true, json: true },
|
|
hasProject: true,
|
|
projectDir: '/tmp/private',
|
|
projectGroupAttached: true,
|
|
});
|
|
});
|
|
|
|
it('returns undefined when no preAction span exists', () => {
|
|
resetCommandSpan();
|
|
expect(completeCommandSpan({ completedAt: 200, outcome: 'ok' })).toBeUndefined();
|
|
});
|
|
|
|
it('captures errorClass and raw errorDetail on a failed command', () => {
|
|
resetCommandSpan();
|
|
beginCommandSpan({
|
|
commandPath: ['ktx', 'ingest'],
|
|
flagsPresent: {},
|
|
hasProject: true,
|
|
attachProjectGroup: false,
|
|
startedAt: 0,
|
|
});
|
|
|
|
class KtxConnectionError extends Error {}
|
|
const error = new KtxConnectionError('connect ECONNREFUSED 127.0.0.1:5432');
|
|
|
|
const completed = completeCommandSpan({ completedAt: 10, outcome: 'error', error });
|
|
expect(completed?.outcome).toBe('error');
|
|
expect(completed?.errorClass).toBe('KtxConnectionError');
|
|
expect(completed?.errorDetail).toBe('connect ECONNREFUSED 127.0.0.1:5432');
|
|
});
|
|
});
|