mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
Fix failing immersion-tracker tests
This commit is contained in:
@@ -48,28 +48,29 @@ test("startSession generates UUID-like session identifiers", () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("destroy finalizes session with a single telemetry flush path", () => {
|
test("destroy finalizes active session and persists final telemetry", () => {
|
||||||
const dbPath = makeDbPath();
|
const dbPath = makeDbPath();
|
||||||
let tracker: ImmersionTrackerService | null = null;
|
let tracker: ImmersionTrackerService | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
tracker = new ImmersionTrackerService({ dbPath });
|
tracker = new ImmersionTrackerService({ dbPath });
|
||||||
const privateApi = tracker as unknown as {
|
|
||||||
flushTelemetry: (force?: boolean) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
let flushCalls = 0;
|
|
||||||
const originalFlushTelemetry = privateApi.flushTelemetry.bind(tracker);
|
|
||||||
privateApi.flushTelemetry = (force?: boolean): void => {
|
|
||||||
flushCalls += 1;
|
|
||||||
originalFlushTelemetry(force);
|
|
||||||
};
|
|
||||||
|
|
||||||
tracker.handleMediaChange("/tmp/episode-2.mkv", "Episode 2");
|
tracker.handleMediaChange("/tmp/episode-2.mkv", "Episode 2");
|
||||||
tracker.recordSubtitleLine("Hello immersion", 0, 1);
|
tracker.recordSubtitleLine("Hello immersion", 0, 1);
|
||||||
tracker.destroy();
|
tracker.destroy();
|
||||||
|
|
||||||
assert.equal(flushCalls, 1);
|
const db = new DatabaseSync(dbPath);
|
||||||
|
const sessionRow = db
|
||||||
|
.prepare("SELECT ended_at_ms FROM imm_sessions LIMIT 1")
|
||||||
|
.get() as { ended_at_ms: number | null } | null;
|
||||||
|
const telemetryCountRow = db
|
||||||
|
.prepare("SELECT COUNT(*) AS total FROM imm_session_telemetry")
|
||||||
|
.get() as { total: number };
|
||||||
|
db.close();
|
||||||
|
|
||||||
|
assert.ok(sessionRow);
|
||||||
|
assert.ok(Number(sessionRow?.ended_at_ms ?? 0) > 0);
|
||||||
|
assert.ok(Number(telemetryCountRow.total) >= 2);
|
||||||
} finally {
|
} finally {
|
||||||
tracker?.destroy();
|
tracker?.destroy();
|
||||||
cleanupDbPath(dbPath);
|
cleanupDbPath(dbPath);
|
||||||
|
|||||||
@@ -210,7 +210,6 @@ export class ImmersionTrackerService {
|
|||||||
|
|
||||||
destroy(): void {
|
destroy(): void {
|
||||||
if (this.isDestroyed) return;
|
if (this.isDestroyed) return;
|
||||||
this.isDestroyed = true;
|
|
||||||
if (this.flushTimer) {
|
if (this.flushTimer) {
|
||||||
clearTimeout(this.flushTimer);
|
clearTimeout(this.flushTimer);
|
||||||
this.flushTimer = null;
|
this.flushTimer = null;
|
||||||
@@ -220,6 +219,7 @@ export class ImmersionTrackerService {
|
|||||||
this.maintenanceTimer = null;
|
this.maintenanceTimer = null;
|
||||||
}
|
}
|
||||||
this.finalizeActiveSession();
|
this.finalizeActiveSession();
|
||||||
|
this.isDestroyed = true;
|
||||||
this.db.close();
|
this.db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user