91 lines
3.1 KiB
TypeScript
91 lines
3.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
normalizePersistedTaskChangePresenceIndex,
|
|
toPersistedTaskChangePresenceIndex,
|
|
} from '../../../../src/main/services/team/cache/taskChangePresenceCacheSchema';
|
|
import {
|
|
LEGACY_TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
} from '../../../../src/main/services/team/cache/taskChangePresenceCacheTypes';
|
|
|
|
describe('taskChangePresenceCacheSchema', () => {
|
|
it('dual-reads legacy v1 payloads and normalizes them to the current schema version', () => {
|
|
const normalized = normalizePersistedTaskChangePresenceIndex({
|
|
version: LEGACY_TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
teamName: 'my-team',
|
|
projectFingerprint: 'project-fingerprint',
|
|
logSourceGeneration: 'log-generation',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
entries: {
|
|
'task-1': {
|
|
taskId: 'task-1',
|
|
taskSignature: 'sig-1',
|
|
presence: 'has_changes',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
logSourceGeneration: 'log-generation',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(normalized).toEqual({
|
|
version: TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
teamName: 'my-team',
|
|
projectFingerprint: 'project-fingerprint',
|
|
logSourceGeneration: 'log-generation',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
entries: {
|
|
'task-1': {
|
|
taskId: 'task-1',
|
|
taskSignature: 'sig-1',
|
|
presence: 'has_changes',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
logSourceGeneration: 'log-generation',
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
it('preserves needs_attention when normalizing the current schema payload', () => {
|
|
const normalized = normalizePersistedTaskChangePresenceIndex({
|
|
version: TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
teamName: 'my-team',
|
|
projectFingerprint: 'project-fingerprint',
|
|
logSourceGeneration: 'log-generation',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
entries: {
|
|
'task-1': {
|
|
taskId: 'task-1',
|
|
taskSignature: 'sig-1',
|
|
presence: 'needs_attention',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
logSourceGeneration: 'log-generation',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(normalized?.entries['task-1']?.presence).toBe('needs_attention');
|
|
});
|
|
|
|
it('serializes all new writes as schema version 2', () => {
|
|
const serialized = toPersistedTaskChangePresenceIndex({
|
|
version: TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION,
|
|
teamName: 'my-team',
|
|
projectFingerprint: 'project-fingerprint',
|
|
logSourceGeneration: 'log-generation',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
entries: {
|
|
'task-1': {
|
|
taskId: 'task-1',
|
|
taskSignature: 'sig-1',
|
|
presence: 'needs_attention',
|
|
writtenAt: '2026-03-01T12:00:00.000Z',
|
|
logSourceGeneration: 'log-generation',
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(serialized.version).toBe(TASK_CHANGE_PRESENCE_CACHE_SCHEMA_VERSION);
|
|
expect(serialized.entries['task-1']?.presence).toBe('needs_attention');
|
|
});
|
|
});
|