WS ticket dashboard auth, builder universal signing/size limits/fusion obfuscation/dropper bundles, Path Tracer WireGuard topology, SessionGate degraded mode and download timeouts, server bootstrap (data dir, cloudflared dedupe, config port precedence), agent mesh/miner/spread fixes. README refreshed; usb bundle repacked; PROBLEMS.md audit log updated.
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import {
|
|
generateSampleSeries,
|
|
validateChartSeries,
|
|
resolveChartSeries,
|
|
chartSeriesDelta,
|
|
chartSeriesPeak,
|
|
} from './chartSampleData';
|
|
|
|
describe('chartSampleData', () => {
|
|
const kinds = ['hashrate', 'accept', 'cpu', 'mem', 'gpu'] as const;
|
|
|
|
it.each(kinds)('generateSampleSeries(%s) validates', (kind) => {
|
|
const series = generateSampleSeries(kind, 48);
|
|
expect(series).toHaveLength(48);
|
|
const v = validateChartSeries(series);
|
|
expect(v.ok, v.errors.join('; ')).toBe(true);
|
|
expect(chartSeriesPeak(series)).toBeGreaterThan(0);
|
|
});
|
|
|
|
it('resolveChartSeries returns empty when live is empty', () => {
|
|
const { data, mode } = resolveChartSeries([]);
|
|
expect(mode).toBe('empty');
|
|
expect(data).toHaveLength(0);
|
|
});
|
|
|
|
it('resolveChartSeries returns live slice when data exists', () => {
|
|
const live = generateSampleSeries('cpu', 20);
|
|
const { data, mode } = resolveChartSeries(live);
|
|
expect(mode).toBe('live');
|
|
expect(data.length).toBe(20);
|
|
});
|
|
|
|
it('chartSeriesDelta computes trend', () => {
|
|
const series = generateSampleSeries('hashrate', 48);
|
|
const delta = chartSeriesDelta(series);
|
|
expect(delta).not.toBeNull();
|
|
expect(delta!).toBeGreaterThan(0);
|
|
});
|
|
});
|