Use shared local-day helpers in immersion tracker tests

- derive midnight and week-boundary timestamps from query-shared utilities
- keep split-module coverage aligned with db-local time handling
This commit is contained in:
2026-03-30 19:59:45 -07:00
parent 6118c46192
commit e16250dedc
2 changed files with 13 additions and 8 deletions

View File

@@ -50,6 +50,7 @@ import {
updateAnimeAnilistInfo, updateAnimeAnilistInfo,
upsertCoverArt, upsertCoverArt,
} from '../query-maintenance.js'; } from '../query-maintenance.js';
import { getLocalEpochDay } from '../query-shared.js';
import { EVENT_CARD_MINED, EVENT_SUBTITLE_LINE, SOURCE_TYPE_LOCAL } from '../types.js'; import { EVENT_CARD_MINED, EVENT_SUBTITLE_LINE, SOURCE_TYPE_LOCAL } from '../types.js';
function makeDbPath(): string { function makeDbPath(): string {
@@ -360,9 +361,6 @@ test('split library helpers return anime/media session and analytics rows', () =
try { try {
const now = new Date(); const now = new Date();
const todayLocalDay = Math.floor(
new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime() / 86_400_000,
);
const animeId = getOrCreateAnimeRecord(db, { const animeId = getOrCreateAnimeRecord(db, {
parsedTitle: 'Library Anime', parsedTitle: 'Library Anime',
canonicalTitle: 'Library Anime', canonicalTitle: 'Library Anime',
@@ -398,6 +396,7 @@ test('split library helpers return anime/media session and analytics rows', () =
0, 0,
).getTime(); ).getTime();
const sessionId = startSessionRecord(db, videoId, startedAtMs).sessionId; const sessionId = startSessionRecord(db, videoId, startedAtMs).sessionId;
const todayLocalDay = getLocalEpochDay(db, startedAtMs);
finalizeSessionMetrics(db, sessionId, startedAtMs, { finalizeSessionMetrics(db, sessionId, startedAtMs, {
endedAtMs: startedAtMs + 55_000, endedAtMs: startedAtMs + 55_000,
totalWatchedMs: 55_000, totalWatchedMs: 55_000,

View File

@@ -37,6 +37,11 @@ import {
getWordOccurrences, getWordOccurrences,
upsertCoverArt, upsertCoverArt,
} from '../query.js'; } from '../query.js';
import {
getShiftedLocalDaySec,
getStartOfLocalDayTimestamp,
toDbTimestamp,
} from '../query-shared.js';
import { import {
SOURCE_TYPE_LOCAL, SOURCE_TYPE_LOCAL,
SOURCE_TYPE_REMOTE, SOURCE_TYPE_REMOTE,
@@ -44,7 +49,6 @@ import {
EVENT_SUBTITLE_LINE, EVENT_SUBTITLE_LINE,
EVENT_YOMITAN_LOOKUP, EVENT_YOMITAN_LOOKUP,
} from '../types.js'; } from '../types.js';
import { toDbTimestamp } from '../query-shared.js';
function makeDbPath(): string { function makeDbPath(): string {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'subminer-imm-query-test-')); const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'subminer-imm-query-test-'));
@@ -728,8 +732,9 @@ test('getTrendsDashboard keeps local-midnight session buckets separate', () => {
parseMetadataJson: null, parseMetadataJson: null,
}); });
const beforeMidnight = '1772436600000'; const boundaryMs = BigInt(getStartOfLocalDayTimestamp(db, '1772436600000'));
const afterMidnight = '1772440200000'; const beforeMidnight = (boundaryMs - 1n).toString();
const afterMidnight = (boundaryMs + 1n).toString();
const firstSessionId = 1; const firstSessionId = 1;
const secondSessionId = 2; const secondSessionId = 2;
const insertSession = db.prepare( const insertSession = db.prepare(
@@ -1135,8 +1140,9 @@ test('getQueryHints computes weekly new-word cutoff from calendar midnights', ()
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, `,
); );
const justBeforeWeekBoundary = 1_772_955_000; const weekBoundarySec = getShiftedLocalDaySec(db, '1773601200000', -7);
const justAfterWeekBoundary = 1_772_958_600; const justBeforeWeekBoundary = weekBoundarySec - 1;
const justAfterWeekBoundary = weekBoundarySec + 1;
insertWord.run( insertWord.run(
'境界前', '境界前',
'境界前', '境界前',