Files
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

69 lines
2.6 KiB
TypeScript

// Plan §3.KK2 — summarisePluginEvents() pure roll-up.
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import {
__resetPluginEventBufferForTests,
pluginEventSnapshot,
recordPluginEvent,
summarisePluginEvents,
} from '../src/plugins/events.js';
beforeEach(() => __resetPluginEventBufferForTests());
afterEach(() => __resetPluginEventBufferForTests());
describe('summarisePluginEvents', () => {
it('returns zero-shape for an empty list', () => {
const stats = summarisePluginEvents([]);
expect(stats.total).toBe(0);
expect(stats.byKind).toEqual({});
expect(stats.byPluginId).toEqual({});
expect(stats.oldestAt).toBeNull();
expect(stats.newestAt).toBeNull();
expect(stats.firstId).toBeNull();
expect(stats.lastId).toBeNull();
});
it('counts byKind across the buffer', () => {
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'b' });
recordPluginEvent({ kind: 'plugin.uninstalled', pluginId: 'a' });
const stats = summarisePluginEvents(pluginEventSnapshot());
expect(stats.byKind).toEqual({
'plugin.installed': 2,
'plugin.uninstalled': 1,
});
});
it('counts byPluginId, skipping empty plugin ids (e.g. marketplace events)', () => {
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'b' });
recordPluginEvent({ kind: 'plugin.marketplace-refreshed', pluginId: '' });
const stats = summarisePluginEvents(pluginEventSnapshot());
expect(stats.byPluginId).toEqual({ a: 2, b: 1 });
});
it('records oldestAt + newestAt + id range', () => {
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.upgraded', pluginId: 'a' });
const stats = summarisePluginEvents(pluginEventSnapshot());
expect(stats.firstId).toBe(1);
expect(stats.lastId).toBe(2);
expect(stats.oldestAt).toBeLessThanOrEqual(stats.newestAt!);
expect(stats.total).toBe(2);
});
it('roll-up over a filtered slice respects the input order', () => {
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.uninstalled', pluginId: 'a' });
recordPluginEvent({ kind: 'plugin.installed', pluginId: 'b' });
const onlyA = pluginEventSnapshot().filter((e) => e.pluginId === 'a');
const stats = summarisePluginEvents(onlyA);
expect(stats.total).toBe(2);
expect(stats.byKind).toEqual({
'plugin.installed': 1,
'plugin.uninstalled': 1,
});
});
});