67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { resolveXRuntimePost, resolveXRuntimePosts } from '../apps/X/utils/runtimePostResolver';
|
|
|
|
describe('X runtime post resolver', () => {
|
|
it('treats a runtime object as a full override for the matching base post', () => {
|
|
const base = {
|
|
id: 'p1',
|
|
authorId: 'u_base',
|
|
content: 'base content',
|
|
time: '1h',
|
|
stats: { comments: 1, retweets: 2, likes: 3, views: 4 },
|
|
};
|
|
const override = { id: 'p1', content: 'override content' };
|
|
|
|
expect(
|
|
resolveXRuntimePost(
|
|
{ p1: override as any },
|
|
new Map([['p1', base]]),
|
|
'p1',
|
|
),
|
|
).toBe(override);
|
|
});
|
|
|
|
it('returns null when a runtime tombstone hides a base post', () => {
|
|
const base = {
|
|
id: 'p1',
|
|
authorId: 'u_base',
|
|
content: 'base content',
|
|
time: '1h',
|
|
stats: { comments: 1, retweets: 2, likes: 3, views: 4 },
|
|
};
|
|
|
|
expect(resolveXRuntimePost({ p1: null }, new Map([['p1', base]]), 'p1')).toBeNull();
|
|
});
|
|
|
|
it('keeps runtime overrides and tombstones in resolved post lists', () => {
|
|
const basePosts = [
|
|
{
|
|
id: 'p1',
|
|
authorId: 'u_base',
|
|
content: 'base content',
|
|
time: '1h',
|
|
stats: { comments: 1, retweets: 2, likes: 3, views: 4 },
|
|
},
|
|
{
|
|
id: 'p2',
|
|
authorId: 'u_base',
|
|
content: 'hidden content',
|
|
time: '2h',
|
|
stats: { comments: 0, retweets: 0, likes: 0, views: 0 },
|
|
},
|
|
];
|
|
const override = { id: 'p1', content: 'override content' };
|
|
|
|
expect(
|
|
resolveXRuntimePosts(
|
|
{
|
|
p1: override as any,
|
|
p2: null,
|
|
},
|
|
basePosts,
|
|
),
|
|
).toEqual([override]);
|
|
});
|
|
});
|