Files
ITWorx-Pulse-Public/apps/web/tests/unit/useLiveMetric.test.tsx
T
ITWorx Pulse release export bd774932d5
Public source validation / validate (push) Failing after 3m8s
Publish ITWorx Pulse source
2026-09-03 02:09:19 +02:00

55 lines
2.0 KiB
TypeScript

import { render } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import type { LiveClient } from '../../src/liveClient';
import type { LiveSample } from '../../src/liveBuffer';
import type { MetricQueryRequest } from '../../src/metricClient';
import { useLiveMetric } from '../../src/useLiveMetric';
const request: MetricQueryRequest = {
metric: 'host.cpu.utilization',
range: { from: '2026-08-10T06:00:00.000Z', to: '2026-08-10T06:05:00.000Z', stepSeconds: 15 },
aggregation: 'avg',
};
function sample(timestamp: string, value: number): LiveSample {
return { series: 'cpu', timestamp, value, freshness: 'fresh' };
}
describe('useLiveMetric lifecycle', () => {
it('updates historical seed data without recreating an unchanged live subscription', () => {
const unsubscribe = vi.fn();
const subscribe = vi.fn(() => ({ key: 'cpu', unsubscribe }));
const releaseUnused = vi.fn();
const client = { subscribe, releaseUnused } as unknown as LiveClient;
function Harness({ initial, query = request }: { initial: LiveSample[]; query?: MetricQueryRequest }) {
useLiveMetric(client, query, initial);
return null;
}
const view = render(<Harness initial={[sample('2026-08-10T06:00:00.000Z', 10)]} />);
expect(subscribe).toHaveBeenCalledTimes(1);
view.rerender(<Harness initial={[
sample('2026-08-10T06:00:00.000Z', 10),
sample('2026-08-10T06:00:15.000Z', 11),
]} />);
expect(subscribe).toHaveBeenCalledTimes(1);
expect(unsubscribe).not.toHaveBeenCalled();
view.rerender(<Harness
initial={[sample('2026-08-10T06:00:15.000Z', 11)]}
query={{ ...request, range: { ...request.range, from: '2026-08-10T06:01:00.000Z', to: '2026-08-10T06:06:00.000Z' } }}
/>);
expect(subscribe).toHaveBeenCalledTimes(1);
expect(unsubscribe).not.toHaveBeenCalled();
view.unmount();
expect(unsubscribe).toHaveBeenCalledTimes(1);
expect(releaseUnused).toHaveBeenCalledTimes(1);
});
});