mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-21 22:15:40 +00:00
23f7ba02d6
* feat(player-stats): local listening history tab with heatmap and summaries Record play sessions in library.sqlite when the library index is enabled, add Rust read APIs and Tauri commands for year/day aggregates, and ship the Player stats UI with session clustering, event-driven live refresh, and a notice when some servers are excluded from indexing. * test(player-stats): split play_session repo and expand test coverage Move the repository into play_session/ (completion, cluster, integration tests), add remap/purge/FK coverage in Rust, and cover ingestion gates plus live-refresh hooks on the frontend per spec v0.3. * docs(release): CHANGELOG and credits for player stats (PR #849) * fix(player-stats): satisfy tsc and clippy CI gates Use InternetRadioStation field names in the radio skip test and replace manual month/day range checks with RangeInclusive::contains.
17 lines
616 B
TypeScript
17 lines
616 B
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
import { emitPlaySessionRecorded, onPlaySessionRecorded } from './playSessionRecorded';
|
|
|
|
describe('playSessionRecorded', () => {
|
|
it('notifies subscribers when a listen is persisted', () => {
|
|
const listener = vi.fn();
|
|
const unsub = onPlaySessionRecorded(listener);
|
|
const detail = { serverId: 's1', trackId: 't1', startedAtMs: 123 };
|
|
emitPlaySessionRecorded(detail);
|
|
expect(listener).toHaveBeenCalledWith(detail);
|
|
unsub();
|
|
listener.mockClear();
|
|
emitPlaySessionRecorded(detail);
|
|
expect(listener).not.toHaveBeenCalled();
|
|
});
|
|
});
|