Public source validation / validate (push) Failing after 3m8s
55 lines
2.0 KiB
TypeScript
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);
|
|
});
|
|
});
|